====== 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.