
Un client SSH si connette a un server Secure Shell, che consente di eseguire i comandi del terminale come se si fosse seduti davanti a un altro computer. Ma un client SSH consente anche di “tunnelare” una porta tra il sistema locale e un server SSH remoto.
Esistono tre diversi tipi di tunneling SSH e sono tutti utilizzati per scopi diversi. Ciascuno prevede l'utilizzo di un server SSH per reindirizzare il traffico da una porta di rete a un'altra. Il traffico viene inviato tramite la connessione SSH crittografata, quindi non può essere monitorato o modificato in transito.
Puoi farlo con il ssh comando incluso su Linux, macOS e altri sistemi operativi simili a UNIX. Su Windows, che non include un comando ssh incorporato, consigliamo lo strumento gratuito PuTTY per connettersi ai server SSH. Supporta anche il tunneling SSH.
Port Forwarding locale: Rendi accessibili le risorse remote sul tuo sistema locale
“Port forwarding locale” ti consente di accedere alle risorse della rete locale che non sono esposte a Internet. Ad esempio, supponiamo che tu voglia accedere a un server di database nel tuo ufficio da casa tua. Per motivi di sicurezza, quel server di database è configurato solo per accettare connessioni dalla rete dell'ufficio locale. Ma se hai accesso a un server SSH in ufficio e quel server SSH consente connessioni dall'esterno della rete dell'ufficio, puoi collegarti a quel server SSH da casa e accedere al server di database come se fossi in ufficio. Questo è spesso il caso, poiché è più semplice proteggere un singolo server SSH dagli attacchi piuttosto che proteggere una varietà di risorse di rete diverse.
Per fare ciò, stabilisci una connessione SSH con il server SSH e dici al client di inoltrare il traffico da una porta specifica dal tuo PC locale, ad esempio la porta 1234, all'indirizzo del server del database e della sua porta sulla rete dell'ufficio. Pertanto, quando si tenta di accedere al server di database sulla porta 1234 del proprio PC corrente, “localhost”, tale traffico viene automaticamente “tunnelizzato” sulla connessione SSH e inviato al server di database. Il server SSH si trova nel mezzo, inoltrando il traffico avanti e indietro. È possibile utilizzare qualsiasi riga di comando o strumento grafico per accedere al server di database come se fosse in esecuzione sul PC locale.
Per utilizzare l'inoltro locale, connettersi normalmente al server SSH, ma fornire anche il -L discussione. La sintassi è:
ssh -L local_port:remote_address:remote_port username@server.com
Ad esempio, supponiamo che il server di database nel tuo ufficio si trovi in 192.168.1.111 sulla rete dell'ufficio. Puoi accedere al server SSH dell'ufficio all'indirizzo ssh.youroffice.com e il tuo account utente sul server SSH è bob . In tal caso, il tuo comando sarebbe simile al seguente:
ssh -L 8888:192.168.1.111:1234 bob@ssh.youroffice.com
Dopo aver eseguito quel comando, sarai in grado di accedere al server di database alla porta 8888 su localhost. Pertanto, se il server di database offriva l'accesso al Web, è possibile collegare http: // localhost: 8888 al browser Web per accedervi. Se avessi uno strumento da riga di comando che necessita dell'indirizzo di rete di un database, lo indirizzeresti a localhost: 8888. Tutto il traffico inviato alla porta 8888 sul PC verrà trasferito a 192.168.1.111:1234 sulla rete dell'ufficio.

È un po 'più confuso se si desidera connettersi a un'applicazione server in esecuzione sullo stesso sistema del server SSH stesso. Ad esempio, supponiamo che tu abbia un server SSH in esecuzione sulla porta 22 sul tuo computer dell'ufficio, ma hai anche un server di database in esecuzione sulla porta 1234 sullo stesso sistema allo stesso indirizzo. Vuoi accedere al server di database da casa, ma il sistema accetta solo connessioni SSH sulla porta 22 e il suo firewall non consente altre connessioni esterne.
In questo caso, è possibile eseguire un comando come il seguente:
ssh -L 8888:localhost:1234 bob@ssh.youroffice.com
Quando si tenta di accedere al server di database sulla porta 8888 sul PC corrente, il traffico verrà inviato tramite la connessione SSH. Quando arriva sul sistema che esegue il server SSH, il server SSH lo invierà alla porta 1234 su “localhost”, che è lo stesso PC che esegue il server SSH stesso. Quindi “localhost” nel comando sopra significa “localhost” dal punto di vista del server remoto.

