SSH tunnel

Da MontelLUG.
Versione del 14 gen 2017 alle 17:44 di Odeeno (Discussione | contributi) (SSH tunneling: un'alternativa a VPN per mettere in sicurezza il nostro traffico in Internet)

(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)

SSH tunneling: un'alternativa a VPN per mettere in sicurezza il nostro traffico in Internet

Ipotesi

Supponiamo di doversi connettere ad internet da un hot spot pubblico non sicuro. Una delle possibilità per evitare che il nostro traffico in Internet sia controllato o monitorato è quella di accedere ad una VPN.

In questo manuale vediamo come sfruttare un'altra possibilità altrettanto sicura e potenzialmente gratis: il Port forwarding via SSH ovvero inoltro delle porte via SSH ovvero SSH tunneling. Scrivo manuale perché verranno riportati poco più che i comandi necessari ad effettuare il collegamento, come una specie di pro-memoria: in rete sono numerosissime le guide sul tema e non c'è motivo di farne un'altra.

Obiettivi

Creare una connessione sicura via SSH ovvero un tunnel criptato tra il proprio pc ed un computer remoto (o il proprio router di casa avente OpenWRT o DD-WRT) e far passare attraverso questo tunnel tutto il traffico che vogliamo tenere al sicuro dagli occhi e dal naso indiscreto dell'hot spot pubblico (www, posta, VNC, IRC, ...).

Oppure superare un firewall che impedisce il traffico in uscita (o anche in entrata) a determinati protocolli o verso determinate porte.

Oppure creare creare una sorta di VPN su un tunnel SSH tra il proprio PC in Internet ed il nostro router per accedere da remoto in modo sicuro ai nostri file, al nostro router, alla nostra rete.

Requisiti

Supponiamo di avere già funzionanti:

  • il nostro router ADSL di casa, con una porta aperta ad internet (es. pota 22);
  • un collegamento ad un Dynamic DNS qualora il nostro operatore ci fornisca solo un IP dinamico (esempio: mio_pc.duckdns.org);
  • un server SSH già impostato in ascolto su un pc interno alla nostra rete a cui il router indirizza il traffico che arriva alla porta aperta ad internet (oppure direttamente il nostro router OpenWRT con SSH attivo e in ascolto sulla wan);
  • conoscere la porta cui ci serve fare traffico (il web, la posta, un server VNC, ...); vedi Lista delle porte standard.

Attenzione a verificare che il server SSH sia impostato in modo che accetti il port forwarding (di default lo è); è anche consigliabile evitare la digitazione l'uso di password utente per collegarsi al server SSH mediante l'uso di chiavi criptografiche.

Tipi di collegamento

Sono possibili questi tipi di port forwarding via SSH:

  • locale: è uno dei casi che intendiamo implementare; le connessioni dal computer locale (il client) sono inviate prima al server SSH attraverso il tunnel e poi al server finale;
  • remoto: è il caso contrario al primo; il server remoto inoltra attraverso il nostro client in Internet il traffico desiderato;
  • dinamico: questa modalità è forse quella che ci interessa di più; consente di trasmettere tutto il traffico TCP attraverso il tunnel SSH. In parole semplici impostiamo una sorta di Proxy SOCKS sul nostro PC.

Port Forwarding Locale

ssh -L 8080:www.montellug.it:80 nome@mio_pc.duckdns.org

In questo esempio: http://www.montellug.it è il sito a cui vogliamo collegarci in modo sicuro; 8080 è la porta con cui si esce con il nostro client; 80 è la porta del server www.montellug.it (la porta di http); mio_pc.duckdns.org è il nostro router. Si apra il seguente indirizzo sul proprio browser http://localhost:8080/ e si aprirà il sito del LUG. Come si potrà intuire nel tunnel ci passa solo il traffico indirizzato al sito www.montellug.it e solo quello richiesto sulla porta 80. L'opzione -L e seguenti può esser ripetuta per più indirizzi e porte locali diverse.


Port Forwarding Remoto

ssh -R 5900:localhost:5900 nome@mio_pc.duckdns.org

In questo esempio: posso accedere via VNC dal computer di casa al mio portatile connesso all'hot spot pubblico (il client VNC di casa deve puntare a localhost:5900). Con le opportune modifiche potrei ad esempio far accedere al mio pc via VNC in modalità sicura un amico (che mi fornisca il suo ip ed un user di ssh) per lavorarci insieme o condividere lo schermo per i più vari motivi.






Port Forwarding Dynamico

Modalità di SSH Tunneling molto utile: in questo modo trasformo il mio client SSH in un Proxy server SOCKS.

ssh -D 1080 nome@mio_pc.duckdns.org

In questo esempio: impostando preventivamente il proprio browser all'uso del PROXY SOCKS su localhost, tutte le pagine visitate (ovvero tutto il traffico su TCP e tutte le porte) con il nostro PC connesso all'hot spot pubblico passeranno nel tunnel SSH. Per Firefox si può usare l'estensione FoxyProxy per cambiare agevolmente le impostazioni Proxy: altrimenti bisogna modificare di volta in volta a mano le impostazioni di connessione del browser o del pc (per l'esempio: imposta "127.0.0.1" nel "SOCKS Host" e "1080" nel campo porta; consigliabile impostare anche Firefox affinchè interroghi anche i DNS remoti). Attenzione a come avete impostato il firewall del vostro portatile perchè potenzialmente anche gli altri PC presenti sulla tua rete remota potrebbero usare il tuo PC come proxy del traffico sul tuo tunnel SSH.



Usare un Tunnel SSH per aprire via rete programmi con interfaccia grafica Se il server SSH è un vostro PC con interfaccia grafica (e non semplicemente il router) potreste aver voglia di connettervi per lavorare da remoto al vostro PC.

ssh -X nome@mio_pc.duckdns.org firefox &

Il primo comando attiva il tunnel SSH con inoltro del server X11 (il server che gestisce l'interfaccia grafica). Il secondo va lanciato dalla linea di comando ed apre (in background) il programma firefox presente sul server remoto. La velocità dipende dalla velocità di collegamento, ma sarà in ogni caso inferiore dell'utilizzo del programma in locale. Per lanciare un singolo programma è possibile usare anche questo comando:

ssh -fTX nome@mio_pc.duckdns.org firefox

Per accedere all'interfaccia grafica completa del server remoto, oltre a VNC (che trasmette la mera "immagine" del desktop remoto e che necessita comunque che vi sia un server in ascolto) è possibile utilizzare programmi tipo Xephyr https://www.freedesktop.org/wiki/Software/Xephyr/ che avviano una vera e propria sessione X11 o programmi che sfruttano protocolli diversi tipo, NX (ex. http://wiki.x2go.org/doku.php), XDMCP (es. Remmina), SPICE


Opzioni aggiuntive

Si può aggiungere l'opzione -C prima di -D -L o -R per comprimere il traffico che vi passa: vantaggioso qualora si tratti di visitare pagine di testo; svantaggioso se si devono scaricare file. Si può aggiungere l'opzione -f per mandare SSH immediatamente in background non appena attivata la connessione: utile perchè non dovrai tenere la finestra del terminal aperta oppure mandare per errore comandi al server SSH. Si può aggiungere l'opzione -N per impostare SSH a non ricevere alcun comando. Si può aggiungere -p [porta] per usare una porta di collegamento a SSH diversa dalla 22.

--odeeno (discussioni) 17:43, 14 gen 2017 (CET) <references />