Tempo di lettura stimato: 3 minuti

Tunnel SSH: alcuni casi pratici
Spesso abbiamo la necessità di accedere a pc o a servizi che non vediamo direttamente.
Un esempio tipico:

schema tunnel ssh

In questo caso riusciamo ad accedere a srv01 perché sul router è impostato un forward della porta 22 di srv01 (che è quella su cui è in ascolto il demone ssh) in modo che sia accessibile dall’esterno come porta 2222. Ciò significa che qualsiasi richiesta inviata al router, su quella porta, verrà girata sulla porta 22 di srv01.

In questo modo posso connettermi in ssh a srv01 con il comando:

[gain@local ~]$ ssh -p2222 root@234.23.xxx.xxx
[root@srv01 ~]# _

Per accedere a srv02 è necessario loggarsi sul primo server e poi sul secondo in questo modo:

[gain@local ~]$ ssh root@234.23.xxx.xxx -p2222
[root@srv01 ~]# ssh root@192.168.5.9
[root@srv02 ~]# _

In realtà, con ssh è possibile accedere direttamente in questo modo:

[gain@local ~]$ ssh -t user@234.23.xxx.xxx ssh user@192.168.5.9
[root@srv02 ~]# _

Si passerà quindi sempre da srv01 ma in maniera trasparente, gestita da ssh.

Un’altra interessante feature di ssh, è quella di creare un tunnel su una porta. Per esempio se avessi bisogno di accedere al pannello di controllo del router, non lo potrei fare direttamente perché esso è disponibile solo sull’interfaccia 192.168.5.1; posso però fare in modo che sia srv01 a fare le richieste al mio posto e a passarmi i dati su una porta. Esempio:

[gain@local ~]$ ssh -L 127.0.0.1:8888:192.168.5.1:80 \
> root@234.23.xxx.xxx -p2222 -N

Con questo comando faccio in modo che tutte le richieste inviate a 127.0.0.1:8888 vengano invece girate a 192.168.5.1:80 per mezzo di srv01. L’opzione -N lascia il processo in foreground, in modo da poterlo terminare con ctrl-C nel momento in cui non mi serva più. In caso contrario lo dovrei cercare e terminare con utility apposite (ps e kill, top, htop, etc.). In questo modo, puntando il browser su http://127.0.0.1:8888, avrò accesso al pannello del router, come se fossi all’interno della rete 192.168.5.x

Un giorno mi è capitato un caso strano, un pannello che effettuava dei redirect alle proprie pagine. Visitando infatti http://127.0.0.1:8888 venivo ributtato su http://192.168.5.1/doc/index.html che, non essendo accessibile, terminava il proprio caricamento con un errore. Il pannello non funzionava nemmeno visitando direttamente http://127.0.0.1:8888/doc/index.html, perché anche in questo caso mi trovavo ributtato su http://192.168.5.1/doc/index.html. Dovevo trovare il modo per inoltrare tutte le richieste a 192.168.5.1 come se fossero locali. La prima soluzione che mi è venuta in mente è stata quella di aggiungere la riga

127.0.01 192.168.5.1

al file /etc/hosts, ma non ha funzionato forse perché come secondo parametro l’ip non soddisfa le caratteristiche che deve avere un hostname. Ho provato allora ad agire sulle interfacce di rete e sono riuscito a risolvere in questo modo:

[root@local ~]# ifconfig wlan0:1 192.168.5.1
[root@local ~]# ssh -L 192.168.5.1:80:192.168.5.1:80 \
> root@234.23.xxx.xxx -p2222 -N

Con il primo comando creo un’interfaccia di rete virtuale (nel mio caso sull’interfaccia della scheda wifi) per avere lo stesso ip del router. In questo modo pingando 192.168.5.1 pingherò invece me stesso. Il secondo comando specifica invece che tutte le richieste effettuate su 192.168.5.1:80 (che in realtà sono io) vanno girate al 192.168.5.1:80 per mezzo della connessione ssh. Il 192.168.5.1:80 che vede ssh sarà quello del router. In questo modo, visitando con il browser http://192.168.5.1, avrò accesso al pannello di controllo del router.

ATTENZIONE: va notato che per creare l’interfaccia di rete virtuale occorrono i permessi di root. Da notare inoltre che anche per effettuare il tunnel su una porta riservata, come la 80, servano nuovamente i permessi di root (per la porta 8888 dell’esempio precedente, invece, non servono). Infine verificate che non ci sia nessun demone che occupi la porta 80 (tipicamente un server web tipo Apache o Nginx …) e nel caso ci sia, stoppatelo.

Facebooktwittergoogle_plusredditpinterestlinkedinmail

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

*