androide

Come impostare il tunneling ssh (port forwarding)

Configure Port Forwarding to Remotely Access Your Synology NAS | Synology

Configure Port Forwarding to Remotely Access Your Synology NAS | Synology

Sommario:

Anonim

Il tunneling SSH o il port forwarding SSH è un metodo per creare una connessione SSH crittografata tra un client e una macchina server attraverso la quale è possibile inoltrare le porte dei servizi.

L'inoltro SSH è utile per trasportare dati di rete di servizi che utilizzano un protocollo non crittografato, come VNC o FTP, accedere a contenuti con restrizioni geografiche o bypassare i firewall intermedi. Fondamentalmente, è possibile inoltrare qualsiasi porta TCP e tunnelizzare il traffico su una connessione SSH sicura.

Esistono tre tipi di port forwarding SSH:

  • Port Forwarding locale. - Inoltra una connessione dall'host client all'host del server SSH e quindi alla porta host di destinazione. Port Forwarding remoto. - Inoltra una porta dall'host del server all'host del client e quindi alla porta dell'host di destinazione. Port Forwarding dinamico. - Crea un server proxy SOCKS che consente la comunicazione attraverso una gamma di porte.

, parleremo di come impostare tunnel SSH crittografati locali, remoti e dinamici.

Port Forwarding locale

Il port forwarding locale consente di inoltrare una porta sul computer locale (client ssh) a una porta sul computer remoto (server ssh), che viene quindi inoltrata a una porta sul computer di destinazione.

In questo tipo di inoltro, il client SSH è in ascolto su una determinata porta e esegue il tunneling di qualsiasi connessione a quella porta sulla porta specificata sul server SSH remoto, che quindi si connette a una porta sulla macchina di destinazione. La macchina di destinazione può essere il server SSH remoto o qualsiasi altra macchina.

Il port forwarding locale viene utilizzato principalmente per connettersi a un servizio remoto su una rete interna come un database o un server VNC.

In Linux, macOS e altri sistemi Unix per creare un port forwarding locale passano l'opzione -L al client ssh :

ssh -L LOCAL_PORT:DESTINATION:DESTINATION_PORT SSH_SERVER

Le opzioni utilizzate sono le seguenti:

  • LOCAL_PORT - L'IP della macchina locale e il numero di porta. Quando LOCAL_IP viene omesso, il client ssh si LOCAL_IP a localhost. DESTINATION:DESTINATION_PORT - L'IP o il nome host e la porta della macchina di destinazione. SERVER_IP - L'indirizzo IP dell'utente e del server SSH remoto.

Puoi utilizzare qualsiasi numero di porta maggiore di 1024 come LOCAL_PORT . I numeri di porte inferiori a 1024 sono porte privilegiate e possono essere utilizzate solo da root. Se il server SSH è in ascolto su una porta diversa da 22 (impostazione predefinita), utilizzare l'opzione -p .

Il nome host di destinazione deve essere risolvibile dal server SSH.

Supponiamo che tu abbia un server di database MySQL in esecuzione sulla macchina db001.host su una rete interna (privata), sulla porta 3306 che è accessibile dalla macchina pub001.host e desideri connetterti usando il client mysql macchina locale al server di database. Per fare ciò puoi inoltrare la connessione in questo modo:

ssh -L 3336:db001.host:3306 [email protected]

Una volta eseguito il comando, ti verrà chiesto di inserire la password dell'utente SSH remoto. Dopo averlo inserito, si accederà al server remoto e verrà stabilito il tunnel SSH. È consigliabile impostare un'autenticazione basata su chiave SSH e connettersi al server senza immettere una password.

Ora se si punta il client del database del computer locale su 127.0.0.1:3336 , la connessione verrà inoltrata al server db001.host:3306 MySQL attraverso il computer pub001.host che fungerà da server intermedio.

È possibile inoltrare più porte a più destinazioni in un unico comando ssh. Ad esempio, hai un altro server database MySQL in esecuzione sulla macchina db002.host e vuoi connetterti ad entrambi i server dal tuo client locale che avresti eseguito:

ssh -L 3336:db001.host:3306 3337:db002.host:3306 [email protected]

Per connettersi al secondo server è necessario utilizzare 127.0.0.1:3337 .

Quando l'host di destinazione è uguale al server SSH invece di specificare l'IP o il nome host dell'host di destinazione, è possibile utilizzare localhost .

Supponi di dover connetterti a una macchina remota tramite VNC che gira sullo stesso server e non è accessibile dall'esterno. Il comando che useresti è:

ssh -L 5901:127.0.0.1:5901 -N -f [email protected]

