OpenVPN: la guida passo-passo per creare una rete virtuale privata e sicura

Una VPN (acronimo di Virtual Private Network) può essere considerata come un'estensione di una rete privata che si occupa di instaurare dei "collegamenti" tra due o più sistemi che debbono scambiarsi dati in modo sicuro, utilizzando una...

Una VPN (acronimo di Virtual Private Network) può essere considerata come un’estensione di una rete privata che si occupa di instaurare dei “collegamenti” tra due o più sistemi che debbono scambiarsi dati in modo sicuro, utilizzando una rete condivisa o comunque pubblica qual è Internet.
Una rete VPN permette di scambiare dati in modo simile a quanto accade in una connessione privata punto-punto. L’approccio utilizzato dà modo di rendere il computer remoto parte di una rete privata interna alla struttura aziendale creando un “tunnel” virtuale attraverso la rete Internet.
Per simulare un collegamento punto-punto, i dati vengono incapsulati con l’aggiunta di un’intestazione che fornisce le informazioni di routing e cifrati in modo da renderne possibile la lettura da parte di eventuali aggressori, sprovvisti delle necessarie chiavi crittografiche.

Tutti i sistemi Windows integrano il supporto per le reti VPN: lo stesso Windows XP può operare sia in modalità client che fungere da server VPN. Purtroppo, però, configurato in questa seconda modalità, Windows XP non accetta più di una connessione in ingresso.

OpenVPN è una valida soluzione opensource, disponibile per svariati sistemi operativi, che consente di implementare una VPN a costo zero senza quindi doversi necessariamente rivolgere a Windows Server.

Scaricare ed installare OpenVPN per Windows

L’ultima versione del pacchetto OpenVPN, contenente anche l’interfaccia grafica (GUI), in precedenza distribuita separatamente, è prelevabile – nella versione per Windows – facendo riferimento a questa pagina quindi cliccando sul link openvpn-2.1.1-install.exe.

OpenVPN può essere configurato, in Windows, come servizio di sistema: ciò significa che il programma verrà automaticamente avviato insieme con il sistema operativo. Il software può essere impostato affinché abiliti automaticamente il “tunnel” oppure effettui quest’operazione solamente su esplicita richiesta dell’utente.

Per avviare l’installazione di OpenVPN, è sufficiente fare doppio clic sul file eseguibile precedentemente scaricato. Nel caso in cui si utilizzi un “personal firewall”, si dovrà acconsentire alle comunicazioni messe in atto da OpenVPN. Alla comparsa del messaggio che informa circa il tentativo di installazione di un driver sconosciuto, si dovrà rispondere affermativamente accettandone il caricamento sul sistema in uso.

La procedura d’installazione di OpenVPN è chiara e semplice da condurre a termine.
L’unica riflessione dovrà essere effettuata alla comparsa della finestra per la scelta dei componenti da installare. Di solito, le impostazioni predefinite sono valide per la maggior parte di casi.

Nell’elenco che riportiamo di seguito, tuttavia, indichiamo quali componenti si rivelano indispensabili per un’installazione server e quali su una macchina client:

OpenVPN User-Space Components:              client   server
OpenVPN GUI:                                client
OpenVPN RSA Certificate Management Scripts:          server
OpenVPN Service:                                     server
OpenVPN File Associations:                  client   server
OpenSSL DLLs:                               client   server
OpenSSL Utilities:                          client   server
TAP Virtual Ethernet Adapter:               client   server
Add OpenVPN to PATH:                        client   server
Add Shortcuts to Start Menu:                client   server

Installando la GUI di OpenVPN (scelta consigliata), non appena si cliccherà sull’omonima icona aggiunta al desktop di Windows, nella traybar in basso a destra apparirà un’indicazione circa l’avvenuto avvio del programma.

Configurazione di OpenVPN

Accingiamoci a configurare OpenVPN con l’intento di creare il primo “tunnel” tra due sistemi Windows.
Innanzi tutto, accediamo al menù Start, Programmi, OpenVPN e verifichiamo le voci aggiunte dalla procedura d’installazione:

