Compago

...free knowledge

 
  • Increase font size
  • Default font size
  • Decrease font size
Home Manuali Windows Tunnel ssh con putty

Tunnel ssh con putty

E-mail Stampa PDF

L'obiettivo  di questa guida è spiegare come incapsulare il traffico di un determinato protocollo all'interno di un tunnel ssh per rendere "sicura" la connessione tra due host. In particolare vogliamo mettere in pratica ciò usando come client SSH il famoso Putty, la cui interfaccia probabilmente è già nota a molti.

Prerequisiti

Do per scontato che sappiate cosa sia un tunnel ssh e sappiate farlo da shell o altro terminale (vedi Guida tunnel ssh) proviamo una maniera meno rude e forse più piacevole agli utenti windows.

La situazione iniziale è quella di due pc di una stessa lan. Il primo pc ( pc_A ) ha come sistema operativo Linux, e contiene al suo interno il server VNC al quale mi vorrei connettere, e che sta in ascolto sulla porta 5900.
Il secondo pc ( pc_B ) ha come sistema operativo windows xp e verrà usato un qualsiasi VNC viewer, come ad esempio RealVNC.
Il pc_A con indirizzo 192.168.1.14 rappresenta il pc remoto, mentre il pc_B con IP 192.168.1.68 sarà il mio pc locale.

Normalmente potrei collegarmi direttamente dal pc_B al pc_A col mio vnc viewer impostando l'ip del pc remoto (pc_A) e la porta del suo vnc server ( non impostando la porta verrà usata quella di default 5900)

tunnelputty2

Come VNC viewer da windows userò RealVNC in quanto è semplice da impostare e si può eseguire in modalità stand-alone, cioè senza installarlo. Se il pc remoto avesse come sistema operativo Windows sarà possibile installarci sempre Realvnc server, magari sempre in versione stand-alone, oppure TightVNC che è open source e multipiattaforma (vedi Installazione rapida TightVNC ).

Quello che andremo a creare adesso è un tunnel ssh in cui far passare i dati della connessione client -server vnc.

tunnelputty3

Occorrono quindi un server ssh sul pc remoto e un client ssh sul pc locale.

Installazione server SSH

Nel pc remoto con linux Ubuntu ad esempio basta digitare il comando:

sudo apt-get install openssh-server

se il pc remoto usasse windows allora dovremo installare un server ssh per windows e a questo proposito consiglio di usare OpenSSH (vedi Installare OpenSSH).

Per chi è connesso tramite gateway a internet, è necessario abilitare il "portforward" di una porta tcp (di default la 22) verso l'ip del server ssh e naturamente, se nel server fosse presente un firewall, assicurarsi che le connessioni sulla porta 22 non siano bloccate. Insomma prima di addentrarsi nella creazione del tunnel sarebbe meglio a provare se ci si può connettere dal pc_B al pc_A tramite SSH.

Installazione e configurazione client ssh (PuTTY)