Per fare ciò nell'applicazione PuTTY su Windows, selezionare Connessione> SSH> Tunnel. Seleziona l'opzione “Locale”. Per “Porta di origine”, immettere la porta locale. Per “Destinazione”, immettere l'indirizzo e la porta di destinazione nel formato indirizzo_indirizzo remoto: porta_porta remoto.
Ad esempio, se desideri impostare lo stesso tunnel SSH come sopra, dovresti entrare 8888 come porta di origine e localhost:1234 come destinazione. Fare clic su “Aggiungi” in seguito, quindi fare clic su “Apri” per aprire la connessione SSH. Dovrai anche inserire l'indirizzo e la porta del server SSH stesso nella schermata principale “Sessione” prima di collegarti, ovviamente.

Port Forwarding remoto: rendere accessibili le risorse locali su un sistema remoto
“Il port forwarding remoto” è l'opposto del forwarding locale e non viene utilizzato con la stessa frequenza. Ti consente di rendere disponibile una risorsa sul tuo PC locale sul server SSH. Ad esempio, supponiamo che tu stia eseguendo un server web sul PC locale di cui sei seduto di fronte. Ma il tuo PC è protetto da un firewall che non consente il traffico in entrata verso il software del server.
Supponendo che sia possibile accedere a un server SSH remoto, è possibile connettersi a quel server SSH e utilizzare il port forwarding remoto. Il client SSH indicherà al server di inoltrare una porta specifica, ad esempio la porta 1234, sul server SSH a un indirizzo e una porta specifici sul PC o sulla rete locale correnti. Quando qualcuno accede alla porta 1234 sul server SSH, quel traffico verrà automaticamente “tunnelizzato” sulla connessione SSH. Chiunque abbia accesso al server SSH sarà in grado di accedere al server Web in esecuzione sul PC. Questo è effettivamente un modo per scavare tunnel attraverso i firewall.
Per utilizzare l'inoltro remoto, utilizzare il ssh comando con il -R discussione. La sintassi è sostanzialmente la stessa dell'inoltro locale:
ssh -R remote_port:local_address:local_port username@server.com
Supponiamo che tu voglia rendere disponibile un'applicazione server in ascolto sulla porta 1234 sul tuo PC locale sulla porta 8888 sul server SSH remoto. L'indirizzo del server SSH è ssh.youroffice.com e il tuo nome utente sul server SSH è peso. Avresti eseguito il seguente comando:
ssh -R 8888:localhost:1234 bob@ssh.youroffice.com
Qualcuno potrebbe quindi connettersi al server SSH sulla porta 8888 e tale connessione verrebbe incanalata sull'applicazione server in esecuzione sulla porta 1234 sul PC locale da cui è stata stabilita la connessione.

Per fare ciò in PuTTY su Windows, selezionare Connessione> SSH> Tunnel. Seleziona l'opzione “Remoto”. Per “Porta di origine”, immettere la porta remota. Per “Destinazione”, immettere l'indirizzo e la porta di destinazione nel formato indirizzo_corrente: indirizzo_corrente.
Ad esempio, se si desidera impostare l'esempio sopra, si entra 8888 come porta di origine e localhost:1234 come destinazione. Fare clic su “Aggiungi” in seguito, quindi fare clic su “Apri” per aprire la connessione SSH. Dovrai anche inserire l'indirizzo e la porta del server SSH stesso nella schermata principale “Sessione” prima di collegarti, ovviamente.
Le persone potrebbero quindi connettersi alla porta 8888 sul server SSH e il loro traffico verrebbe trasferito alla porta 1234 sul sistema locale.

