Le tunnel SSH ou la redirection de port SSH est une méthode de création d’une connexion SSH chiffrée entre un client et une machine serveur à travers laquelle les ports de services peuvent être relayés.
Le transfert SSH est utile pour transporter les données réseau des services qui utilisent un protocole non chiffré, tel que VNC ou FTP, pour accéder au contenu géo-restreint ou pour contourner les pare-feu intermédiaires. Fondamentalement, vous pouvez transférer n’importe quel port TCP et canaliser le trafic via une connexion SSH sécurisée.
Cet article vous guide pour mettre en place et configurer un tunnel SSH.
Table des matières
Comment configurer le tunnel SSH
Certains protocoles n’existent pas en version chiffrée.
Pour rendre la connexion plus sûr et éviter le sniff, ou attaque MiTM, on peut utiliser le protocole SSH afin de créer un tunnel.
Ce dernier va permettre de chiffrer la connexion à travers SSH.
Dans cet exemple, nous avons un serveur VNC sur 192.168.1.15:5901.
Le but est de pouvoir se connecter sur VNC via un tunnel SSH sécurisé.
Soit depuis la machine Local, soit depuis une machine du LAN.
De plus, cela vous permet aussi de ne pas exposer pleinement certains services vulnérables ou sujets à des attaques.
Par exemple, dans le cas d’un serveur VNC, vous pouvez le mettre en écoute sur localhost et y accéder depuis une machine distante à travers un tunnel SSH.
Rediriger un port local vers un tunnel SSH
La redirection de port local vous permet de transférer un port de la machine locale (client ssh) vers un port de la machine distante (serveur ssh), qui est ensuite transférée vers un port de la machine de destination.
Avec ce type de transfert de port, le client SSH écoute sur un port donné et tunnels toute connexion vers ce port vers le port spécifié.
La machine de destination peut être le serveur SSH distant ou toute autre machine.
La syntaxe à utiliser :
ssh -L [LOCAL_IP:]LOCAL_PORT:DESTINATION:DESTINATION_PORT [USER@]SSH_SERVER
Les options :
- [LOCAL_IP:] LOCAL_PORT – L’adresse IP et le numéro de port de la machine locale. Lorsque LOCAL_IP est omis, le client ssh se lie sur localhost.
- DESTINATION: DESTINATION_PORT – L’adresse IP ou le nom d’hôte et le port de la machine de destination.
- [USER @] SERVER_IP – L’utilisateur SSH distant et l’adresse IP du serveur.
Par exemple ici, on créé un un tunnel SSH pour sécuriser une connexion VNC qui n’est pas chiffrée par défaut.
Ainsi, la commande SSH créé un tunnel SSH avec comme port d’entrée 5000 qui redirige vers 127.0.0.1:5901 à travers la session ssh [email protected]
ssh -L 5000:127.0.0.1:5901 -N -f [email protected]
L’option -f indique à la commande ssh de s’exécuter en arrière-plan et -N de ne pas exécuter de commande à distance. Nous utilisons localhost car le VNC et le serveur SSH fonctionnent sur le même hôte.
Puis on doit saisir le mot de passe de l’utilisateur pour ouvrir la session SSH.
A partir de là, SSH écoute et ouvre le port 5000.
netstat confirme bien que SSH que le port est en écoute sur localhost.
Enfin à partir de là, on indique 127.0.0.1:5000 au client VNC pour se connecter.
A noter que le client Remmina permet de créer une connexion VNC via un tunnel SSH.
Rediriger un port distant vers un tunnel SSH
La redirection de port à distance est l’opposé de la redirection de port local. Il vous permet de rediriger un port de la machine distante (serveur ssh) vers un port de la machine locale (client ssh), qui est ensuite redirigé vers un port de la machine de destination.
La redirection de port à distance est principalement utilisée pour donner accès à un service interne à quelqu’un de l’extérieur.
Cela nécessite de modifier la configuration du serveur SSH.
- Pour cela, éditez le fichier sshd_config :
sudo vim /etc/ssh/sshd_config
Cherchez l’option GatewayPorts pour la passer à Yes.
Si elle n’existe pas, ajoutez la ligne.
GatewayPorts yes
Enfin, relancez le serveur SSH :
/etc/init.d/ssh restart
Voici la syntaxe à utiliser, elle est similaire à celle précédente, simplement on utilise l’option -R :
ssh -R [REMOTE:]REMOTE_PORT:DESTINATION:DESTINATION_PORT [USER@]SSH_SERVER
Voici la description des paramètres :
- [REMOTE:] REMOTE_PORT – L’adresse IP et le numéro de port sur le serveur SSH distant. Un REMOTE vide signifie que le serveur SSH distant se liera sur toutes les interfaces.
- DESTINATION: DESTINATION_PORT – L’adresse IP ou le nom d’hôte et le port de la machine de destination.
- [USER @] SERVER_IP – L’utilisateur SSH distant et l’adresse IP du serveur.
ssh -R 5000:127.0.0.1:5901 -N -f [email protected]
On voit bien ici que SSH écoute sur toutes les IP et non plus en local.
A partir de là, on peut se connecter à l’adresse 192.168.1.15:5000
Tunnel SSH en proxy SOCKS
Enfin une autre méthode consiste à créer un serveur SOCKS via un tunnel SSH. Ce dernier agit alors en tant que proxy.
Le client créer une connexion SSH en ouvrant un port local.
Le serveur SSH se charge ensuite de délivrer la connexion HTTP et HTTPS.
C’est un bon moyen de contourner certains restrictions de firewall et de chiffrer la connexion internet.
On obtient le schéma suivante :
Sur le client, ouvrez une connexion SSH avec la commande suivante :
ssh -D 8000 -q -C -N [email protected]
- -D 8000: ouvre un proxy SOCKS sur le port local: 8000. Si ce port est utilisé, essayez un autre numéro de port. Si vous souhaitez ouvrir plusieurs proxys SOCKS vers plusieurs points de terminaison, choisissez un port différent pour chacun.
- -C: compresser les données dans le tunnel, économiser la bande passante
- -q: mode silencieux, ne produit rien localement
- -N: n’exécute pas de commandes à distance, utile pour simplement transférer les ports
- [email protected]: le serveur SSH distant auquel vous avez accès
- Ajoutez l’option -f si vous désirez que SSH tourne en fond.
Enfin on configure le SOCKS dans les paramètres de connexion du navigateur WEB.
Configurer le tunnel SSH dans Windows avec PuTTy
Le client SSH Windows PuTTy est aussi capable de créer un tunnel SSH sécurisé.
- Télécharger et installer PuTTy via le setup MSI
- Configurez une session avec le nom d’hôte et le nom dans Saved Session
- Cliquez sur le bouton Save
- Puis cliquez, à gauche, sur le menu Connection > SSH > Tunnels
- Ensuite Cochez la case d’option Local pour configurer local, Remote pour distant et Dynamic pour la redirection de port dynamique
- Si vous configurez le transfert local, entrez le port de transfert local dans le champ Port source et dans Destination, entrez l’hôte et l’adresse IP de destination, par exemple, localhost: 5901
- Pour le transfert de port distant, entrez le port de transfert du serveur SSH distant dans le champ Port source et dans Destination, entrez l’hôte et l’adresse IP de destination, par exemple, localhost: 5000
- Ensuite cliquez sur Add afin de prendre en compte le tunnel
- Retournez dans le menu à gauche Session puis Save afin d’enregistrer la session avec le tunnel SSH