Passa al contenuto principale

7. TCP/IP Port Forwarding (Inoltro di porta TCP/IP)

7. TCP/IP Port Forwarding (Inoltro di porta TCP/IP)​

Questa sezione descrive come le connessioni verso una porta TCP/IP o X11 possano essere inoltrate attraverso un tunnel sicuro. Questa funzionalità è spesso utilizzata da protocolli applicativi quali posta elettronica, web e connessioni a database. Sebbene le connessioni inoltrate si trovino in un tunnel crittografato, non sono necessariamente sicure tra i sistemi finali.

7.1. Requesting Port Forwarding (Richiesta di inoltro di porta)​

Per richiedere un inoltro di porta TCP/IP, viene inviato il messaggio seguente.

byte      SSH_MSG_GLOBAL_REQUEST
string "tcpip-forward"
boolean want reply
string bind address
uint32 bind port

Se un programma ascolta le connessioni in arrivo su una porta particolare lato client, richiede al server di inoltrare le connessioni al client. Il server inizia ad ascoltare su quella porta e consente le richieste di inoltro successive verso il client. Le connessioni in arrivo vengono inoltrate dal server al client tramite il canale di inoltro TCP/IP (sezione 7.2) riportato di seguito.

Se bind address è una stringa vuota, il server DOVREBBE ascoltare sulla porta per tutte le famiglie e gli indirizzi di protocollo. In caso contrario, DOVREBBE ascoltare solo per l'indirizzo specificato.

Se un programma desidera ascoltare le connessioni su una porta lato server, invia un messaggio SSH_MSG_CHANNEL_OPEN al server con il tipo di canale direct-tcpip. (Vedere la sezione 7.2)

"Richiedere un inoltro di porta" significa che un client o un server richiede all'altra estremità di iniziare ad ascoltare. Il client PUÒ anche utilizzare lo stesso messaggio per richiedere l'inoltro delle connessioni TCP/IP che emette (vedere la sezione 7.2).

È fortemente raccomandato che le implementazioni richiedano e verifichino una risposta per ogni nuova richiesta di inoltro di porta. SSH_MSG_REQUEST_FAILURE viene restituito quando possibile.

7.2. TCP/IP Forwarding Channels (Canali di inoltro TCP/IP)​

Quando una connessione in arrivo arriva su una porta in ascolto lato server, il server richiede l'apertura di un canale al client. Questo canale dovrebbe rimanere aperto finché il client non apre la connessione corrispondente sulla propria porta.

Il messaggio di apertura del canale è il seguente.

byte      SSH_MSG_CHANNEL_OPEN
string "forwarded-tcpip"
uint32 sender channel
uint32 initial window size
uint32 maximum packet size
string connected address (es., "192.168.7.38")
uint32 connected port
string originator address (es., "192.168.7.38")
uint32 originator port

La richiesta di inoltro di una connessione dal lato client a una porta lato server viene effettuata con il seguente tipo di messaggio.

byte      SSH_MSG_CHANNEL_OPEN
string "direct-tcpip"
uint32 sender channel
uint32 initial window size
uint32 maximum packet size
string host to connect (es., "192.168.7.38")
uint32 port to connect
string originator address (es., "192.168.7.38")
uint32 originator port

Le implementazioni DEVONO inoltrare tutti i dati su questi canali aperti al socket locale appropriato.