Utilities, Generate a static OpenVPN key consente di creare una chiave crittografica utilizzabile per generare i “tunnel”.
Shortcuts, OpenVPN configuration file directory permette di aprire direttamente la cartella c:\programmi\OpenVPN\config all’interno della quale sono conservate le configurazioni dell’applicazione.
Shortcuts, OpenVPN log file directory per accedere rapidamente alla directory c:\programmi\OpenVPN\log che contiene i file di log delle attività del programma.
Shortcuts, OpenVPN Sample Configuration Files apre la cartella contenente alcuni file di configurazione di esempio per OpenVPN.
OpenVPN GUI avvia l’interfaccia grafica di OpenVPN aggiungendo un’icona nella traybar di Windows (generalmente, in basso a destra).

Prima di poter fare in modo che due sistemi siano in grado di connettersi attraverso un “tunnel” OpenVPN, è necessario generare una chiave che sarà impiegata per crittografare tutte le comunicazioni. Questa chiave deve essere “installata” su entrambi i sistemi poiché, nel caso di una crittografia a chiave simmetrica, entrambi “gli interlocutori” useranno la medesima chiave.
Per procedere, è sufficiente cliccare sul link Generate a static OpenVPN key.

Il programma mostrerà una finestra a caratteri testuali invitando a premere un tasto qualsiasi per avviare la pocedura di generazione della chiave. OpenVPN produrrà una chiave crittografica a 2048 bit che sarà memorizzata nella sottocartella config con il nome di key.txt.

Per creare una prima connessione di test con OpenVPN, si inizi col copiare il file sample.ovpn dalla cartella contenente i file di esempio nella cartella config.
In Windows, l’estensione di default utilizzata per i file di configurazione di OpenVPN è .ovpn mentre in Linux è .conf.

.

In questo file è necessario, innanzi tutto, modificare alcuni parametri essenziali. In particolare, vanno indicati il nome o l’indirizzo IP dell’altro host coinvolto nella VPN, il nome del file contenente la chiave, l’indirizzo IP della VPN e l’host.
Si scelga quindi un indirizzo IP per ciascun host della VPN: ad esempio, 10.3.0.1, 10.3.0.2 e così via.

Ecco un esempio di configurazione:

Computer A (IP assegnato dal provider Internet: 87.18.100.100):
remote 87.20.100.100
ifconfig 10.3.0.1 255.255.255.0
secret key.txt

Computer B (IP assegnato dal provider Internet: 87.20.100.100):
remoto 87.18.100.100
ifconfig 10.3.0.2 255.255.255.0
secret key.txt

Com’è facile intuire, remote consente di definire il sistema che è situato dall’altra parte del “tunnel” mentre ifconfig permette di assegnare un IP ed una netmask all’interfaccia “tunnel” locale. La direttiva secret, invece, indica ad OpenVPN il file contenente la chiave statica precedentemente generata.
Gli IP 87.18.100.100 e 87.20.100.100 sono stati scelti in modo casuale. Si pensi a tali IP come agli indirizzi assegnati all’interfaccia di rete Ethernet “reale”.

In una comunicazione OpenVPN sono insomma quattro le interfacce di rete coinvolte: due sono “reali” (schede di rete Ethernet dei due rispettivi sistemi remoti) mentre le altre due sono “virtuali” (TUN/TAP).

Una volta configurato OpenVPN sul primo host, è possibile replicare la configurazione sul secondo sistema (modificando ovviamente gli IP; vedasi l’esempio di massima sopra riportato).

A questo punto, avviando OpenVPN GUI su entrambe le macchine remote e cliccando su Connect, l’icona della traybar dovrebbe visualizzare due computer di colore verde.
Il colore giallo viene mostrato ogniqualvolta OpenVPN tenti di stabilire una connessione.

Cliccando con il tasto destro sull’icona di OpenVPN GUI nella traybar quindi selezionando Show Status, si otterranno maggiori informazioni sulla connessione VPN appena avviata.

E’ possibile “testare” il corretto funzionamento del “tunnel” effettuando, ad esempio, un semplice ping dal prompt dei comandi. Esempio: ping 10.3.0.2 dall’host A verso il computer B.

OpenVPN ed i certificati X.509: più flessibilità e più sicurezza

Sinora abbiamo visto un semplice esempio di connessione VPN che faceva uso unicamente di una chiave crittografica condivisa. Un approccio simile non è la soluzione migliore. Ecco quindi che ci accingiamo a spiegare com’è possibile utilizzare i certificati X.509 con OpenVPN in modo da fidare su di un livello di sicurezza molto più elevato.
Il lavoro da compiere, in questo caso, è maggiore dal momento che è indispensabile seguire una più lunga serie di passaggi.

