Azioni

Differenze tra le versioni di "SSH tunnel"

Da MontelLUG WIKI.

(SSH tunneling: un'alternativa a VPN per mettere in sicurezza il nostro traffico in Internet)
 
m (→‎Tipi di collegamento: sistemazioni varie)
 
(Una versione intermedia di uno stesso utente non è mostrata)
Riga 22: Riga 22:
 
== Tipi di collegamento ==
 
== Tipi di collegamento ==
 
Sono possibili questi tipi di port forwarding via SSH:
 
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;
+
* '''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 remoto inoltra attraverso il nostro client in Internet il traffico desiderato;
+
* '''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.
+
* '''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 ===
 
=== Port Forwarding Locale ===
ssh -L 8080:www.montellug.it:80 nome@mio_pc.duckdns.org
+
<code>ssh -L 8080:www.montellug.it:80 nome@mio_pc.duckdns.org</code>
 
 
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.
 
 
 
 
 
 
 
 
 
  
 +
'''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:
  
 +
<code>ssh -C -g -L 5901:localhost:5900 nome@mio_pc.duckdns.org</code>
  
Port Forwarding Dynamico
+
'''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.
  
Modalità di SSH Tunneling molto utile: in questo modo trasformo il mio client SSH in un Proxy server SOCKS.  
+
=== Port Forwarding Remoto ===
 +
<code>ssh -R 5901:localhost:5900 nome@mio_pc.duckdns.org</code>
  
ssh -D 1080 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.
  
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).
+
=== Port Forwarding Dinamico ===
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.
+
Modalità di SSH Tunneling più adatta al nostro obiettivo: in questo modo trasformo il mio client SSH in un Proxy server SOCKS.  
  
 +
<code>ssh -D 1080 nome@mio_pc.duckdns.org</code>
  
 +
'''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 via rete programmi con interfaccia grafica
+
=== 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.
 
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.
  
 +
<code>
 
ssh -X nome@mio_pc.duckdns.org
 
ssh -X nome@mio_pc.duckdns.org
 +
 
firefox &
 
firefox &
 +
</code>
  
 
Il primo comando attiva il tunnel SSH con inoltro del server X11 (il server che gestisce l'interfaccia grafica).
 
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.
 
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:
 
Per lanciare un singolo programma è possibile usare anche questo comando:
  
ssh -fTX nome@mio_pc.duckdns.org firefox
+
<code>ssh -fTX nome@mio_pc.duckdns.org firefox</code>
 
 
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
 
  
 +
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) X2Go], XDMCP es. [https://github.com/FreeRDP/Remmina 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.
  
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.
 
  
 
--[[Utente:Odeeno|odeeno]] ([[Discussioni utente:Odeeno|discussioni]]) 17:43, 14 gen 2017 (CET)
 
--[[Utente:Odeeno|odeeno]] ([[Discussioni utente:Odeeno|discussioni]]) 17:43, 14 gen 2017 (CET)
<references />
 

Versione attuale delle 14:45, 5 giu 2017

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)