SSH tunnelling

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
Fiche express
Domaine Tunnels chiffrés / redirection de ports
Options -L (local), -R (reverse), -D (dynamique/SOCKS)
Voir aussi Stunnel · HTTP tunneling · Proxychains

SSH peut sécuriser d'autres protocoles (FTP, RDP, HTTP, bases de données...) en les faisant transiter par une connexion chiffrée : c'est le port forwarding. Le trafic local est redirigé, à travers le tunnel SSH, vers un service distant.

+-----------+        connexion SSH        +---------------+
|  Client   |  (trafic chiffré, port 22)  |  Serveur SSH  |
| port 8080 +---------------------------->+  service 3306 |
+-----------+                             +---------------+
       ssh -L 8080:localhost:3306 user@serveur
1. le client établit la connexion SSH vers le serveur
2. le tunnel redirige le port local 8080
3. le serveur SSH transmet au service (port 3306)
4. les données transitent chiffrées

Redirection locale (-L)

# forme générale : port_local:hote_cible:port_destination
ssh -f -N -T -L 2222:SRV_DST:22 compte@SRV_REBOND   # tunnel en tâche de fond
ssh -p 2222 compte@localhost                        # utilisation du tunnel

ssh -N -L 12321:localhost:12321 root@192.168.1.101
ssh -L 3128:127.0.0.1:3128 root@machinedistante     # récupérer un proxy distant en local
ssh -L 9089:localhost:3389 user@serveur.example -p 443   # RDP encapsulé
  • -L : redirige un port local vers un hôte:port du côté distant.
  • -N : n'exécute aucune commande distante (juste le forwarding).
  • -f : passe en arrière-plan. -q : silencieux.

Redirection inverse (-R)

ssh -N -f -R 3306:localhost:3306 tunnel@10.102.11.230   # expose un service local côté serveur

Sur HOST1, ssh -L p1:HOST2:p2 HOST2 signifie : une connexion au port p1 est retransmise vers le port p2 de HOST2. La forme ssh -R p1:HOST2:p2 HOST1 établit le tunnel dans l'autre sens.

Redirection dynamique (-D, proxy SOCKS)

ssh -D 8080 user@serveur.example -p 443     # proxy SOCKS local sur 8080
curl --socks5 127.0.0.1:8080 www.whatismyip.org

On bénéficie ainsi de la protection SSH pour tout le trafic du proxy.

Tunnels multiples et rebonds

# plusieurs redirections en une commande
ssh -L 8989:localhost:8989 -L 8888:localhost:8888 user@serveur.example

# rebond : localhost -> host1 -> host2
ssh -L 9999:localhost:9999 host1 ssh -L 9999:localhost:1234 -N host2

Tunnel persistant

ssh -f root@passerelle -L 2080:localhost:22 -Nq
ssh -nq 127.0.0.1 -p2080 "lftp -e 'ls' -u utilisateur,motdepasse ftp://cible"

SSH à travers un proxy HTTP (corkscrew)

Quand seule une sortie HTTP (proxy d'entreprise, port 443) est disponible, corkscrew encapsule SSH dans la requête CONNECT du proxy :

yum install corkscrew
# ~/.ssh/config
Host MyProX
    HostName <ip_serveur_ssh>
    Port 443
    User <user>
    ProxyCommand /usr/bin/corkscrew <proxy> <port> %h %p /root/.ssh/auth
# ~/.ssh/auth  ->  user:pass
ssh MyProX

Voir aussi