In prima battuta è necessario portarsi nella cartella \Programmi\OpenVPN\easy-rsa e creare, al suo interno una nuova directory: keys. In essa si dovranno copiare i file serial.start ed index.txt.start. I due file dovranno essere rinominati, rispettivamente, in serial ed index.txt.
Le chiavi ed i certificati generati da easy-rsa saranno memorizzati nella cartella appena creata.

Adesso, si dovrà fare doppio clic sul file batch init-config.bat.

Si clicchi, quindi, con il tasto destro del mouse sul file vars.bat e si scelga il comando Modifica: verrà così aperto il Blocco Note di Windows. Qui sono riportate alcune variabili precedute dal comando SET. Tale comando, ben noto a coloro che anni fa utilizzavano il DOS, consente di visualizzare, impostare o rimuovere le cosiddette “variabili di ambiente”, utilizzate dal sistema per attingere a delle informazioni di validità generale.
In questo file, generalmente, non si deve cambiare nulla a parte le ultime cinque righe. Esempio:

set KEY_COUNTRY=IT
set KEY_PROVINCE=IT
set KEY_CITY=Milano
set KEY_ORG=MiaAzienda
set KEY_EMAIL=miaemail@miaazienda.it

Dopo aver effettuato le modifiche del caso, è possibile salvare il file vars.bat.

A questo punto, è necessario aprire il prompt dei comandi, portarsi all’interno della cartella easy-rsa (cd\programmi\openvpn\easy-rsa) e digitare vars seguito dalla pressione del tasto Invio.

Creazione delle chiavi Diffie-Hellman

E’ il momento di produrre le chiavi che saranno utilizzate nelle comunicazioni cifrate. Grazie al protocollo Diffie-Hellman, due “interlocutori” possono scambiarsi una chiave segreta in modo sicuro. Nel caso della soluzione a chiave simmetrica utilizzata nel primo esempio di “tunnel” VPN, il file key.txt doveva essere necessariamente trasmesso all’altro computer attraverso un canale di comunicazione “sicuro”. Non certo attraverso la rete Internet. Grazie a Diffie-Hellman è possibile superare brillantemente l’ostacolo.
Uno speciale algoritmo garantisce infatti che solo gli interlocutori coinvolti nella comunicazione conoscano la chiave utilizzata per crittografare i “messaggi”.

Grazie al protocollo crittografico Diffie-Hellman, due interlocutori possono così accordarsi sull’utilizzo di una chiave condivisa e segreta utilizzando un canale di comunicazione pubblico e quindi da considerarsi potenzialmente insicuro (rete Internet).

Digitando al prompt dei comandi build-dh.bat, verrà generata una chiave Diffie-Hellman. L’operazione, per poter essere portata a completamento, può richiedere qualche minuto di attesa.

Il passo seguente consiste nell’avvio della procedura di creazione di un certificato che sarà impiegato per creare e firmare altri certificati e quindi autenticare altre macchine.

Per dare il via all’operazione, è sufficiente digitare build-ca al prompt dei comandi (sempre dalla cartella easy-rsa di OpenVPN).
A seconda delle informazioni specificate poco fa nel file vars.bat, potrebbe essere o meno necessario inserire i vari parametri richiesti.

Com’è possibile notare, avendo modificato secondo le esigenze il file vars.bat, possiamo accettare molte delle impostazioni di default premendo semplicemente il tasto Invio.

Non appena comparirà la dizione Common name, è bene indicare un nome facile da ricordare che servirà per la configurazione dei client VPN.

A conclusione di questa fase, la sottocartella keys si sarà popolata di altri file. Il certificato ca.crt risulterà necessario per tutte le macchine remote che vorranno collegarsi al server VPN mentre il file dh2048.pem, contenente la chiave Diffie-Hellman, deve essere disponibile solo sul server OpenVPN.
Il file ca.key deve essere mantenuto assolutamente segreto e non va inviato a nessuno.

Generazione delle chiavi server

Così come un passaporto è inutilizzabile se non vidimato dalle autorità locali, anche i certificati OpenVPN non possono essere usati se non siano stati preventivamente “autorizzati” dal gestore del server.

