Introduzione
SSH Port Forwarding è un meccanismo che utilizza SSH per il tunneling delle porte tcp da client a server o viceversa. Può essere utilizzato per aggiungere la crittografia alle applicazioni legacy o passare attraverso i firewall.
Local Forwarding
E' utilizzato per inoltrare una connessione indirizzata a una porta del client verso una porta di un server, eventualmente differente dal server ssh utilizzato.
In SSH, il local port forwarding viene impostato con l'opzione -L
:
ssh -L 80:intra.example.com:80 gw.example.com
Questo esempio crea un tunnel ssh al server gw.example.com (jump server) e inoltra le connessioni indirizzate alla porta 80 sul computer locale alla porta 80 del server intra.example.com attraverso il tunnel.
Per impostazione predefinita, vengono inoltrate le connessioni indirizzate alla porta 80 di qualsiasi ip del client, quindi altri client potrebbero utilizzare il tunnel. Tuttavia, questo può essere limitato ai fornendo un indirizzo di bind:
ssh -L 127.0.0.1:80:intra.example.com:80 gw.example.com
L'opzione LocalForward
nel file di configurazione del client ssh /etc/ssh/ssh_config
può essere utilizzata per configurare il bind senza doverlo specificare nel comando
LocalForward
Specifies that a TCP port on the local machine be forwarded over the secure channel to the specified host and port from the remote machine.
The first argument must be [bind_address:]port and the second argument must be host:port.
Esempio
ssh -f user@personal-server.com -L 2000:personal-server.com:25 -N
Il flag -f
imposta ssh in background prima che venga eseguito il comando.
Il flag -L 2000:personal-server.com:25
imposta un Local Forwarding nella forma -L local-port:host:remote-port
.
Il flag -N
imposta ssh in modo che non venga eseguito alcun comando sul server remoto.