lunedì 27 maggio 2013

reverse ssh tunnelling

Aggiornamento del 05/07/2021 - tutorial per raspberry:

https://www.it-react.com/index.php/2020/01/06/how-to-setup-reverse-ssh-tunnel-on-linux

ATTENZIONE!: Il tutorial permette anche di automatizzare il reverse Tunnelling con un demone che controlla lo stato ed eventualmente riavvia il tunnelling ( e funziona)!

La questione è la seguente:
ho una macchina senza indirizzo pubblico (dietro ad un NAT e firewall intoccabile) con linux e vorrei ragiungerla da internet.
mi basta anche una shell ssh, ma come fare?
VNC chiede il forwarding delle porte sul router NAT ed è quindi non praticabile.
Esiste però una soluzione elegante e affidabile che ha solo bisogno di un server con IP pubblico:
il reverse SSH tunnelling!

si usa così (testato su debian):
dalla macchina a cui voglio connettermi (destinazione) devo:
installare openssh-server
lanciare il reverse SSH tunnelling verso il server con ip pubblico che diciamo ha l'indirizzo 10.10.10.1

scriverò:
[ettore@destinazione ~]$ ssh -R 19999:localhost:22 user@10.10.10.1

la porta 19999 è una qualsiasi porta sopra alla 1024 che sia libera
"localhost" è 127.0.0.1 e deve rimanere così
user è l'account con cui ci si collega al server

una volta stabilita la sessione (che non deve essere interrotta) basterà dal server digitare
user@server:~$ ssh ettore@localhost -p 19999
per aprire una sessione ssh sulla macchina "destinazione" senza conoscere il suo IP! MAGICO!

Ricapitolando, se voglio connettermi a "destinazione" da una qualsiasi macchina con connessione internet dovrò:
1. aver lanciato l'ssh reverse tunnelling su "destinazione" verso il server o chiamando qualcuno o facendolo fisicamente.

2 . collegarmi via ssh al server con ip pubblico ed aprire la sessione ssh
user@server:~$ ssh ettore@localhost -p 19999

per maggiori dettagli
http://www.howtoforge.com/reverse-ssh-tunneling
Attenzione!
Per gli utenti di Fedora e più in generale di SELINUX bisogna configurare SELINUX per permettere l'ssh tunnelling sulla macchina "destinazione"