Per impostazione predefinita, il server SSH remoto ascolterà solo le connessioni dallo stesso host. In altre parole, solo le persone sullo stesso sistema del server SSH stesso potranno connettersi. Questo per motivi di sicurezza. È necessario abilitare l'opzione “GatewayPorts” in sshd_config sul server SSH remoto se si desidera ignorare questo comportamento.
Port forwarding dinamico: utilizzare il server SSH come proxy
RELAZIONATO: Qual è la differenza tra una VPN e un proxy?
Esiste anche il “port forwarding dinamico”, che funziona in modo simile a un proxy o VPN. Il client SSH creerà un proxy SOCKS che è possibile configurare le applicazioni da utilizzare. Tutto il traffico inviato tramite il proxy verrebbe inviato tramite il server SSH. È simile all'inoltro locale: prende il traffico locale inviato a una porta specifica sul PC e lo invia tramite la connessione SSH a una posizione remota.
RELAZIONATO: Perché l'utilizzo di una rete Wi-Fi pubblica può essere pericoloso, anche quando si accede a siti Web crittografati
Ad esempio, supponiamo che tu stia utilizzando una rete Wi-Fi pubblica. Vuoi navigare in sicurezza senza essere ficcato il naso. Se si ha accesso a un server SSH a casa, è possibile connettersi ad esso e utilizzare il port forwarding dinamico. Il client SSH creerà un proxy SOCKS sul tuo PC. Tutto il traffico inviato a quel proxy verrà inviato tramite la connessione al server SSH. Nessuno monitorando la rete Wi-Fi pubblica sarà in grado di monitorare la tua navigazione o censurare i siti web a cui puoi accedere. Dal punto di vista di tutti i siti Web visitati, sarà come se fossi seduto di fronte al PC a casa. Questo significa anche che potresti usare questo trucco per accedere a siti Web solo negli Stati Uniti mentre sei al di fuori degli Stati Uniti, supponendo che tu abbia accesso a un server SSH negli Stati Uniti, ovviamente.
Come altro esempio, potresti voler accedere a un'applicazione media server che hai sulla tua rete domestica. Per motivi di sicurezza, è possibile che solo un server SSH sia esposto a Internet. Non si consentono connessioni in entrata da Internet all'applicazione del server multimediale. È possibile impostare il port forwarding dinamico, configurare un browser Web per utilizzare il proxy SOCKS e quindi accedere ai server in esecuzione sulla rete domestica tramite il browser Web come se si fosse seduti davanti al sistema SSH a casa. Ad esempio, se il server multimediale si trova sulla porta 192.168.1.123 sulla rete domestica, è possibile collegare l'indirizzo 192.168.1.123 in qualsiasi applicazione utilizzando il proxy SOCKS e accederai al media server come se fossi sulla tua rete domestica.
Per utilizzare l'inoltro dinamico, eseguire il comando ssh con il -D argomento, in questo modo:
ssh -D local_port username@server.com
Ad esempio, supponiamo che tu abbia accesso a un server SSH all'indirizzo ssh.yourhome.com e il tuo nome utente sul server SSH è bob . Si desidera utilizzare l'inoltro dinamico per aprire un proxy SOCKS sulla porta 8888 sul PC corrente. Avresti eseguito il seguente comando:
ssh -D 8888 bob@ssh.yourhome.com
È quindi possibile configurare un browser Web o un'altra applicazione per utilizzare l'indirizzo IP locale (127.0.01) e la porta 8888. Tutto il traffico proveniente da tale applicazione verrebbe reindirizzato attraverso il tunnel.

Per fare ciò in PuTTY su Windows, selezionare Connessione> SSH> Tunnel. Seleziona l'opzione “Dinamica”. Per “Porta di origine”, immettere la porta locale.
Ad esempio, se si desidera creare un proxy SOCKS sulla porta 8888, si entra 8888 come porta di origine. Fare clic su “Aggiungi” in seguito, quindi fare clic su “Apri” per aprire la connessione SSH. Dovrai anche inserire l'indirizzo e la porta del server SSH stesso nella schermata principale “Sessione” prima di collegarti, ovviamente.
È quindi possibile configurare un'applicazione per accedere al proxy SOCKS sul PC locale (ovvero, l'indirizzo IP 127.0.0.1, che punta al PC locale) e specificare la porta corretta.

RELAZIONATO: Come configurare un server proxy in Firefox
Ad esempio, è possibile configurare Firefox per utilizzare il proxy SOCKS. Ciò è particolarmente utile perché Firefox può avere le proprie impostazioni proxy e non deve utilizzare le impostazioni proxy a livello di sistema. Firefox invierà il suo traffico attraverso il tunnel SSH, mentre altre applicazioni useranno normalmente la tua connessione Internet.
Quando si esegue questa operazione in Firefox, selezionare “Configurazione proxy manuale”, immettere “127.0.0.1” nella casella host SOCKS e immettere la porta dinamica nella casella “Porta”. Lasciare vuote le caselle Proxy HTTP, SSL Proxy e FTP Proxy.

Il tunnel rimarrà attivo e aperto fino a quando la connessione della sessione SSH sarà aperta. Quando finisci la sessione SSH e ti disconnetti da un server, anche il tunnel verrà chiuso. Basta riconnettersi con il comando appropriato (o le opzioni appropriate in PuTTY) per riaprire il tunnel.
