Come utilizzare il tunneling SSH per accedere ai server con restrizioni e navigare in sicurezza
Un client SSH si connette a un server Secure Shell, che consente di eseguire i comandi del terminale come se si fosse seduti di fronte 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 vengono utilizzati per scopi diversi. Ciascuno comporta 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 durante il trasporto.
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, si consiglia lo strumento gratuito PuTTY per connettersi ai server SSH. Supporta anche il tunneling SSH.
Port Forwarding locale: rende accessibili le risorse remote sul tuo sistema locale
"Port forwarding locale" consente di accedere a risorse di rete locali che non sono esposte a Internet. Ad esempio, supponiamo di voler accedere a un server di database nel tuo ufficio da casa tua. Per motivi di sicurezza, quel server database è configurato per accettare solo connessioni dalla rete dell'ufficio locale. Ma se si ha accesso a un server SSH in ufficio e il server SSH consente le connessioni dall'esterno della rete dell'ufficio, è possibile connettersi a quel server SSH da casa e accedere al server del database come se si fosse in ufficio. Questo è spesso il caso, in quanto è più semplice proteggere un singolo server SSH dagli attacchi piuttosto che proteggere una varietà di diverse risorse di rete.
A tale scopo, si stabilisce una connessione SSH con il server SSH e si comunica al client di inoltrare il traffico da una porta specifica dal PC locale, ad esempio la porta 1234, all'indirizzo del server del database e della relativa porta sulla rete dell'ufficio. Quindi, quando si tenta di accedere al server database sulla porta 1234, il proprio PC corrente, "localhost", quel traffico viene automaticamente "tunnelizzato" sulla connessione SSH e inviato al server del database. Il server SSH si trova nel mezzo, inoltra il traffico avanti e indietro. È possibile utilizzare qualsiasi riga di comando o strumento grafico per accedere al server del database come se fosse in esecuzione sul PC locale.
Per utilizzare l'inoltro locale, connettersi normalmente al server SSH, ma anche fornire -L
discussione. La sintassi è:
ssh -L local_port: remote_address: remote_port [email protected]
Ad esempio, supponiamo che il server del database del tuo ufficio si trovi a 192.168.1.111 sulla rete dell'ufficio. Hai accesso al server SSH dell'ufficio a ssh.youroffice.com
, e il tuo account utente sul server SSH è peso
. In tal caso, il tuo comando sarà simile a questo:
ssh -L 8888: 192.168.1.111: 1234 [email protected]
Dopo aver eseguito tale comando, si sarà in grado di accedere al server di database sulla porta 8888 su localhost. Pertanto, se il server di database offriva accesso Web, è possibile collegare http: // localhost: 8888 al browser Web per accedervi. Se avessi uno strumento da riga di comando che ha bisogno dell'indirizzo di rete di un database, lo indirizzerai a localhost: 8888. Tutto il traffico inviato alla porta 8888 sul PC verrà incanalato verso 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 di avere un server SSH in esecuzione sulla porta 22 del tuo computer dell'ufficio, ma hai anche un server database in esecuzione sulla porta 1234 sullo stesso sistema allo stesso indirizzo. Si desidera accedere al server del database da casa, ma il sistema accetta solo connessioni SSH sulla porta 22 e il firewall non consente altre connessioni esterne.
In questo caso, puoi eseguire un comando come il seguente:
ssh -L 8888: localhost: 1234 [email protected]
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 il "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 sorgente", inserire la porta locale. Per "Destinazione", inserire l'indirizzo di destinazione e la porta nel modulo remote_address: remote_port.
Ad esempio, se si desidera impostare lo stesso tunnel SSH come sopra, si dovrebbe entrare 8888
come la 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 connetterti, ovviamente.
Port forwarding remoto: rende accessibili le risorse locali su un sistema remoto
"Remote port forwarding" è l'opposto dell'inoltro locale e non viene utilizzato con frequenza. Permette di creare una risorsa sul PC locale disponibile sul server SSH. Ad esempio, supponiamo che tu stia utilizzando un server Web sul PC locale di fronte a te. Ma il tuo PC è protetto da un firewall che non consente il traffico in entrata al software del server.
Supponendo di poter accedere a un server SSH remoto, è possibile connettersi a quel server SSH e utilizzare il port forwarding remoto. Il client SSH comunicherà 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 corrente. Quando qualcuno accede alla porta 1234 sul server SSH, tale traffico verrà automaticamente "incanalato" 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 attraversare i firewall.
Per utilizzare l'inoltro remoto, utilizzare SSH
comando con il -R
discussione. La sintassi è in gran parte uguale a quella con l'inoltro locale:
ssh -R remote_port: local_address: local_port [email protected]
Supponiamo che tu desideri che un'applicazione server stia ascoltando la porta 1234 sul tuo PC locale disponibile sulla porta 8888 sul server SSH remoto. L'indirizzo del server SSH è ssh.youroffice.com
e il tuo nome utente sul server SSH è peso. Dovresti eseguire il seguente comando:
ssh -R 8888: localhost: 1234 [email protected]
Qualcuno potrebbe quindi connettersi al server SSH sulla porta 8888 e quella connessione verrebbe sottoposta a tunnel verso l'applicazione server in esecuzione sulla porta 1234 sul PC locale da cui è stata stabilita la connessione.
Per farlo in PuTTY su Windows, seleziona Connessione> SSH> Tunnel. Seleziona l'opzione "Remoto". Per "Porta sorgente", inserire la porta remota. Per "Destinazione", inserire l'indirizzo di destinazione e la porta nel modulo local_address: local_port.
Ad esempio, se volessi impostare l'esempio sopra, entrerai 8888
come la 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 connetterti, ovviamente.
Le persone potrebbero quindi connettersi alla porta 8888 sul server SSH e il loro traffico verrebbe portato al tunnel 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. Dovrai abilitare l'opzione "GatewayPorts" in sshd_config sul server SSH remoto se vuoi sovrascrivere questo comportamento.
Port forwarding dinamico: usa il tuo server SSH come proxy
C'è anche "dynamic port forwarding", che funziona in modo simile a un proxy o VPN. Il client SSH creerà un proxy SOCKS per configurare le applicazioni da utilizzare. Tutto il traffico inviato attraverso il proxy verrebbe inviato attraverso il server SSH. Questo è simile all'inoltro locale: prende il traffico locale inviato a una porta specifica sul PC e lo invia tramite la connessione SSH a una postazione remota.
Ad esempio, supponiamo che tu stia utilizzando una rete Wi-Fi pubblica. Volete navigare in sicurezza senza essere spiati. 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 qualsiasi sito web che visiti, sarà come se fossi seduto davanti al tuo PC a casa. Questo significa anche che potresti usare questo trucco per accedere ai siti web degli Stati Uniti al di fuori degli Stati Uniti, assumendo che tu abbia accesso a un server SSH negli Stati Uniti, naturalmente.
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 è consentita la connessione in ingresso da Internet all'applicazione del server multimediale. È possibile configurare 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 di fronte al proprio sistema SSH a casa. Ad esempio, se il server multimediale si trova sulla porta 192.168.1.123 della rete domestica, è possibile collegare l'indirizzo 192.168.1.123
in qualsiasi applicazione che utilizza il proxy SOCKS e si accede al server multimediale come se fossi sulla rete domestica.
Per utilizzare l'inoltro dinamico, eseguire il comando ssh con -D
argomento, in questo modo:
ssh -D local_port [email protected]
Ad esempio, supponiamo di avere accesso a un server SSH all'indirizzo ssh.yourhome.com
e il tuo nome utente sul server SSH è peso
. Si desidera utilizzare l'inoltro dinamico per aprire un proxy SOCKS sulla porta 8888 sul PC corrente. Dovresti eseguire il seguente comando:
ssh -D 8888 [email protected]
È 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 farlo in PuTTY su Windows, seleziona Connessione> SSH> Tunnel. Seleziona l'opzione "Dinamica". Per "Porta sorgente", inserire la porta locale.
Ad esempio, se si desidera creare un proxy SOCKS sulla porta 8888, immettere 8888
come la 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 connetterti, 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.
Ad esempio, puoi configurare Firefox per utilizzare il proxy SOCKS. Questo è 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", inserire "127.0.0.1" nella casella host SOCKS e inserire la porta dinamica nella casella "Porta". Lascia vuote le caselle Proxy HTTP, Proxy SSL e Proxy FTP.
Il tunnel rimarrà attivo e aperto fino a quando avrai aperto la connessione alla sessione SSH. Quando si termina la sessione SSH e si disconnette da un server, il tunnel verrà chiuso. Basta riconnettersi con il comando appropriato (o le opzioni appropriate in PuTTY) per riaprire il tunnel.