Azioni

SSH tunnel

Da MontelLUG WIKI.

Versione del 5 giu 2017 alle 14:45 di Odeeno (discussione | contributi) (→‎Tipi di collegamento: sistemazioni varie)
(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 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)