Uno degli strumenti più comodi per la gestione remota delle macchine server è il VNC (Virtual Network Computing), un sistema che sfrutta il protocollo RFB per garantire l’accesso remoto ad una macchina. Nonostante il Desktop Remoto di Windows sia in molti casi più performante per la gestione delle macchine da remoto, VNC è molto usato in quanto sistema cross platform, disponibile cioè su tutti i sistemi operativi.

Una delle pecche più grandi di VNC è la sua scarsa affidabilità in termini di sicurezza: l’inoltro delle credenziali di accesso avviene in modo “non-criptato” e questo espone il server VNC (e quindi la macchina che lo esegue) a numerosi rischi.

Fortunatamente è possibile effettuare la connessione alla macchina server attraverso un tunnel SSH che garantisce il livello di sicurezza necessario sebbene non intrinsecamente implementato in VNC.Lo scenario sarà il seguente:

  • SERVER: dovrà avere in esecuzione un server VNC ed un server SSH.
  • CLIENT: dovrà disporre di un client SSH e un client VNC.

Server

Logo del progetto OpenSSH

Logo del progetto OpenSSH

Per quanto riguarda il server ipotizziamo di dover gestire da remoto un server Windows, ad esempio una installazione di 2003 SBS.

Il modo migliore per dotare Windows di un demone SSH consiste nell’installare OpenSSH, di cui è disponibile un installer per Windows a questo indirizzo.

Terminata la procedura di installazione (che per inciso utilizza una versione “lite” di Cygwin per il porting), è necessario predisporre manualmente il file delle password e lo possiamo fare utilizzando gli stessi comandi installati assieme al server SSH.

Avviamo un Prompt di DOS e digitiamo:

cd C:ProgrammiOpenSSHbin
mkgroup -d >> ..etcgroup
mkpasswd -d -u Administrator >> ..etcpasswd

NOTA: in questo caso ho utilizzato l’opzione -d dovendo importare i dati da un dominio; nel caso in cui avessimo bisogno di utilizzare utenze e gruppi locali dovremmo usare l’opzione -l. È preferibile evitare di usare entrambe le opzioni per evitare duplicati. Nell’esempio, inoltre, ho abilitato esclusivamente l’utente Administrator.

Ora non rimane che avviare il server OpenSSH utilizzando il comando:

net start opensshd

oppure dal pannello “Servizi” degli Strumenti di Amministrazione, avviare il servizio “OpenSSH Server”.

Logo del progetto

Logo del progetto TightVNC

Per quanto riguarda il server VNC possiamo optare invece per TightVNC, un progetto open source che gode di un discreto supporto. Ricordate che affinché l’installazione vada a buon fine e tutto funzioni correttamente è indispensabile installare TightVNC server utilizzando una sessione locale di Windows. Al termine dell’installazione, infatti, bisogna scegliere di avviare il server come servizio di Windows: se effettuiamo l’installazione collegati, ad esempio, in Remote Desktop al server non saremo in grado di visualizzare una finestra fondamentale che ci richiede di impostare la password per accedere con un client al server VNC. Utilizzando una sessione in Remote Desktop Connection l’installazione sembra andare a buon fine, ma ogni tentativo di connessione con un client restituirà un messaggio di errore per password non valida. In tal caso, effettuate un log-in locale sul server e vedrete la finestra di avviso aperta sul desktop. Nel caso non fosse presente, riavviate il servizio VNC dal pannello “Servizi” degli Strumenti di Amministrazione.

Affinché il tunnel SSH funzioni correttamente dobbiamo accedere alle preferenze di TightVNC server ed abilitare le connessioni in loopback dalle proprietà avanzate, ed il server è pronto.

Client

Come client possiamo utilizzare qualunque piattaforma, purché disponga di un client SSH e un viewer VNC. Vediamo nel dettaglio come fare sui tre sistemi operativi più diffusi: Windows, Mac OS, Linux.

Windows

