7. TCP/IP Port Forwarding (Transfert de port TCP/IP)
7. TCP/IP Port Forwarding (Transfert de port TCP/IP)
Cette section décrit la façon dont les connexions vers un port TCP/IP ou X11 peuvent être transférées à travers un tunnel sécurisé. Cette fonctionnalité est souvent utilisée par les protocoles d'application tels que le courrier électronique, le web et les connexions de base de données. Bien que les connexions transférées se trouvent dans un tunnel chiffré, elles ne sont pas nécessairement sécurisées entre les systèmes finaux.
7.1. Requesting Port Forwarding (Demande de transfert de port)
Pour demander un transfert de port TCP/IP, le message suivant est envoyé.
byte SSH_MSG_GLOBAL_REQUEST
string "tcpip-forward"
boolean want reply
string bind address
uint32 bind port
Si un programme écoute les connexions entrantes sur un port particulier côté client, il demande au serveur de transférer les connexions au client. Le serveur commence à écouter sur ce port et autorise les demandes de transfert ultérieures vers le client. Les connexions entrantes sont transférées du serveur vers le client via le canal de transfert TCP/IP (section 7.2) ci-dessous.
Si bind address est une chaîne vide, le serveur DEVRAIT écouter sur le port pour toutes les familles et adresses de protocole. Sinon, il ne DEVRAIT écouter que pour l'adresse spécifiée.
Si un programme souhaite écouter les connexions sur un port côté serveur, il envoie un message SSH_MSG_CHANNEL_OPEN au serveur avec le type de canal direct-tcpip. (Voir la section 7.2)
« Demander un transfert de port » signifie qu'un client ou un serveur demande à l'autre extrémité de commencer à écouter. Le client PEUT également utiliser le même message pour demander le transfert des connexions TCP/IP qu'il émet (voir la section 7.2).
Il est fortement recommandé que les implémentations demandent et vérifient une réponse pour chaque nouvelle demande de transfert de port. SSH_MSG_REQUEST_FAILURE est renvoyé lorsque possible.
7.2. TCP/IP Forwarding Channels (Canaux de transfert TCP/IP)
Lorsqu'une connexion entrante arrive sur un port écouté côté serveur, le serveur demande l'ouverture d'un canal au client. Ce canal devrait rester ouvert jusqu'à ce que le client ouvre la connexion correspondante sur son port.
Le message d'ouverture de canal est le suivant.
byte SSH_MSG_CHANNEL_OPEN
string "forwarded-tcpip"
uint32 sender channel
uint32 initial window size
uint32 maximum packet size
string connected address (e.g., "192.168.7.38")
uint32 connected port
string originator address (e.g., "192.168.7.38")
uint32 originator port
La demande de transfert d'une connexion depuis le côté client vers un port côté serveur est effectuée avec le type de message suivant.
byte SSH_MSG_CHANNEL_OPEN
string "direct-tcpip"
uint32 sender channel
uint32 initial window size
uint32 maximum packet size
string host to connect (e.g., "192.168.7.38")
uint32 port to connect
string originator address (e.g., "192.168.7.38")
uint32 originator port
Les implémentations DOIVENT transférer toutes les données sur ces canaux ouverts vers le socket local approprié.