Tunnel SSH

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.

In questa paginetta vediamo due esempi per accedere a database remoti altrimenti non raggiugibili.

Local Port Forwarding

I tunnel SSH permettono 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 un DB nella VPN dell’ufficio [3] che non e’ connesso direttamente ad internet ma e’ raggiungibile da un server linux con shell ssh[2] che useremo come ponte. Per gli esempi faro’ riferimento alla seguente situazione:

PC-Locale -> {Internet} -> Ponte (IP: 125.xxx.xxx.xxx) -> Host destinazione (IP: 10.xxx.xxx.xxx)

SSH local tunnel

Per attivare il tunnessl SSH in questo caso basta digitare sul PC locale [1] (Linux, OSX, etc):
ssh -N -L 3307:10.xxx.xxx.xxx:3306 user@125.xxx.xxx.xxx

dove:
-L : il tunnel di tipo “Local”
3307 : la porta che viene aperta in locale
10.xxx.xxx.xxx:3306 : 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 evidenziato in rosso nella figura) ed il relativo utente “user”

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

Qualsiasi tool sul PC locale (eg. phpMyAdmin, DBeaver, ...) utilizzando la porta locale 3307 raggiungera' in realta' la porta 3306 del DB remoto!

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 3308:10.xxx.xxx.xxx:3306 user@125.xxx.xxx.xxx

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

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

/etc

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 DB in ufficio, usero’ un tunnel di tipo “Local”, se invece sono in ufficio e voglio dare la possibilita’ di raggiungere il DB ad un utente remoto, usero’ un tunnel di tipo “Remote”.

L’esempio riportato e’ chiaramente utile per raggiungere la porta 3306 (DB MySQL), ma allo stesso modo si potrebbe raggiungere qualsiasi DB ospitato sul server interno ovvero connetersi in SSH, Desktop Remote o VNC, specificando le opportune porte.

Naturalmente e' molto importante tenere conto della sicurezza, in particolare un ssh tunnel remote e' una "porta aperta" sugli ambienti accessibile dall'esterno.


Titolo: SSH tunnel
Livello: Avanzato (3/5)
Data: 31 Ottobre 2013 🎃 Halloween
Versione: 1.1.1 - 14 Febbraio 2021 ❤️ San Valentino
Autore: mail [AT] meo.bogliolo.name     ha copiato spudoratamente dall'URL https://blog.smsoft.it/2009/03/21/creare-un-tunnel-ssh-su-linux-o-osx/ ...
[NdA: cosa rara in italiano era gia' tutto scritto e disegnato in modo completo e chiaro; ho solo modificato le porte utilizzando quelle tipiche per l'accesso ad un Database MySQL]