Comment utiliser le tunneling SSH pour accéder aux serveurs restreints
Savoir comment créer un tunnel SSH peut vous aider à atteindre des réseaux et des systèmes autrement inaccessibles.
Le tunneling SSH ou redirection de port SSH est une méthode de création d'une connexion SSH cryptée entre un client et un serveur à travers laquelle les ports de services peuvent être relayés.
Tunnel SSH local avec redirection de port
Vous pouvez utiliser un tunnel ssh local lorsque vous souhaitez accéder à une ressource à laquelle vous ne pouvez pas accéder directement, mais qu'un serveur ssh auquel vous avez accès le peut. Voici quelques scénarios.
Proxy vers le serveur distant
Dans l'image ci-dessus, l'hôte bleu ne peut pas atteindre http://192.168.0.3
mais peut se connecter via SSH à 192.168.0.2. La commande ssh suivante exécutée sur l'hôte bleu permettra à l'hôte bleu d'atteindre l'hôte rouge.
ssh -L 8080:192.168.0.3:80 reduser@192.168.0.2
L'hôte bleu peut désormais ouvrir un navigateur, accéder à http://localhost:8080
et voir la page Web hébergée sur 192.168.0.3.
Transfert de port local
Dans l'image ci-dessus, l'hôte bleu souhaite se connecter à l'hôte rouge sur le port 80, mais il y a un pare-feu entre les deux qui le refuse. Étant donné que l'hôte bleu peut se connecter à l'hôte rouge, nous pouvons créer un tunnel SSH de redirection de port local pour accéder à ce port.
La commande sur l'hôte bleu sera :
ssh -L 8080:192.168.0.2:80 reduser@192.168.0.2
Désormais, lorsque l'hôte bleu ouvre un navigateur et accède à http://localhost:8080
il pourra voir tout ce que le serveur rouge a sur le port 80.
Syntaxe de redirection de port local
Cette syntaxe pour créer un tunnel de redirection de port SSH local est la suivante :
ssh -L <LPORT>:<RHOST>:<RPORT> <GATEWAY>
Tunnel SSH distant avec redirection de port
Dans ce scénario, nous créons un tunnel SSH inversé. Ici, nous pouvons lancer un tunnel ssh dans un sens, puis utiliser ce tunnel pour créer un tunnel ssh dans l'autre sens. Cela peut être utile lorsque vous déposez un ordinateur drone dans un réseau et que vous souhaitez qu'il « téléphone à la maison ». Ensuite, lorsqu'il téléphone à votre domicile, vous pouvez vous y connecter via le tunnel SSH établi.
Nous sommes sur l'hôte vert et souhaitons nous connecter en mode SSH à l'hôte bleu. Cependant, le pare-feu bloque directement cette connexion. Étant donné que l'hôte bleu peut se connecter à l'hôte vert, nous pouvons nous connecter en utilisant cela, et lorsque l'hôte vert souhaite revenir à l'hôte bleu, il peut emprunter ce tunnel précédemment établi.
L'hôte bleu initie un tunnel ssh comme ceci :
ssh -R 2222:localhost:22 greenuser@192.168.0.2
Cela ouvre le port 2222 sur l'hôte vert, qui le redirige ensuite vers le port 22 sur l'hôte bleu. Ainsi, si l'hôte vert se connectait à lui-même sur le port 2222, il atteindrait alors l'hôte bleu.
L'hôte vert peut désormais se connecter à l'hôte bleu comme ceci :
ssh -p 2222 blueuser@localhost
Utilisation de l'option -N
Lorsque vous utilisez ssh, vous pouvez spécifier l'indicateur -N
qui indique à ssh que vous n'avez pas besoin d'envoyer de commandes via la connexion ssh lorsqu'elle est établie. Cette option est souvent utilisée lors de la création de tunnels, car nous n’avons souvent pas besoin d’obtenir une invite.
AutoSSH
La commande autossh
est utilisée pour ajouter de la persistance à vos tunnels. Son travail consiste à vérifier que votre connexion SSH est active et, si ce n'est pas le cas, à la créer.
Voici une commande autossh que vous reconnaîtrez peut-être.
autossh -N -i /home/blueuser/.ssh/id_rsa -R 2222:localhost:22 [email
L'option -i /home/blueuser/.ssh/id_rsa
indique qu'il faut utiliser un certificat pour authentifier cette connexion SSH.
Désormais, lorsque votre tunnel tombe en panne, il essaiera automatiquement de se reconnecter et continuera d'essayer jusqu'à ce qu'il réussisse. Pour le rendre persistant lors d'un redémarrage, ajoutez la commande ssh en tant que tâche cron.