====== Tunnel SSH ======
===== Tunnel SSH con Local Port Forwarding =====
==== Comando di esempio ====
ssh -v -N -L 0.0.0.0:2080:10.10.15.5:2080 10.10.15.16
==== Scopo ====
Questo comando crea un **tunnel SSH locale** che permette di rendere disponibile, sul computer locale, un servizio presente su una macchina remota raggiungibile tramite il server SSH.
Il flusso della connessione è il seguente:
Client
│
│ localhost:2080 (o qualsiasi IP locale grazie a 0.0.0.0)
▼
Tunnel SSH
│
Server SSH (10.10.15.16)
│
▼
Host remoto (10.10.15.5:2080)
Qualsiasi connessione verso la porta ''2080'' del client viene trasportata nel tunnel SSH fino al server ''10.10.15.16'', che a sua volta si collega al servizio in ascolto su ''10.10.15.5:2080''.
==== Significato delle opzioni ====
* ''ssh'': avvia il client SSH;
* ''-v'': abilita la modalità ''verbose''. Il client mostra informazioni dettagliate sulla connessione, utili per il debug e la risoluzione dei problemi;
* ''-N'': non esegue alcun comando remoto. La sessione SSH viene utilizzata esclusivamente per mantenere attivo il tunnel;
* ''-L'': configura un ''Local Port Forwarding''.
La sintassi generale è:
-L [indirizzo_locale:]porta_locale:host_destinazione:porta_destinazione
Nel comando di esempio:
-L 0.0.0.0:2080:10.10.15.5:2080
i parametri significano:
* ''0.0.0.0'' → il socket locale viene aperto su tutte le interfacce di rete del computer locale;
* ''2080'' → porta locale sulla quale il client SSH resta in ascolto;
* ''10.10.15.5'' → host finale che il server SSH deve raggiungere;
* ''2080'' → porta del servizio sull'host remoto;
''10.10.15.16'' è il server SSH a cui il client si connette e attraverso il quale viene creato il tunnel.
==== Flusso della connessione ====
- il client apre una connessione SSH verso ''10.10.15.16'';
- il client apre la porta locale ''2080'';
- un'applicazione si connette a ''localhost:2080'' (oppure all'indirizzo IP del client, poiché è stato utilizzato ''0.0.0.0'');
- il traffico viene incapsulato nella connessione SSH;
- il server SSH (''10.10.15.16'') apre una connessione verso ''10.10.15.5:2080'';
- le risposte seguono il percorso inverso fino al client;
==== Nota su `0.0.0.0` ====
L'utilizzo di ''0.0.0.0'' rende la porta **accessibile da tutte le interfacce di rete del client** e non solo da ''localhost''.
Ad esempio, se il client ha indirizzo IP ''192.168.1.100'', sarà possibile collegarsi sia a:
localhost:2080
sia a:
192.168.1.100:2080
Questo comportamento può essere utile quando altri computer della rete devono utilizzare il tunnel, ma aumenta la superficie di esposizione del servizio. Se non è necessario condividere il tunnel con altri host, è generalmente preferibile utilizzare:
-L 127.0.0.1:2080:10.10.15.5:2080
In questo modo la porta sarà raggiungibile esclusivamente dal computer locale.