Creare un tunnel ssh su Linux o OSX (port forwarding)

I tunnel SSH (o meglio SSH Port Forwarding) sono un modo sicuro (la connessione non viaggia in chiaro) per l’accesso ad un host (un server, un pc), che non è possibile raggiungere normalmente. Ad esempio un caso potrebbe essere quello in cui ci sono degli host non connessi direttamente ad internet, ma tramite  un firewall. Per poter usare questo strumento, e’ necessario che almeno uno degli host (o meglio il firewall) sia raggiungibile da internet ed abbia un server ssh installato. Ci sono due tipologie di tunnel SSH: Local Port Forwarding e Remote Port Forwarding.

Local Port Forwarding

Questo permette di accedere alle porte (i vari servizi) su hosts che non si possono raggiungere direttamente, effettuando un “piping” delle informazioni in una connessione SSH verso un host pubblico (quest’ultimo deve essere in grado di raggiungere gli hosts interni). Ad esempio immaginiamo che mi trovi a casa [1] e voglia raggiungere il PC dell’ufficio [3] che non e’ connesso direttamente ad internet ma e’ “dietro” un firewall con shell ssh[2]. Per gli esempi faro’ riferimento alla seguente situazione:

PC-Locale -> {Internet} -> Firewall (IP: 125.xxx.xxx.xxx) -> Host destinazione dietro il firewall (IP: 10.xxx.xxx.xxx)

remote

Per attivare il tunnessl SSH in questo caso basta digitare sul PC locale [1] (Linux, OSX, etc):
ssh -N -L 8080:10.xxx.xxx.xxx:80 user@125.xxx.xxx.xxx
dove:
-L : il tunnel di tipo “Local”
8080 : la porta che viene aperta in locale
10.xxx.xxx.xxx:80 : l’host non raggiungibile via internet e la porta verso cui creare il tunnel
user@125.xxx.xxx.xxx : il server a cui ci connettiamo “125.xxx.xxx.xxx (raggiungibile da internet) ed il relativo utente “user”

Con questo comando gli diciamo che chiamando la porta 8080 in locale, ci viene restituito quello che e’ presente sulla porta 80 del server 10.xxx.xxx.xxx altrimenti non raggiungibile.

Remote Port Forwarding

remote1

Questo sistema invece consente di aprire un tunnel in modo inverso ovvero, facendo riferimento all’esempio precedente, e’ come se mi trovassi in ufficio [3] e volessi dare la possibilità al PC casa [1] di connettersi ad un server interno all’ufficio [4] ma sia PC ufficio [3] che server ufficio [4] hanno un IP privato non sono direttamente raggiungibili. In questo caso, utilizzo un terzo server [2] raggiungibile su internet da tutti gli host in questione. Dal PC ufficio [3] apro una connessione verso il server su internet [2], attivando una porta che effettua il forward verso il server ufficio [4], rendendolo quindi raggiungibile anche dal PC casa [1].

In questo caso il comando da lanciare sul Pc in ufficio e’:

ssh -N -R 8080:10.xxx.xxx.xxx:80 user@125.xxx.xxx.xxx

dove:
-R : il tunnel di tipo “Remote”
8080 : la porta che viene aperta in remoto
10.xxx.xxx.xxx:80 : l’host non raggiungibile via internet e la porta verso cui creare il tunnel
user@125.xxx.xxx.xxx : il server a cui ci connettiamo “125.xxx.xxx.xxx (raggiungibile da internet) ed il relativo utente “user”

a questo punto bastera’ richiamare dal PC a casa [1] l’indirizzo http://125.xxx.xxx.xxx:8080 per visualizzare la risposta del servizio web (porta 80) del server ufficio [4] 10.xxx.xxx.xxx

La differenza sostanziale tra le due modalita’ e’ il punto da cui si lancia il comando. Tornando sempre all’esempio iniziale, se sono a casa e voglio connettermi al Pc in ufficio, usero’ un tunnel di tipo “Local”, se invece sono in ufficio e voglio dare la possibilita’ di raggiungere il mio PC ad un utente remoto, usero’ un tunnel di tipo “Remote”.

L’esempio riportato e’ chiaramente utile per raggiungere la porta 80 (server web), ma allo stesso modo si potrebbe raggiungere il PC interno (es. 10.xxx.xxx.xxx) in Desktop Remote o VNC, specificando le opportune porte.

Ti interessa acquistare un dominio a prezzi ultraconvenienti? clicca qui

Se hai trovato utili le informazioni su questo blog,
Fai una donazione!
Clicca sul bottone qui sotto o almeno clicca sul banner pubblicitario 🙂



Commenta