Utilizzare l'inoltro porta locale per inoltrare i dati in maniera protetta da un client dell'applicazione eseguito sullo stesso computer del client Secure Shell. Quando viene configurato l'inoltro porta locale, è possibile designare una porta locale arbitraria da utilizzare per l'inoltro dei dati e un host e una porta di destinazione per ricevere i dati.
Il funzionamento dell'inoltro porta locale è il seguente:
Quando viene stabilita la connessione Secure Shell, il client Secure Shell apre un socket Unione di un nome dell'host (indirizzo IP o nome DNS) e un numero di porta. Questa unione crea un identificatore univoco utilizzato da un'applicazione del client come punto terminale delle comunicazioni. di attesa sul computer locale (quello su cui viene eseguito il client Secure Shell) utilizzando la porta locale designata. Nella maggior parte dei casi, questo socket è disponibile soltanto per le applicazioni eseguite sull'host del client Secure Shell.
L'impostazione delle porte gateway determina se sono disponibili porte inoltrate localmente per le applicazioni remote. Per impostazione predefinita, questa impostazione non è attivata e il client utilizza l'indirizzo di loopback ("localhost" o 127.0.0.1) quando apre un socket per l'inoltro porta locale. Si evita in tal modo che le applicazioni eseguite su altri computer possano connettersi alla porta inoltrata. Quando si attivano porte gateway, il client di un'applicazione remota può aprire un socket utilizzando l'indirizzo Ethernet del client Secure Shell (ad esempio, un indirizzo IP, un URL o un nome DNS). Ad esempio, un client Secure Shell eseguito su acme.com può essere configurato per l'inoltro porta 8088. Se le porte gateway non sono attivate, il socket inoltrato è localhost:8088. Se le porte gateway sono attivate, il socket inoltrato è acme.com:8088.
ATTENZIONE:L'attivazione di porte gateway riduce la protezione dell'host del client, della rete e della connessione perché consente alle applicazioni remote di utilizzare la porta inoltrata sul sistema senza alcuna autenticazione.
Un client dell'applicazione viene configurato in modo da eseguire la connessione alla porta inoltrata, anziché direttamente all'host e alla porta del server dell'applicazione. Quando questo client stabilisce una connessione, tutti i dati vengono inviati al socket di attesa e vengono quindi reindirizzati al client Secure Shell.
Il client Secure Shell esegue la crittografia dei dati e li invia in maniera protetta tramite il canale Secure Shell al server Secure Shell.
Il server Secure Shell riceve i dati, ne esegue la decrittografia e li reindirizza all'host e alla porta di destinazione utilizzati dal server dell'applicazione.
NOTA:Se l'host e la porta di destinazione finali non sono sull'host del server Secure Shell, i dati vengono trasmessi non crittografati tra l'host Secure Shell e l'host del server dell'applicazione.
I dati restituiti dal server dell'applicazione vengono indirizzati al server Secure Shell, il quale ne esegue la crittografia e li invia in maniera protetta al client Secure Shell tramite il tunnel SSH. Il client Secure Shell esegue la decrittografia dei dati e li reindirizza al client dell'applicazione originale.
La sintassi generale dalla riga di comando per l'inoltro porta è:
ssh -L listening_port:app_host:hostport user@sshserver
Nei diagrammi seguenti vengono illustrati due metodi che utilizzano questa sintassi.
Nella configurazione sopra illustrata, il client dell'applicazione e il client Secure Shell vengono eseguiti entrambi su HostA. Il server Secure Shell e il server dell'applicazione vengono eseguiti entrambi su HostB. Tutti i dati inviati alla porta 2222 di HostA vengono inoltrati alla porta 222 di HostB. In questa configurazione, tutti i dati in transito vengono crittografati in maniera protetta. Questo comando (in cui localhost indica l'indirizzo di loopback di HostB) configura quanto segue:
ssh -L 2222:localhost:222 user@HostB
Nel diagramma seguente viene illustrato l'inoltro porta locale su un terzo host. In questa configurazione, il server dell'applicazione viene eseguito su un host diverso dal server Secure Shell. Tutti i dati inviati alla porta 2222 di HostA vengono inoltrati alla porta 222 di HostC.
Questo comando configura quanto segue:
ssh -L 2222:HostC:222 user@HostB
NOTA:I dati trasmessi tra HostB e HostC non sono crittografati.