Guida controllo remoto pc con vnc e fastweb ssl

Transcript

Guida controllo remoto pc con vnc e fastweb ssl
Guida al Controllo Remoto del proprio PC con VNC e Fastweb
(Versione SSL)
Ver. 1.0 rev.1.1 del 14/12/2003 By EnergyDrink
emailto:[email protected]
Questa che segue, e’ una delle possibili soluzioni al problema di dover controllare da remoto, un PC
situato all’interno della rete fastweb da parte di un altro pc, la soluzione proposta funziona
indifferentemente dal fatto che l’altro pc (il client) si trovi anche lui all’interno della rete Fastweb o che sia
connesso direttamente ad internet con un ip pubblico.
La soluzione presa in considerazione in questa guida prevede l’impiego dei seguenti software:
TightVNC – e’ il programma che permette l’amministrazione remota in modo grafico del desktop;
OpenSSL – consente la creazione dei certificati che verranno usati da Stunnel per instaurare la
connessione cifrata e quindi protetta;
Stunnel –
che realizza la connessione cifrata a tutti gli effetti tra i due pc, in modo da ottenere una
connessione sicura.
L’immagine seguente mostra lo schema di funzionamento con il tunnel cifrato SSL:
Fig.1
Si necessita anche di un account di DNS dinamico, (la cui creazione e gestione va aldila’ di questa guida)
come ad esempio dyndns.org oppure no-ip.com.
Bando alla teoria, ecco passo dopo passo la pratica :)
LATO SERVER (il pc da controllare):
TightVNC
Scarichiamo l’ultima versione di TightVNC da qui: http://www.tightvnc.com/download.html (al momento
della stesura di questa guida l’ultima versione e’ tightvnc-1.2.9-setup.exe) e lo installiamo; la scelta se
installare Tighvnc server come servizio o meno e’ solo vostra, la differenza e’ nel fatto che se viene
installato come servizio partira’ in automatico all’avvio di windows altrimenti dovremo “lanciarlo” a
“mano” quando ne avremo necessita’.
Se non e’ gia’ “partito”, eseguite TightVNC server, un’icona indichera’ che e’ attivo
fateci “Click” col tasto destro e aprite le proprieta’,
settiamo una password a piacere, e impostiamo tutto come in figura,
poi andiamo su Advanced:
impostiamo anche qui tutto come nella figura. (da notare Allow Loopback Connection e Allow only
loppback connection sul significato ci torniamo sopra in seguito).
Stunnel
Una volta che TightVNC e’ installato e configurato come descritto, passiamo a Stunnel.
Scarichiamo da qui http://www.stunnel.org/download/binaries.html l’ultima versione dell’eseguibile (al
momento della stesura di questa guida l’ultima versione e’ stunnel-4.04.exe) e lo mettiamo nella
cartella c:\programmi\stunnel ci serviranno anche le librerie libeay32.dll, libssl32.dll che troviamo
nella stessa pagina di stunnel-4.04.exe
OpenSSL
Dalla stessa pagina dove abbiamo scaricato stunnel scarichiamo openssl.exe e
openssl necessita delle due librerie libeay32.dll, libssl32.dll, mettiamo
c:\programmi\OpenSSL
insieme
al
file
openssl.conf
(lo
http://members.xoom.virgilio.it/fwforum/openssl.conf) e lo script ca.bat
http://members.xoom.virgilio.it/fwforum/ca.bat)
risultato finale sara’:
come per stunnel anche
il tutto nella cartella
scaricate
da
qui
(lo scaricate da qui
che serve a generare i certificati, a questo punto il
Il punto seguente e’ la generazione dei certificati e delle chiavi per la cifratura del tunnel.
Generazione dei certificati e delle chiavi
Inizializzazione della CA (Certification Authority)
La prima cosa da fare e’ l’inizializzazione della CA con la conseguente generazione del suo certificato.
L’inizializzazione avviene nel seguente modo:
dal “prompt dei comandi” (ci si arriva da Start/esegui digita command e premi invio) posizionati nella
cartella C:\programmi\OpenSSL e digita ca genca seguito da invio
il risultato e’ la creazione della cartella C:\CA contenente fra l’altro il file CAcert.pem che utilizzeremo in
seguito
Creazione del certificato del Server VNC
Una volta inizializzata la CA va creato il certificato per il server VNC e lo facciamo nel seguente modo:
digitiamo ca server seguito da invio
Il risultato e’ la creazione della cartella C:\CA\temp\vnc_server con all’interno server.pem e server.crt
che ci serviranno in seguito.
Da notare che all’atto della creazione del certificato del server (il procedimento appena descritto) e del
client, alla richiesta “Enter pass phrase for C:\CA\private\CAkey.pem:” va inserita la STESSA
password usata in precedenza per generare la CA (ca genca – quando chiedeva “Enter PEM pass
phrase:”) ossia la password che gli serve per sbloccare la chiave privata della CA altrimenti NON
FUNZIONA e NON genera il certificato!.
Creazione del certificato del client VNC
L'ultimo certificato da generare e’ quello del client VNC:
digitiamo ca client seguito da invio
Come per la generazione del certificato del server lo script ha creato una cartella C:\CA\temp\vnc_client
al cui interno c’e’ client.pem e client.crt che ci serviranno in seguito.
Configurazione di Stunnel
Per poter effettuare una connessione cifrata abbiamo bisogno di configurare stunnel con i certificati e le
chiavi che abbiamo generato in precedenza.
Per fare questo abbiano necessita di creare il file “C:\programmi\Stunnel\stunnel.conf” il cui
contenuto sara’:
CAfile = CAcert.pem
CApath = certificates
cert = server.pem
client = yes
verify = 3
delay = yes
[vnc]
accept = 127.0.0.1:5500
connect = un.account.che.abbiamo.creato.di.dns.dinamico:443
Con questi parametri diciamo a stunnel che (visto che stiamo ancora parlando del lato sever) lui non
accetta connessioni (client=yes), di fare la risoluzione della stringa dns specificata in connect ogni volta
(delay=yes ) prima di effettuare la connessione (senza questo parametro lui fa la risoluzione dns solo la
prima volta, quindi quando l’ip associato a quell’entry dns cambia lui non se ne accorge e continua a fare
la chiamata sempre allo stesso ip), accetta connessioni sul loopback alla porta 5500 tcp (la porta e
l’interfaccia usata dal server VNC per effettuare la chiamata al client ed e’ qui che stunnel prende “in
consegna” la chiamata del VNC server per poi cifrarla verso la destinazione connect=xxxxxxxx
“forwardandola” alla porta 443 del pc remoto specificato in connect). Vedi Fig.1
Il passo successivo e’ quello di copiare il certificato della CA (C:\CA\CAcert.pem) e il certificato del server
VNC (C:\CA\temp\vnc_server\server.pem) nella cartella C:\Programmi\Stunnel.
Inoltre dobbiamo far “vedere” a stunnel il certificato del client (in modo che l’autenticazione sia univoca,
ossia la connessione avviene solo se “dall’altra parte” c’e’ un pc che “possiede” il certificato del client da
noi generato!
Per fare questo bisogna calcolare l’hash del certificato del client nel modo seguente:
cd C:\CA\temp\vnc_client
C:\programmi\OpenSSL\openssl x509 –hash –noout –in client.crt
E diamo invio
A questo punto openssl calcola l’hash sul certificato e lo stampa a video
Copiamo ora il certificato del client cambiandogli il nome nell’hash cosi’:
Il file ottenuto (in questo caso 2accc66b.0 che non e’ altro che client.crt rinominato con il valore
dell’hash.0) va messo dentro la cartella C:\Programmi\Stunnel\certificates.
Il contenuto finale della cartella C:\programmi\stunnel e C:\programmi\tunnel\certificates dovrebbe
apparire cosi’:
LATO CLIENT:
TightVNC
Scarichiamo
l’ultima
versione
di
TightVNC
(come
per
il
server)
da
qui:
http://www.tightvnc.com/download.html e lo installiamo; qui il problema se installarlo come servizio o
meno non si pone in quanto sul client avremo necessita del solo VNC client in “listen mode”
(Start/Programmi/TightVNC/TightVNC Viewer (listen mode))
Stunnel
Una volta che TightVNC e’ installato passiamo a Stunnel.
Scarichiamo da qui http://www.stunnel.org/download/binaries.html l’ultima versione dell’eseguibile (al
momento della stesura di questa guida l’ultima versione e’ stunnel-4.04.exe) e lo mettiamo nella
cartella c:\programmi\stunnel ci serviranno anche le librerie libeay32.dll, libssl32.dll che troviamo
nella stessa pagina di stunnel-4.04.exe
Configurazione di Stunnel
Per poter effettuare una connessione cifrata abbiamo bisogno di configurare stunnel anche nella parte
client con i certificati e le chiavi che abbiamo generato in precedenza.
Per fare questo abbiano necessita di creare file il file “C:\programmi\Stunnel\stunnel.conf”
contenente:
CAfile
CApath
cert =
client
verify
= CAcert.pem
= certificates
client.pem
= no
= 3
[vnc]
accept = 443
connect = 127.0.0.1:5500
A differenza del server la connessione in ingresso qui deve essere accettata (client=no) sulla porta 443
(accept=443) e “forwardata” al loopback (127.0.0.1) porta 5500 dove il VNC client in “listen mode” e’ in
ascolto per poi prenderla “in consegna”.
Il passo successivo e’ quello di copiare il certificato della CA (contenuto in C:\CA\CAcert.pem del pc
server) e il certificato del client VNC (contenuto in C:\CA\temp\vnc_client\client.pem sempre del pc
server) nella cartella C:\Programmi\Stunnel del pc client.
Ripetiamo poi la procedura dell’hash questa volta pero’ con il certificato del server cioe’:
cd C:\CA\temp\vnc_server
C:\programmi\OpenSSL\openssl x509 –hash –noout –in server.crt
E diamo invio
A questo punto openssl calcola l’hash sul certificato e lo stampa a video
Copiamo ora il certificato del server cambiandogli il nome nell’hash cosi’:
Il file ottenuto (in questo caso f21a8d85.0 che non e’ altro che server.crt rinominato con il valore
dell’hash.0) va messo dentro la cartella C:\Programmi\Stunnel\certificates del pc client
Il contenuto finale della cartella C:\programmi\stunnel e C:\programmi\tunnel\certificates del pc client
dovrebbe apparire cosi’:
A questo punto, sul pc server, basta automatizzare la connessione (con Pannello di controllo
operazioni pianificate) e impostare che ogni minuto o due venga eseguita l’istruzione
“C:\Programmi\TightVNC\WinVNC.exe -connect 127.0.0.1” (ovviamente lato server e con VNC
server e stunnel attivati) cosi’ facendo, quando il server esegue questa istruzione e VNC server
fa la chiamata a 127.0.0.1 sulla porta 5500 stunnel risolve l’alias del DNS dinamico e fa una
chiamata alla porta 443 tcp dell’ip che voi avete impostato (una buona idea e’ settare l’ip del
dns dinamico su un indirizzo “fake” del tipo 127.0.1.2 fintanto che non siete davanti al pc che
deve essere “chiamato” dal vnc server, a quel punto cambiate l’ip dell’alias dns con l’ip reale
del client e aspettate che arriva la chiamata, (avendo prima attivato VNC client in listen mode
e stunnel) quando la chiamata e’ arrivata e siete connessi e’ bene ricambiare di nuovo l’ip
sull’alias dns per evitare di essere “bombardati” da ulteriori chiamate)
Considerazioni:
Ho fatto diverse prove e tutta questa procedura funziona davvero bene, solo una volta e’ successo che
alla prima “partenza” dell’operazione pianificata il processo rimanesse “appeso”, vi consiglio quindi, prima
di uscire di casa, di controllare dai log di stunnel (click col destro sull’icona di stunnel e poi click su log)
l’effettiva esecuzione della chiamata con la cadenza che avete impostato. Se cio’ non avviene basta
disabilitare e riattivare l’operazione pianificata che esegue il connect ai tempi stabiliti.
I log raffigurati qui sopra mostrano un tentativo di connessione da parte di vnc a stunnel ogni due minuti
(che e’ la mia impostazione), i vari “Failed to inizialize the remote connection” sono normali perche’ in
questo momento sul mio account di DNS dinamico l’ip impostato e’ 127.0.1.2 (cioe’ quello “fake”) e’
quindi giusto che la chiamata vada in time-out.
Nel caso abbiate problemi di connessione, puo’ esservi utile al fine di capirne il motivo aumentare il livello
di dettaglio dei log aggiungendo nel file stunnel.conf la riga:
debug = 7
perche’ le modifiche abbiano effetto dovete chiudere e riavviare stunnel.
Questo tipo di approccio e’ un pochino piu’ complesso del solo VNC, (anche se la generazione dei
certificati e tutte le altre operazioni vanno eseguite una sola volta, poi basta copiarsi i files da portare sul
client (certificati compresi) e il gioco e’ fatto) ma ha molti vantaggi, vi ricordate delle impostazioni sul lato
server di VNC, in merito ad Allow Loopback Connection e Allow only loppback connection? Questo fa si
che la porta 5900 tcp, usata dal vnc server per accettare chiamate sia in “ascolto” SOLO sull’interfaccia di
loopback (127.0.0.1) e non sulla scheda di rete vera e propria, rendendo cosi’ IMPOSSIBILE una
connessione dall’esterno, l’unica porta aperta sul vostro pc e’ la 443 tcp che pero’, non accetta
connessioni (client=yes), oltre al fatto che se anche dimenticate di cambiare l’ip sul vostro dns dinamico
e quell’ip viene poi assegnato a qualcun altro, quest’ultimo si vedra’ arrivare una chiamata su porta tcp
443 e non 5500 (e’ molto piu difficile capire che c’e’ un vnc che sta chiamando) e comunque senza
stunnel e il CERTIFICATO giusto (cioe’ lo stesso su cui abbiamo calcolato l’hash) non puo’ essere stabilita
una connessione. :)