Il client ssh da noi scelto è PuTTY prelevabile dal sito dello sviluppatore in versione "standalone" o in versione "installer"
Per le nostre esigenze è sufficiente il semplice eseguibile, che possiamo utilizzare ovunque (es: internet point o pc dove non è consentita l'installazione di software aggiuntivi!
Anche volessimo prendere la versione installabile, il setup è semplicissimo: è sufficiente anche qui confermare tutte le richieste!
Possiamo testare il funzionamento del server SSH, sul pc_A, semplicemente tentando di connetterci ad esso dal pc locale pc_B, quindi con il client PuTTY digitiamo campo "host name" l'indirizzo del pc remoto : 192.168.1.14)

tunnelputty1

Clicchiamo su "Open" e se riusciamo a connetterci siamo pronti per iniziare l'attività da un altro pc.

Creazione tunnel SSH
Da Putty, impostare l'ip del computer (server ssh) a cui connettersi e impostare il protocollo SSH, come fatto precedentemente.
Nella sezione tunnel impostiamo la porta locale 12345 che sarà in ascolto sulla mia interfaccia di loopback 127.0.0.1 e che verrà trasportata nel PC di destinazione, nella porta di destinazione sulla 5900!

tunnelputty4

Nell'esempio indicato, quindi PuTTY aprirà un socket in ascolto sulla porta locale 12345 che lo trasporterà alla porta 5900 dell'ip locale del server ssh, per questo motivo ho indicato 127.0.0.1 che indica il localhost sul pc remoto dove risiede il server ssh, infatti avremo potuto mettere anche 192.168.1.14, ovvero l'indirizzo del pc_A e non sarebbe cambiato nulla.

E' importante stare attenti che la porta locale selezionata, non sia già in uso da un altro servizio!
Per questo motivo ho usato la porta 12345 che difficilmente sarà già utilizzata.

Una volta aggiunto il tunnel (cliccando sul pulsante Add), avvio la connessione ssh (cliccando su Open) e inserisco il nome utente e la sua password sul pc remoto, e se il tutto ha successo avremo creato il tunnel!!

Per verificare il tutto per prima cosa guardo se nel mio pc locale è stato creato un server in ascolto sulla porta 12345, per fare ciò lancio il comando netstat -an :

tunnelputty5


Se tutto è andato bene non ci rimane altro che verificare il funzionamento del tunnel: dal client è sufficiente lanciare il viewer vnc e digitare come ip di destinazione (del server) 127.0.0.1:12345 confermare e alla richiesta della password, digitare la password precedentemente impostata sul vnc server.

tunnelputty7

Se riusciamo a connetterci il nostro lavoro è terminato, e tutti vissero felici e contenti.

Nota:
Se nel pc_B locale avessi avuto linux avrei potuto lanciare direttamente il seguente comando senza usare putty:

ssh  192.168.1.14 -l pippo -L 12345:127.0.0.1:5900

dove pippo è il nome utente sul pc_A remoto e alla richiesta di password avremo digitato quella impostata per quell'utente sul pc remoto A.
In questo modo il tunnel ssh è creato, non resta che sfruttarlo:
da un'altra sessione shell ho digitato:

vncviewer 127.0.0.1::12345

Attenzione ai doppi ":" che indicano la porta dove connettere il viewer!
In questo caso alla richiesta di password, bisogna digitare la password impostata nel server vnc.

Secondo lo stesso principio utilizzato per connettersi in maniera "sicura" via ssh al server vnc, potremmo creare e sfruttare nuovi tunnel per altri servizi che lavorano su altre porte.
Infatti è possibile creare più tunnel in parallelo e tutti passerebbero dalla porta SSH impostata nel server SSH remoto.

Attività avanzate per necessità particolari

Volendo essere più completi nella trattazione del problema dobbiamo rivedere quello che fino ad ora siamo stati capaci di fare.

Il pc_A è fino ad ora ha sempre fatto la parte del server, del quale solo una cosa era essenziale: che la porta 22 , o qualsiasi altra porta del server ssh, fosse raggiungibile dal mio client ssh. Nessun vincolo per la connettività è stato imposto al pc_B client. Ora questa situazione potrebbe andare bene se il firewall che protegge il pc_A lascia passare le connessioni in entrata sulla 22, e probabilmente se il router di connettività del pc_A ha impostato il port forwarding tra la interfaccia esterna e quella interna della porta 22.

Ma se non fosse così? Se il mio pc fosse all'interno di una lan, per me irraggiungibile dall'esterno, io non potrei mai accedere ad un server su un pc interno. Quindi cosa posso fare? Beh è semplice il tunnel SSH è bidirezionale e posso ricrearlo ma partendo da una situazione leggermente diversa:

tunnelputty6

come possiamo notare il server ssh ora sta nel mio pc locale pc_B, dove io non ho nessun vincolo, mentre il client ssh sta nel pc_A.

Ora quello che mi serve e che il comando di creazione del tunnel questa volta venga lanciato dal pc remoto:

ssh 192.168.1.68 -l administrator -R 12345:127.0.0.1:5900

come possiamo notare l'ip di destinazione è quello del pc_B, con l'opzione "-l " comunico al server ssh con quale nome utente sto cercando di connettermi, e dato che sul pc locale ho windows ho inserito l'utente administrator e finalmente con l'opzione "-R" dico che voglio creare un tunnel con una porta in ascolto (12345) sul lato server ssh, quindi sul pc_B, e questa deve essere connessa alla porta locale 5900 del pc_A.

Questi comandi per il client ssh possono essere sostituiti da putty:

tunnelputty8

So che è un po complicata come situazione ma se confrontate lo schema nei due casi noterete che il tunnel è lo stesso, ma è cambiato il metodo di creazione. Infatti nel primo caso abbiamo usato l'opzione "-L "  nel secondo caso l'opzione usata è "-R".

Ora se proviamo a connetterci col vnc viewer sulla interfaccia di loopback del mio pc_B nello stesso modo in cui mi sono connesso con la prima procedura:

tunnelputty7

riuscirò a connettermi al pc remoto pc_A e gestirlo, passando attraverso il suo router e il suo firewall.

 

Conclusioni
In sintesi: il vantaggio di creare un tunnel ssh sta nel fatto che il traffico tra i due host (siano essi in rete locale o che passano via internet), viene cifrato dal protocollo ssh stesso!
Se le necessità sono limitate, questa configurazione può sostituire una vpn dalle piene funzionalità di "tunneling".
L'implementazione di un tunnel di questo genere è piuttosto semplice, e le potenzialità sono notevoli: possiamo incapsulare qualunque tipo di traffico vogliamo!
Se il server ssh è dietro ad un router, è sufficiente abilitare il portforward della porta TCP 22 verso l'ip locale del server ssh! Non è necessario dare accesso da nessun'altra "porta" TCP.
Una volta che abbiamo configurato a puntino il server ssh e i vari servizi di cui vogliamo usufruire, da qualunque parte del mondo con un semplice client ssh e un client per il servizio cui vogliamo usufruire (negli esempi sopra un client vnc o un browser), possiamo accedere tranquillamente in sicurezza al nostro server privato o aziendale.
Gli svantaggi: ovviamente se pretendiamo di cifrare tutto il traffico di tutti i nostri servizi, le prestazioni potrebbero degradarsi, in quei casi è preferibile implementare una vpn.


Problemi possibili
Se abbiamo degli errori nella connessione via SSH, dobbiamo accertarci che

  • il server SSH sia attivo
  • gli utenti siano muniti di password e autorizzati nel server ssh
  • sull'eventuale firewall sia consentito il traffico in entrata sulla porta 22


Se abbiamo problemi a collegarci col vnc attraverso il tunnel creato, dobbiamo accertarci che:

  • il tunnel sia creato correttamente verificando le porte e gli ip (o nomi computer) inseriti
  • nelle impostazioni del server vnc, sia abilitata la connessione nell'interfaccia "loopback": il server crede che sia un viewer locale a collegarsi a se stesso, non sa che è una connessione esterna con tunnel!!
Ultimo aggiornamento ( Lunedì 13 Giugno 2011 06:49 )  
Loading

Login