SSH tunnel
Da MontelLUG WIKI.
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 dirette ad una porta del computer locale (il client tramite cui avviamo il tunnel SSH) sono inviate al server SSH remoto attraverso il tunnel e poi alla destinazione finale;
- Remoto: è il caso contrario al primo; il server SSH remoto inoltra attraverso il tunnel al client (da cui si avvia il collegamento SSH) il traffico indirizzato ad una porta specifica;
- 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 dialogare in locale per collegarsi al sito; 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.
Altro esempio:
ssh -C -g -L 5901:localhost:5900 nome@mio_pc.duckdns.org
In questo esempio: posso collegarmi in modo sicuro a mio_pc remoto (dove è avviato un server VNC in ascolto sulla porta 5900) con un client VNC locale (che punta a localhost:5901) per lavorare da remoto o far condividere lo schermo remoto per i più vari motivi.
Port Forwarding Remoto
ssh -R 5901:localhost:5900 nome@mio_pc.duckdns.org
In questo esempio: posso avviare un server VNC sul computer locale per far collegare in modo sicuro con client VNC di un qualsiasi computer in rete (il client VNC remoto deve puntare a localhost:5901). 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 Dinamico
Modalità di SSH Tunneling più adatta al nostro obiettivo: 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 vostro PC come proxy del traffico sul vostro tunnel SSH.
Usare un Tunnel SSH per aprire da remoto 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. X2Go, XDMCP es. Remmina, SPICE.
Opzioni aggiuntive
Prima delle opzioni viste -D -L o -R si possono aggiungere:
- l'opzione -C per comprimere il traffico che vi passa: vantaggioso qualora si tratti di visitare pagine di testo; svantaggioso se si devono scaricare file;
- l'opzione -f per mandare SSH immediatamente in background non appena attivata la connessione: utile perché non dovrai tenere la finestra del terminal aperta e rischiare di mandare per errore comandi al server SSH;
- l'opzione -N per dire a SSH di non accettare alcun comando;
- l'opzione -p [porta] per usare una porta di collegamento a SSH diversa dalla 22.
--odeeno (discussioni) 17:43, 14 gen 2017 (CET)