Transfert De Port Par Tunnel SSH
Contexte : Il y a un serveur qui ne peut accéder qu’au port de service SSH, les autres ports étant inaccessibles pour des raisons de sécurité. Que faire si vous souhaitez communiquer avec d’autres ports du serveur ?
En utilisant le tunnel SSH, vous pouvez communiquer librement, comme le montre clairement l’image ci-dessous.
1 Commande de base
La commande de base est la suivante :
|
|
En utilisant le tunnel SSH entre votre machine et hostB, vous pouvez accéder au port Z de l’hôte C via le port X de votre machine. Essentiellement, B accède à C, puis se connecte à votre machine via le tunnel.
2 Paramètres optionnels
-N
indique de ne pas se connecter en SSH, mais uniquement de faire le transfert de port.-f
indique de mettre le processus SSH en arrière-plan.-L
indique de faire un transfert de port local, au format :port_local:hôte_cible:port_cible
. Une commande peut avoir plusieurs paramètres -L pour représenter plusieurs règles.-R
transfert inverse, mais les positions de la machine locale et de C doivent être échangées. Par exemple,ssh -R 8000:localhost:8080 user@ssh_server
transfère le port 8000 du serveur vers le port 8080 local.-D
proxy SOCKS5 de trafic.
3 Scénarios d’application
3.1 Contournement des pare-feux
Comme décrit dans le contexte. Le pare-feu empêche l’hôte A de se connecter à certains ports de l’hôte B, mais certains ports de l’hôte B sont toujours ouverts à l’hôte A. Si l’hôte A doit accéder aux ports de l’hôte B bloqués par le pare-feu, il peut le faire via une connexion SSH à l’hôte B + transfert de port. Notez que dans ce cas, l’hôte C est en fait l’hôte B.
|
|
Ainsi, en accédant au port 5000 local, vous pouvez accéder au port 5000 du serveur, qui est en fait bloqué par le pare-feu.
3.2 Segmentation du réseau
L’hôte B et l’hôte C sont sur le même réseau interne, l’hôte B pouvant communiquer avec l’extérieur mais pas l’hôte C. Si un hôte externe A souhaite accéder à l’hôte C, il peut le faire via une connexion SSH à l’hôte B + transfert de port.
|
|
L’IP de l’hôte B est 192.168.1.11, 10.0.2.15 est une machine virtuelle C sur B, et l’hôte B exécute cette commande pour accéder au port 22 de la machine virtuelle via le port 22022 local.
3.3 Accès aux ports non publics
Un hôte interne A peut accéder au réseau public mais n’a pas d’IP publique ; un hôte public B ne peut pas trouver A mais permet à A d’accéder à ses ports (A peut se connecter directement à B, mais pas l’inverse). Si A veut que B accède à lui, il peut le faire via une connexion SSH à l’hôte B + transfert de port. Notez que dans ce cas, l’hôte C est en fait l’hôte A.
Voir les explications des paramètres -R
.
3.4 Transfert de port dynamique
Il peut être utilisé comme proxy pour créer un serveur proxy SOCKS sur l’ordinateur local. Le serveur proxy SOCKS créé avec le paramètre -D
peut transférer le trafic réseau local via un tunnel SSH vers un serveur distant, permettant aux applications sur l’ordinateur local d’accéder à Internet via le serveur distant. La syntaxe du paramètre -D
est la suivante :
|
|
où bind_address
indique l’adresse IP de liaison, qui peut être omise ; port
indique le port sur lequel le serveur proxy SOCKS écoutera. Cette commande démarre un serveur proxy SOCKS sur l’ordinateur local et le lie au port spécifié.
Par exemple, si vous souhaitez créer un serveur proxy SOCKS sur l’ordinateur local pour transférer tout le trafic réseau via un serveur distant vers Internet, vous pouvez utiliser la commande suivante :
|
|
Après avoir exécuté cette commande, vous pouvez configurer le proxy des applications sur l’ordinateur local (comme le navigateur) à 127.0.0.1:1080
, transférant ainsi tout le trafic réseau via le tunnel SSH vers le serveur distant et accédant à Internet depuis le serveur distant. Veuillez noter qu’il est recommandé d’utiliser une connexion SSH chiffrée pour le proxy SOCKS afin de protéger la sécurité des données.