Si digiti, quindi, al prompt dei comandi quanto segue: build-key-server.bat Server. Il parametro Server indica il nome che sarà attribuito ai file prodotti.
Il file batch provvederà a produrre una chiave RSA privata da 2048 bit. Ancora una volta, i valori derivati dal file vars.bat vengono offerti come predefiniti: per accettarli è sufficiente premere il tasto Invio.
Alla comparsa della stringa Common name si dovrà aver cura di introdurre esattamente lo stesso nome specificato in precedenza.

Ogniqualvolta viene richiesta la enerazione di una coppia di chiavi (pubblica e privata) per il server VPN ricorrendo a build-key-server.bat, nel campo Common name va specificato l’esatto nome della macchina server sulla quale si intende usare il certificato.

Si possono anche inserire parametri aggiuntivi come una password che deve essere indicata ogniqualvolta si desideri usare il certificato. Nel caso in cui si decida di indicare una password, niente e nessuno potrà connettersi alla VPN senza l’uso della parola chiave specificata.
Alla comparsa del messaggio Sign the certificate si dovrà rispondere in modo affermativo digitando “y” e premendo Invio.
Analoga risposta va fornita alla visualizzazione del messaggio “1 out of 1 certificate requests certified, commit?“.

Nella sottocartella keys saranno così aggiunte anche le informazioni relative alle chiavi utilizzate dal server VPN.

In \Programmi\OpenVPN\config\keys vanno copiati i seguenti file, provenienti dalla cartella \Programmi\OpenVPN\easy-rsa\keys:
Server.crt
Server.key
ca.crt
dh1024.pem

Impostazione dei certificati client

Per la generazione delle chiavi da impiegare sui client, è necessario usare il comando build-key.bat client1 ove client1 è il nome del sistema client. Tale appellativo può essere scelto liberamente senza però utilizzare spazi o caratteri speciali. In corrispondenza della stringa Common name va introdotta, questa volta, la stringa client1 richiedendo successivamente, al solito, l’apposizione della firma.

I file client1.* che saranno creati nella directory keys potranno essere trasmessi al sistema client che deve potersi connettere al server VPN (in realtà, i file strettamente necessari sono client1.crt e client1.key).

Sul sistema client, è necessario accedere alla cartella \Programmi\OpenVPN\config\keys e copiarvi i seguenti file:
client1.crt
client1.key
ca.crt

Modifica dei file di configurazione lato server e client

Come ultimo passo, è necessario fare in modo che OpenVPN utilizzi i certificati X.509 e sappia dove trovarli.
Per far ciò, bisogna aprire il file di configurazione di OpenVPN (tasto destro sull’icona di OpenVPN GUI nella traybar, comando Edit config).

Per prima cosa è necessario commentare ossia “neutralizzare” la riga secret key.txt anteponendovi il carattere # (cancelletto).

In calce al file di configurazione, lato SERVER, vanno poi aggiunte le seguenti righe:
tls-server
dh keys/dh1024.pem
ca keys/ca.crt
cert keys/Server.crt
key keys/Server.key

In fondo al file di configurazione, lato CLIENT, vanno aggiunte le seguenti (avendo cura, sempre, di commentare la riga secret key.txt):
tls-client
dh keys/dh1024.pem
ca keys/ca.crt
cert keys/client1.crt
key keys/client1.key

Il comando build-key.bat potrà essere invocato per generare certificati “ad hoc” per ciascun macchina che dovrà connettersi al server VPN (es.: build-key.bat client2; build-key.bat client3,…).

A questo punto, dovrebbe essere possibile accedere alle risorse condivise del server e degli altri computer così come se i sistemi client remoti facessero parte della medesima rete locale. Cliccando, quindi, sull’icona Risorse di rete si dovrebbe ottenere, ad esempio, l’elenco delle risorse condivise ed accessibili.

Nel caso in cui il sistema server fosse collegato alla rete Internet mediante un router, sarà necessario effettuare il forwarding dei dati in transito sulla porta UDP 1194 verso l’IP locale associato alla macchina che fungerà da server VPN.
Va altresì sottolineato che nella modalità “bridged” (dev tap) sia il server che il client devono appartenere alla stessa sottorete (ad esempio, 192.168.x.x). Nel caso in cui fossero attestati su reti con IP differenti, dovrà essere necessariamente attivata la modalità “routed” di OpenVPN (dev tun).

In uno dei prossimi articoli evidenzieremo le possibilità più avanzate offerte da OpenVPN.

Ti consigliamo anche

Link copiato negli appunti