L'opzione -f dice al comando ssh di essere eseguito in background e -N non eseguire un comando remoto. Stiamo usando localhost perché il VNC e il server SSH sono in esecuzione sullo stesso host.

Port Forwarding remoto

Il port forwarding remoto è l'opposto del port forwarding locale. Consente di inoltrare una porta sul computer remoto (server ssh) a una porta sul computer locale (client ssh), che viene quindi inoltrata a una porta sul computer di destinazione.

In questo tipo di inoltro il server SSH è in ascolto su una determinata porta e esegue il tunneling di qualsiasi connessione a quella porta sulla porta specificata sul client SSH locale, che quindi si connette a una porta sul computer di destinazione. La macchina di destinazione può essere la macchina locale o qualsiasi altra macchina.

In Linux, macOS e altri sistemi Unix per creare un port forwarding remoto passano l'opzione -R al client ssh :

ssh -R REMOTE_PORT:DESTINATION:DESTINATION_PORT SSH_SERVER

Le opzioni utilizzate sono le seguenti:

  • REMOTE_PORT - L'IP e il numero di porta sul server SSH remoto. Un REMOTE vuoto significa che il server SSH remoto si collegherà a tutte le interfacce. DESTINATION:DESTINATION_PORT - L'IP o il nome host e la porta della macchina di destinazione. SERVER_IP - L'indirizzo IP dell'utente e del server SSH remoto.

Il port forwarding locale è usato principalmente per dare accesso a un servizio interno a qualcuno dall'esterno.

Supponiamo che tu stia sviluppando un'applicazione Web sul tuo computer locale e desideri mostrare un'anteprima ai tuoi colleghi sviluppatori. Non hai un IP pubblico, quindi l'altro sviluppatore non può accedere all'applicazione via Internet.

ssh -L 8080:127.0.0.1:3000 -N -f [email protected]

Il comando sopra renderà il server ssh in ascolto sulla porta 8080 e tunnel tutto il traffico da questa porta al tuo computer locale sulla porta 3000 .

Ora il tuo collega sviluppatore può digitare the_ssh_server_ip:8080 nel suo browser e visualizzare l'anteprima della tua fantastica applicazione.

Port Forwarding dinamico

Il port forwarding dinamico consente di creare un socket sul computer locale (client ssh) che funge da server proxy SOCKS. Quando un client si connette a questa porta, la connessione viene inoltrata alla macchina remota (server ssh), che viene quindi inoltrata a una porta dinamica sulla macchina di destinazione.

In questo modo, tutte le applicazioni che utilizzano il proxy SOCKS si collegheranno al server SSH e il server inoltrerà tutto il traffico alla sua destinazione effettiva.

In Linux, macOS e altri sistemi Unix per creare un port forwarding dinamico (SOCKS) passano l'opzione -D al client ssh :

ssh -D LOCAL_PORT SSH_SERVER

Le opzioni utilizzate sono le seguenti:

  • LOCAL_PORT - L'IP della macchina locale e il numero di porta. Quando LOCAL_IP viene omesso, il client ssh si LOCAL_IP a localhost. SERVER_IP - L'indirizzo IP dell'utente e del server SSH remoto.

Un tipico esempio di port forwarding dinamico è il tunneling del traffico del browser Web attraverso un server SSH.

Il comando seguente creerà un tunnel SOCKS sulla porta 9090 :

ssh -D 9090 -N -f [email protected]

Una volta stabilito il tunneling, è possibile configurare l'applicazione per utilizzarla. Questo articolo spiega come configurare Firefox e Google Chrome per l'utilizzo del proxy SOCKS.

Il port forwarding deve essere configurato separatamente per ogni applicazione che si desidera tunnelare il traffico pensato.

Configurare il tunneling SSH in Windows

Gli utenti Windows possono creare tunnel SSH usando il client PuTTY SSH. Puoi scaricare PuTTY qui.

  1. Avviare Putty e inserire l'indirizzo IP del server SSH nel campo Host name (or IP address) .

    Verrà visualizzata una nuova finestra che richiede nome utente e password. Dopo aver inserito il nome utente e la password, si accederà al server e verrà avviato il tunnel SSH.

    L'impostazione dell'autenticazione con chiave pubblica ti permetterà di connetterti al tuo server senza inserire una password.

Conclusione

Ti abbiamo mostrato come impostare tunnel SSH e inoltrare il traffico attraverso una connessione SSH sicura. Per facilità d'uso, è possibile definire il tunnel SSH nel file di configurazione SSH o creare un alias Bash che imposterà il tunnel SSH.

sicurezza ssh