Il miglior client SSH per Windows è a mio avviso PuTTY. Utilizzando un solo file eseguibile e senza bisogno di installazione, il client può essere eseguito su qualunque macchina Windows, anche da un pendrive. La configurazione è semplicissima, nella schermata principale bisogna inserire l’indirizzo IP e la porta del server al quale ci dobbiamo connettere (lasciando SSH come tipo di connessione):

PuTTY: configurazione della sessione

PuTTY: configurazione della sessione

Quindi andiamo nella sezione “Connection > SSH > Tunnels” ed impostiamo il forward di una porta locale che siamo sicuri essere libera (ad esempio la 22222) sulla porta 5900 del server come nell’immagine:

PuTTY: configurazione del tunnel

PuTTY: configurazione del tunnel

Quindi selezioniamo “Add” per salvare la regola. In sostanza questa impostazione permette a PuTTY di richiedere al server l’apertura della porta locale 22222 (locale dal punto di vista del server) dirottando il traffico su quella porta sulla porta 5900 dello stesso server.

Adesso non rimane che avviare la connessione da PuTTY, inserire nome utente e password dell’utente Administrator (lo abbiamo abilitato in fase di installazione di OpenSSH sul server) e non appena abbiamo accesso al Prompt DOS, avviare la connessione VNC con il viewer, inserendo come host di connessione 127.0.0.1:22222!

Linux

Utilizzando Linux le cose sono perfino più semplici, potendo sfruttare tutti i vantaggi della linea di comando. Digitiamo infatti nel terminale:

$ ssh ip_del_server_ssh -l Administrator -L 22222:127.0.0.1:5900

per aprire il tunnel, quindi avviamo una sessione VNC:

$ vncviewer 127.0.0.1::22222

o in alternativa utilizziamo un client con frontend grafico, connettendoci allo stesso indirizzo 127.0.0.1 porta 22222.

Mac OS

Sotto Mac OS la procedura è praticamente identica a Linux. Dal terminale inseriamo lo stesso comando per aprire il tunnel:

$ ssh ip_del_server_ssh -l Administrator -L 22222:127.0.0.1:5900

ed avviamo la sessione VNC utilizzando ad esempio Chicken of the VNC.

AGGIORNAMENTO: Leopard include un client VNC integrato, estremamente funzionale, che non è immediatamente raggiungibile dalla cartella applicazioni. Basta accedere a /System/Library/CoreServices per poter avviare “Condivisione schermo”.

Considerazioni

La tecnica del tunnel SSH utilizzata in questo articolo ha utilizzi variegati e può essere estesa ad ogni servizio che sfrutti il protocollo TCP/IP. Limitatamente a piccoli interventi o singoli servizi questa tecnica permette di ottenere lo stesso risultato di collegamento in VPN, preferibile in contesti in cui vogliamo che tutto il traffico generato da tutti i servizi sia cifrato senza incidenza sulle prestazioni.

Potendo disporre di un tunnel SSH è sufficiente impostare sul router o sul firewall esclusivamente il port-forward del traffico su una porta qualunque verso la porta 22 del server SSH.

Prestate attenzione al fatto che la porta aperta sul router non ha nulla a che vedere con la porta di inoltro del tunnel SSH. Se ad esempio impostiamo il forward del traffico sulla porta 12345 sulla porta 22 del server SSH, la connessione dovrà essere avviata con il comando:

$ ssh ip_del_server_ssh -p 12345 -l Administrator -L 22222:127.0.0.1:5900

Allo stesso modo nella configurazione della sessione in PuTTY, dovremmo modificare la porta di connessione:

PuTTY: configurazione della sessione su una porta differente

PuTTY: configurazione della sessione su una porta differente

Articoli correlati:

  1. Un Mac mini come server (2)
  2. Le migliori applicazioni IT per iPhone!

Taggato con:

Archiviato in: GuideNetworkingSicurezza

Ti è piaciuto questo articolo? Iscriviti ai miei feed RSS per saperne di più!