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. :)