SSH remote forwarding

openssh

Questo articolo aggiunge al precedente alcune funzioni di SSH meno pubblicizzate, ma molto comode.
In particolare analizza come sia possibile effettuare delle connessioni SSH anche quando il firewall ed il router non permettano una connessione in ingresso.

In questa nuova pagina vedremo come utilizzare SSH per collegarci ad una sede separata senza mettere mano alle configurazioni di router e firewall.

In questa sezione abbiamo visto come ci possiamo collegare quando abbiamo la possibilità di raggiungere pubblicamente il servizio SSH.

Adesso vedremo come sia possibile fare la stessa cosa senza modificare niente su firewall e router.

ssh

Prerequisiti.

il serverSSH deve aver attivato il parametro “GatewayPorts clientspecified”

Supponiamo di avere un pc nella “sede_1.dominio.com” al quale ci vogliamo collegare dal computer della “sede_2.dyndns.com” tuttavia non possiamo utilizzare un collegamento diretto perchè non possiamo creare la regola necessaria nel firewall presente.

Il nostro obbiettivo sarà quello di collegarci ai pc della “sede_1” senza modificare il firewall.

Caso reale:
Nella “sede_2” abbiamo un IP assegnato dinamicamente. Assicuriamoci di avere un serverSSH installato ed accessibile da internet. Se disponiamo di un router con NAT inoltriamo la porta usata per l’ssh (standard 22) verso il pc interessato.
Configuriamo un account DynDNS o simile, in modo da poterci collegare al “PC della sede_2” indipendentemente dalle variazioni di indirizzi IP.
Ora l’obiettivo sarà quello di connettersi al server ssh sul nostro PC “sede_1” la porta in questione sarà quella standard 22. Se il server della “sede_2” utilizza una porta SSH diversa dalla standard dovremmo inserire l’opzione -P nel comando nell’esempio la porta “2222”.

ssh -R 2210:localhost:22 user@sede_2.dyndns.com

ssh -p2222 -R 2210:localhost:22 user@sede_2.dyndns.com

Adesso dal computer della “sede_2” basterà eseguire sul computer “pc_sede_2” questo comando.

ssh -p 2210 user@localhost

ssh_tunnel_reverse

L’opzione -R del comando SSH ci ha permesso di creare un tunnel “2210” all’interno del collegamento ssh sulla 22 funzionante anche per la direzione inversa, quindi dalla “sede_2” alla “sede_1”.

Il limite di questa soluzione stà nella “sede_2” ,se questa non è disponibile il tunnel non si attiva.

E’ possibile ovviare inserendo un terzo server SSH indicato con “sede_3.outside_1_2.com” in questo modo la “sede_1” può stabilire la connessione con la “sede_3” e il portatile della “sede_2” si può collegare alle “sede_3” in qualsiasi momento stabilendo un collegamento con la “sede_1”.

sede1_call_sede3

Inserendo un terzo server SSH, nell’esempio sopra ,chiamato “sede_3.outside_1_2.com, possiamo ovviare al limite riscontrato nel primo punto. Questo terzo punto può essere inserito anche nella DMZ della “sede_1” oppure come punto sempre attivo della “sede_2”.

Dalla “sede_1” lanciamo la connessione alla “sede_3”

ssh -R 2210:localhost:22 sede_3.outside_1_2.com
es.con porta SSH diversa es 2222
ssh -p2222 -R 2210:localhost:2222 user@sede_3.outside_1_2.com

netstat_bridge_server

dal server ponte della sede_3.outside_1_2.com possiamo nuovamente collegarci al pc della sede_1.dominio.com con il comando
ssh -p 2210 localhost

Adesso se vogliamo collegarci dal pc della “sede_2.dynds.org” al pc della “sede_1.dominio.com” possiamo lanciare questo comando
ssh -p 2210 user@sede_3.outside_1_2.com

Dopo aver lanciato il comando sul server SSH della “sede_2” vediamo che è presente un servizio in ascolto sulla porta “2210”

ssh_tunnel_bridge_demo

Il reverse tunnel (-R) usa la forma: <indirizzo tunnel>:<porta tunnel>:<indirizzo destinazione>:<porta destinazione>.

<indirizzo tunnel> può essere un qualsiasi indirizzo sulla macchina all’inizio del tunnel, localhost, * (oppure lasciato in bianco), che rispettivamente, permettono connessioni tramite uno specifico indirizzo, tramite l’interfaccia di loopback, oppure tramite qualunque interfaccia.

Come default, il forwarding è limitato alle connessioni provenienti dalla macchina all’inizio del tunnel, quindi <tunnel address> è impostato su localhost. Il forwarding locale non richiede configurazioni addizionali, mentre il forwarding remoto è condizionato dalle configurazioni del demone SSH sulla macchina remota. Per maggiori informazioni consultare le informazioni riguardo all’opzione GatewayPorts nella pagina di manuale sshd_config(5).

Dalla “sede_1” lanciamo la connessione alla “sede_3” usando il comando:

ssh -p2222 -R sede_2.dyndns.org:2210:localhost:2222 user@sede_1.dominio.com

route_any_ssh_tunnel

in questo modo tutte le sessioni SSH lanciate passeranno per il tunnel creato, adesso dal pc della “sede_2” possiamo collegarci al pc della “sede_1” senza aver messo mano al router e firewall della “sede_1”