… un tunnel SSH! XD
OK, spiegazione!
Scenario:
- una rete informatica dietro firewall e/o proxy, che impedisce le connessioni verso determinate porte all’esterno (ma che lascia libera almeno una porta, altrimenti non c’è soluzione);
- un’applicazione che dovrebbe connettersi ad un server esterno, ma che viene bloccata da queste limitazioni;
- una persona che ha veramente bisogno di utilizzare questa applicazione!!
Il programma in questione potrebbe essere un browser web, nel caso in cui non si volesse essere osservati dal proxy aziendale mentre si naviga, oppure un programma di posta elettronica, come Outlook o KMail, oppure un programma di chat, come Messenger o IRC, oppure un gioco online come World of Warcraft, Dark Age of Camelot o altri.
La soluzione a tutti i problemi di questo tipo si chiama TUNNEL SSH: per metterlo a punto serve un computer esterno al quale collegarsi, che abbia un server SSH in esecuzione (tutte le distribuzioni Linux lo hanno nella dotazione di default).
Praticamente succede qualcosa di simile a questa immagine:
Come realizzare questa configurazione? E’ facilissimo!
Ovviamente suppongo che su my.workplace.com abbiate a disposizione una macchina con una distribuzione GNU/Linux, nel mio caso Ubuntu (con Windows si potrebbe pure fare, ma… non mi interessa :)).
Dando per scontato che il server SSH su my.home.it funzioni correttamente, operiamo sulla macchina my.workplace.com.
Cominciamo aprendo un terminale (konsole, xterm o equivalenti).
Prima di tutto dovete sapere verso quale server volete connettervi e la porta (in questo caso other.server.com_, porta 25 perchè ipotizziamo che sia un server di posta in uscita).
Per conoscere l’IP e la porta giusta potete avviare il programma bloccato (che comunque al momento non potrà connettersi) e lanciare il comando netstat, in questo modo:
$ sudo netstat -vatnp
SENT 9334/kmail
….
tcp 0 1 172.28.200.105:36687 89.238.64.166:25 SYN
….
e cercare la riga corrispondente al programma (guardando l’ultima colonna). Nella quinta colonna c’è quello che cercate, cioè l’indirizzo IP e la porta al quale state tentando di connettervi (IP 89.238.64.166, porta 25).
Poi…
$ sudo iptables -t nat -A OUTPUT -d 89.238.64.166 -j DNAT --to 127.0.0.1 [sudo] password for user: ******* $ sudo ssh -L 25:89.238.64.166:25 username@my.home.it username@my.home.it's password: *********
NB: nella mia macchina ho Ubuntu, quindi ho dovuto utilizzare sudo per eseguire quei comandi con i permessi di amministratore. Nelle altre distribuzioni dovrete semplicemente eseguire i suddetti comandi come utente root.
Il primo comando dice al sistema operativo di effettuare una deviazione di tutti i pacchetti diretti al server esterno, rinviandoli invece alla macchina locale (127.0.0.1) che, non passando dal firewall, risulterà raggiungibile sulla porta 25.
Il secondo comando avvia finalmente il tunnel SSH, aprendo la porta 25 in ascolto su localhost, collegata tramite il tunnel (quindi, tramite il computer my.home.it) alla porta 25 del server esterno other.server.com :)
NB: nel caso in cui la porta 22 (quella di SSH) risultasse anch’essa bloccata, sarà necessario modificare la configurazione del server SSH su my.home.it, mettendolo in ascolto su una porta che è possibile raggiungere da my.workplace.com.
Adesso potete lanciare il programma che precedentemente risultava bloccato e… magia! :)
Sicuramente la velocità non sarà quella di una linea ADSL, perchè sarà comunque limitata dalla banda in upload disponibile su my.home.it.
Inoltre questa tecnica non può funzionare con i programmi peer to peer, come Bittorrent o eMule, perchè sebbene si colleghino ad un server unico per ottenere le informazioni sui file da scaricare (nel caso dei torrent il server si chiama tracker), il resto della comunicazione avviene da e verso una miriade di altri computer (i peer), di cui è impossibile prevedere l’indirizzo IP.












