SSH tunnelling
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
- Stunnel — encapsulation SSL/TLS (SSH sur 443)
- HTTP tunneling — encapsulation dans du HTTP
- Proxychains — chaîner le SOCKS de SSH avec d'autres proxies
- SSH notions — principes de SSH