Lo scambio di informazioni tra sedi remote rappresenta ormai una delle esigenze più sentite in ambito lavorativo. Questo vale sia per aziende di grandi dimensioni con budget ragguardevoli dedicati al settore IT, sia per piccole realtà che non possono sostenere i costi di un collegamento dedicato. Andando ancor più nel particolare immaginate la comodità di poter accedere alle informazioni del nostro computer in ufficio quando si siamo in giro per il mondo o, come purtroppo capita, quando siamo a casa malati.
Realizzare tutto questo a costi accessibili è possibile implementando una VPN. Per VPN, Virtual Private Network, si intende una rete privata virtuale creata utilizzando un mezzo di trasmissione pubblico, nella maggior parte dei casi identificabile con Internet. In parole povere dovremo creare un canale o tunnel virtuale che colleghi tra loro due reti, nel caso più semplice rappresentate da due computer raggiungibili tramite Internet. Ovviamente tale sistema deve garantirci un elevato grado di sicurezza. L'accesso deve essere consentito solo ad utenti autorizzati, i dati in transito sulla rete pubblica devono risultare cifrati, devono essere ridotti al minimo i rischi di furto d'identità digitale ed impedita l'alterazione delle informazioni trasmesse.
In un panorama che offre molte soluzioni commerciali spicca una soluzione open source (e gratuita): OpenVPN. Il software si compone di una parte server: un demone che resta in ascolto in attesa di connessioni, ed una parte client che, collegandosi, richiede l'instaurarsi della VPN. Entrambe le parti, prima di trasferire informazioni, operano i necessari controlli per verificare l'identità dell'interlocutore.
Questo primo articolo a carattere introduttivo, descriverà le caratteristiche generali di Open VPN, attualmente giunto alla versione 2.0.9, permettendovi di valutare se possa essere o meno una soluzione adatta alle vostre esigenze.
Semplicità e Flessibilità di OpenVPN
Rispetto ad altre implementazioni OpenVPN risulta una soluzione molto snella basata sullo standard SSL/TLS, protocollo ormai consolidato per garantire la sicurezza delle comunicazioni su Internet. Per questo si appoggia ad OpenSSL, altro noto tool open source, di cui abbiamo già parlato negli articoli dedicati ad Apache ed alle connessioni SSL. Differentemente da altre soluzioni non utilizza IPSec, ma genera un tunnel point-to-point TCP over UDP lavorando in user space.
Per ridurre l'occupazione di banda ed i tempi di risposta il software opera una compressione sui dati trasmessi utilizzando le librerie LZO, che costituiscono dunque un prerequisito come il già menzionato OpenSSL.
OpenVPN supporta svariati metodi di autenticazione dei client: nome utente e password, certificati digitali X509, smart card etc. permettendo di scalare da soluzioni semplici, in cui un server deve gestire un unico client, a soluzioni enterprise molto più complesse.
Il server OpenVPN può effettuare il push verso i client di opzioni DHCP come DNS ed indirizzi di server WINS.
La configurazione, nello stile Unix, avviene editando dei file di testo, uno per la parte server ed uno per la parte client. Questo, a mio modo di vedere, rappresenta un vantaggio e fornisce una maggiore consapevolezza e controllo sulle impostazioni adottate. Esistono, inoltre, numerosi e ben commentati esempi di configurazione che coprono le più disparate esigenze.
Un giro in rete vi permetterà di verificare che la documentazione reperibile è abbondante e non limitata al sito del progetto. Niente paura se avete problemi con le lingue straniere, potrete trovare numerosi documenti in lingua italiana.
OpenVPN è Multipiattaforma
Il software è disponibile per diverse piattaforme come Linux, Windows, MacOs X, permettendo, se necessario, l'interoperabilità tra i diversi sistemi. I sorgenti sono naturalmente prelevabili dall'area download del sito madre.
Per chi utilizza Linux e vuole evitare la compilazione del codice sorgente, sono facilmente reperibili i pacchetti precompilati per varie distribuzioni.
In ambito Windows si può downlodare dal sito del progetto l'installer .exe o, grazie al lavoro di Mathias Sundman, una GUI che rende più familiare la gestione del software a chi utilizza questo sistema. Il pacchetto installa simultanemente OpenVPN e l'interfaccia grafica.
Per gli affezionati della mela Angelo Laub e Dirk Theisen hanno sviluppato Tunnelblick, una GUI per OS X.
Sempre in termini di portabilità OpenVPN è progettato per funzionare con le interfacce di rete virtuali TUN/TAP disponibili su molti sistemi operativi.
Routing ed Ethernet Bridging
OpenVPN consente due modalità operative alternative Routing e Bridging.
La prima soluzione risulta preferibile sia in termini di efficienza che di semplicità di configurazione. Il client in questo caso utilizza la propria sottorete: vengono impostate sia lato client che lato gateway remoto, delle route che permettono la trasmissione dei pacchetti attraverso la VPN. Si noti che parlando di client non si fa riferimento solo al caso di una singola macchina, ma potrebbe trattarsi di un'intera sottorete.
Alcune circostanze impongono però il ricorso al Bridging. In tal caso l'interfaccia di rete fisica viene collegata via software con l'interfaccia virtuale utilizzata da OpenVPN creando appunto un ponte, bridge. Tale operazione consente di ottenere una rete virtuale su una singola sottorete. Alcuni esempi classici, riportati dalla documentazione ufficiale, in cui si rende necessario il bridging sono:
- la VPN deve gestire protocolli non IP come IPX;
- si utilizzano applicazioni che mandano comunicazioni in broadcast;
- si vuole permettere il browsing delle condivisioni di rete windows senza disporre di un server WINS o Samba.
Per ora ci fermiamo qui. Se le informazioni di questa breve panoramica hanno solleticato la vostra curiosità vi do appuntamento su queste pagine per cominciare a "sporcarci le mani" con l'installazione e la configurazione di OpenVPN.
Nella prima parte di questo articolo sono state brevemente illustrate le caratteristiche di OpenVPN, il software VPN open source e multipiattaforma. I sistemi supportati sono Linux, Solaris, OpenBSD, FreeBSD, NetBSD, Mac OS X, Windows. Per ognuno di essi è bene verificare la versione del kernel o del sistema operativo minimi richiesti.
Di seguito ci occuperemo dell'installazione immaginando di utilizzare per i nostri esperimenti due macchine una server, destinata ad accettare le connessioni, ed una client che ad essa si collegherà tramite il tunnel cifrato.
Installazione su Linux di OpenVPN
Come di consueto il sistema di riferimento per l'ambiente linux sarà Fedora, nello specifico la versione 8. L'installazione di OpenVPN è legata ad alcuni prerequisiti:
- openssl
- lzo
- pam
Di seguito seguiremo la più semplice installazione da pacchetti precompilati sfruttando YUM, il packet manager di Fedora. Il software si occuperà di verificare per noi che le dipendenze siano soddisfatte proponendoci, in caso negativo, l'installazione di eventuali altri pacchetti.
Procediamo con il consueto:
[root]# yum install openvpn
Al momento in cui viene scritto l'articolo il comando propone l'installazione della versione 2.1-0.19.rc4 dal repository fedora, proseguiamo l'installazione rispondendo affermativamente (anche per le eventuali dipendenze richieste). Se preferite la compilazione, dopo aver scompattato i sorgenti, dovrete usare, al solito, la sequenza:
[root]# ./configure [root]# make && make install
Ricordo che i sorgenti sono disponibili nell'area download del sito del progetto. La versione stabile attualmente prelevabile è 2.0.9, se volete potete però provare la 2.1_rc7. Prima di agire, è consigliabile leggere attentamente il file INSTALL di documentazione per eventuali particolari opzioni di configurazione.
Il comodo automatismo del packet manager ci ha nascosto le modifiche apportate al sistema, cerchiamo di investigare in proposito:
[root]# which openvpn /usr/sbin/openvpn
L'eseguibile, come era facile attendersi, è stato posizionato in /usr/sbin.
[root]# chkconfig --list | grep openvpn openvpn 0:off 1:off 2:off 3:off 4:off 5:off 6:off
Il precedente comando ci mostra come sia già tutto predisposto per lanciare OpenVPN all'avvio del sistema, basterà portare ad on i runlevel desiderati. Infine notiamo la creazione della directory /usr/share/openvpn/easy-rsa contenente alcune utility che sfrutteremo largamente più avanti. Il percorso di tale directory è legato al tipo di installazione ed alla distribuzione usata. Se non state operando su Fedora dovrete localizzarne la posizione. Per comodità e per evitare sovrascritture da parte di successivi aggiornamenti, creiamo la directory /etc/openvpn e copiamo easy-rsa al suo interno.
È importante notare come la procedura d'installazione seguita coincida per il server e per il client, saranno poi le impostazioni di configurazione a decidere il ruolo assunto.
Installazione su Windows
Per questa piattaforma è conveniente installare la GUI di Mathias Sundman (cui hanno collaborato altri programmatori) che rende più agevole l'utilizzo del software. Anziché scaricare l'installer dal sito del progetto conviene prelevare il pacchetto openvpn-2.0.9-gui-1.0.3-install.exe comprensivo dell'interfaccia grafica e del programma.
Il classico wizard ci guiderà nell'installazione del software che di default avviene in C:ProgrammiOpenVPN, di seguito faremo sempre riferimento a tale posizione. Quando ci verrà proposta la scelta dei componenti da installare aggiungiamo, spuntandolo, "My Certificate Wizard".
Aprendo dal pulsante Start il menù Programmi troveremo il nuovo sottomenu OpenVPN, mentre aprendo dal pannello di controllo l'elenco dei servizi troveremo OpenVPN Service che potrà essere lanciato automaticamente all'avvio del sistema.
Al termine ritroveremo nella directory scelta per l'installazione la cartella easy-rsa del tutto simile a quella sopra menzionata. Anche in questo caso la procedura d'installazione per server e client è la medesima.
Certification Authority (CA)
OpenVPN, come menzionato nell'articolo introduttivo, si basa sul protocollo SSL/TLS. Inizialmente dovremo organizzare una infrastruttura di chiavi pubbliche, PKI, dove il server e ciascuno dei client coinvolti siano in possesso di una chiave pubblica ed una chiave privata.
Procederemo in maniera analoga (non identica!!) a quanto descritto in Apache e SSL: creazione di certificati per connessioni cifrate, per chi non avesse chiari i concetti relativi alla crittografia asimmetrica può essere utile la lettura della guida Crittografia e PGP.
Cominceremo assumendo il ruolo di Autorità di Certificazione nei cui panni firmeremo i certificati del server e del/i client. Prima che si instauri il rapporto di fiducia tra client e server, OpenVPN prevede che entrambi controllino il certificato fornito dalla controparte. In altri termini il client verificherà il certificato del server ed il server quello del client. Perché la verifica abbia esito positivo ciascun certificato dovrà essere firmato dalla CA e validate le informazioni in esso contenute.
Per realizzare quanto descritto posizioniamoci sulla macchina che utilizzeremo come server e sfruttiamo gli script forniti da OpenVPN e memorizzati nella directory easy-rsa.
Chiave privata e certificato della CA su Linux
All'interno della directory /etc/openvpn/easy-rsa/2.0 individuiamo il file vars. Apriamolo con il nostro editor di testo preferito ed andiamo a modificare i parametri di default che si trovano alla fine:
export KEY_COUNTRY="US" export KEY_PROVINCE="CA" export KEY_CITY="SanFrancisco" export KEY_ORG="Fort-Funston" export KEY_EMAIL="me@myhost.mydomain"
Ad esempio cosí:
export KEY_COUNTRY="IT" export KEY_PROVINCE="Italy" export KEY_CITY="Roma" export KEY_ORG="HtmlIt" export KEY_EMAIL="info@html.it"
Ora lanciamo i primi script per inizializzare la PKI:
[root]# ./vars [root]# ./clean-all [root]# ./build-ca
Attenzione che il comando clean-all, il cui compito è fare pulizia, andrà ad eliminare una eventuale directory keys preesistente e contenete chiavi precedentemente generate.
L'ultimo script build-ca, richiamando openssl, permette di generare certificato e chiave privata della CA:
Generating a 1024 bit RSA private key ................................. Country Name (2 letter code) [IT]: State or Province Name (full name) [Italy]: Locality Name (eg, city) [Roma]: Organization Name (eg, company) [HtmlIt]: Organizational Unit Name (eg, section) []: Common Name (eg, your name or your server's hostname) [HtmlIt CA]:OpenVPN-CA Email Address [info@html.it]:
Si noti che l'output generato dal comando è stato accorciato per riportare solo gli elementi rilevanti. Avendo editato il file vars l'unico parametro da inserire nella procedura interattiva sarà il Common Name per cui è stato scelto arbitrariamente "OpenVPN-CA". Per gli altri, premendo il tasto invio, sarà mantenuto il valore preimpostato.
Alla fine troveremo nella directory /etc/openvpn/easy-rsa/2.0/keys i file ca.crt e ca.key rispettivamente certificato e chiave privata della CA.
Chiave privata e certificato della CA su Windows
Le differenze sono minime, in questo caso bisogna iniziare aprendo una console e spostandosi in C:ProgrammiOpenVPNeasy-rsa. Ora lanciamo il file batch:
> init-config
che provvederà a copiare i file di configurazione. Successivamente editiamo vars.bat come mostrato nel precedente paragrafo ed eseguiamo:
> vars > clean-all > build-ca
La procedura di generazione delle chiavi risulta perfettamente identica.
Certificato e chiave privata del server
Ora preoccupiamoci del server e pensiamo a generare le chiavi ad esso relative. Su Linux, sempre posizionati in /etc/openvpn/easy-rsa/2.0/, lanciamo il comando:
[root]# ./build-key-server server
Su Windows da C:ProgrammiOpenVPNeasy-rsa:
> build-key-server server
Lo script provvederà alla generazione delle chiavi in modo simile a quanto fatto per la CA, ma con alcune differenze. Anche in questo caso manteniamo i dati di default che ci vengono proposti tranne per il Common Name dove indicheremo il nome generico "server":
................. Organization Name (eg, company) [HtmlIt]: Organizational Unit Name (eg, section) []: Common Name (eg, your name or your server's hostname) [server]:server Email Address [info@html.it]:
Al termine della procedura ci verrà chiesto di confermare la firma del certificato con la chiave privata della CA, naturalmente rispondiamo affermativamente:
......................... Certificate is to be certified until Apr 16 16:40:53 2018 GMT (3650 days) Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified, commit? [y/n]y Write out database with 1 new entries Data Base Updated
A questo punto il nostro server è in possesso di un certificato nuovo fiammante valido 10 anni, salvo revoche. Nella solita directory keys tra i vari file troveremo server.crt e server.key.
Certificato e chiave privata dei client
Con un ultimo sforzo terminiamo la procedura di generazione delle chiavi lanciando il comando:
[root]# ./build-key client1
su Linux, e:
> build-key client1
su Windows. Proseguiamo come nel precedente paragrafo dove come Common Name inseriremo "client1 ". Accettiamo la firma del certificato ed otterremo i file client1.crt e client1.key rispettivamente certificato e chiave privata del client.
Se i client sono più di uno basterà ripetere la procedura cambiando il nome che li individua. Ovviamente in una situazione reale si potrebbero usare nomi maggiormente identificativi per le macchine che implementeranno la VPN.
I parametri Diffie-Hellman e la chiave statica
Generiamo ora i parametri Diffie-Hellman, usati per costruire la chiave di sessione, di default ricreata ogni ora. La procedura richiede un po' di tempo mentre, una volta implementata la VPN, la generazione della chiave sarà molto rapida. Su Linux digitiamo:
[root]# ./build-dh
mentre su Windows:
> build-dh
Il risultato sarà il file dh1024.pem, sempre posizionato nella directory keys.
Infine per completezza vediamo come sia possibile creare una chiave tls o statica:
[root]# openvpn --genkey --secret key.txt
Questa nelle configurazioni più semplici o nei test può essere usata da sola, ad esempio per implementare una VPN point-to-point, senza organizzare il sistema di PKI. Si osservi che su Windows la generazione della chiave statica può essere ottenuta selezionando dal menu dei Programmi il sottomenu OpenVPN e la voce Generate a static OpenVPNkey.
Prime conclusioni
A questo punto possiamo mettere un po' d'ordine creando una directory chiamata server all'interno della quale copieremo i file:
- server.crt
- server.key
- ca.crt
- key.txt
- dh1024.pem
e poi tante directory quanti sono i client, ad esempio "client1", in cui copieremo:
- client1.crt
- client1.key
- ca.crt
- key.txt
Ora per realizzare la nostra VPN non ci resta, si fa per dire, che trasferire i file e configurare server e client, ma questo sarà oggetto della prossima parte.
Avviamoci ora alla terza e ultima sezione relativa ad OpenVPN, il software VPN open source. Nelle precedenti sezioni ci eravamo occupati dell'installazione e della generazione di chiavi e certificati necessari alla creazione del tunnel cifrato. Al termine della procedura avevamo creato una directory server contenente i file relativi al server e tante directory client1, client2,.... contenenti i file relativi ai singoli client. Innanzitutto eseguiamo un backup di tali directory e dei file relativi alla CA per evitare che qualche inconveniente pregiudichi il lavoro fatto per creare la PKI (public key infrastructure).
Passiamo ora alla configurazione vera e propria del software, puntando in particolare l'attenzione sulla parte server. Nell'esempio che segue considereremo di implementare una routed VPN: il client utilizza la propria sottorete e vengono implementate delle regole di routing ad entrambe le estremità del canale in modo tale che i pacchetti possano transitarvi. Ricordo che l'alternativa è rappresentata dalla modalità ethernet bridging. Per maggiori dettagli vi consigliamo di leggere le sezioni di apertura o, per approfondimenti sul tema, la documentazione ufficiale.
Configurazione del server
Posizioniamoci sulla macchina che fungerà da server e copiamo il contenuto della directory server in /etc/openvpn. Se rammentate nelle precedenti sezioni avevamo appositamente predisposto tale directory; su Windows copieremo tutto in C:ProgrammiOpenVPNconfig.
Per nostra fortuna insieme al software vengono distribuiti alcuni file di configurazione esemplificativi ed altri utili script. Tali file risultano abbondantemente commentati, costituendo una buona base di partenza: dopo un'attenta lettura sarà facile personalizzarli per adattarli alle nostre esigenze. Nel caso della distribuzione Linux di riferimento, Fedora 8, i file saranno raggruppati in /usr/share/doc/openvpn-2.1/sample-config-files. Su Windows li trovate in C:ProgrammiOpenVPNsample-config, l'unica sostanziale differenza sarà che su tale sistema hanno estensione .ovpn mentre nei sistemi unix-like .conf.
Individuiamo dunque il file server.conf che si riferisce ad un server multi-client e copiamolo nella directory di configurazione. Ora apriamolo con il nostro editor di testi preferito e cominciamo ad intervenire sulle direttive. In alcuni casi sarà sufficiente decommentarle (se sono commentate), in altri sarà necessario personalizzarle. Come risulta subito evidente i caratteri utilizzati per i commenti sono ; o #.
Di seguito prenderemo in considerazione le più importanti direttive descrivendole brevemente:
local 192.168.0.1 port 1194 proto udp dev tun
La prima direttiva local, opzionale, specifica l'indirizzo IP su cui il demone OpenVPN sarà in ascolto. Nel caso sulla nostra macchina siano configurati più indirizzi potremo indicarne uno. La direttiva port specifica la porta di ascolto: 1194 è quella di default, potremmo evidentemente sceglierne una diversa. Con proto si specifica il protocollo utilizzato: solitamente è udp ma potremmo anche modificare la direttiva in tcp. Per indicare l'interfaccia di rete virtuale utilizziamo la direttiva dev. Specificando la parola chiave tun richiediamo la creazione di un tunnel ip routed mentre con tap richiederemmo l'ethernet bridging.
Le seguenti direttive specificano la posizione ed il nome dei file relativi al sistema PKI:
ca ca.crt cert server.crt key server.key dh dh1024.pem
Nell'ordine indichiamo il certificato della CA, il certificato del server, la chiave privata del server ed infine i parametri diffie-hellman. Tutti file che avevamo generato nel precedente articolo, salvato nella citata directory server ed infine copiato in /etc/openvpn. Se desideriamo posizionarli in maniera diversa dobbiamo specificare per ciascuno di essi l'esatto path.
Continuiamo la configurazione del file server.conf (o server.ovpn in Windows).
server 10.8.0.0 255.255.255.0
Con questa direttiva stabiliamo che la nostra macchina lavorerà in modalità server ed acquisirà il numero IP 10.8.0.1. Ai client verranno assegnati altri indirizzi della rete 10.8.0.0/24. Se la classe è già utilizzata nella nostra infrastruttura di rete possiamo, ovviamente, specificarne una diversa. Questa direttiva è tipica della modalità routed VPN, in caso si adotti il bridging andrà commentata ed al suo posto utilizzata server-bridge.
Con:
ifconfig-pool-persist ipp.txt
specifichiamo un file dove registrare la corrispondenza tra client e IP virtuali assegnati. Se per qualche motivo la VPN dovesse cadere, una volta ripristinata, potrà riassegnare gli stessi numeri.
La direttiva push ci permette di inviare ai client alcune opzioni ad esempio:
push "route 192.168.20.0 255.255.255.0" push "dhcp-option DNS 10.8.0.1" push "dhcp-option WINS 10.8.0.1" push "redirect-gateway"
Con la prima consentiamo ai client di raggiungere altre reti dietro al server, ovviamente per rendere bidirezionale la comunicazione tali reti dovranno poter a loro volta effettuare il routing verso il pool di indirizzi della VPN (10.8.0.0/24). La seconda e la terza consentono di inviare ai client alcune impostazioni tipiche delle reti Windows come server dns e wins.
L'ultima direttiva indica ai client di rindirizzare tutto il traffico attraverso il tunnel VPN, anche la navigazione su Internet ad esempio. Come si può notare queste direttive sono molto specifiche, lasciatele commentate se non ne avete bisogno, personalizzatele se intendete sfruttarle.
keep-alive 120 10
Con la precedente istruzione richiediamo la verifica ogni 10 secondi che il link sia attivo (in modo simile a un ping) se non si ottiene risposta per 120 secondi si assumerà che sia down.
Nelle precedenti sezioni avevamo visto come fosse possibile creare una chiave segreta tls che avevamo chiamato key.txt.
tls-auth key.txt 0
Con questa direttiva ne specifichiamo l'utilizzo: ovviamente la medesima chiave va copiata sia sul server sia sui client. Il parametro numerico finale dovrà essere 0 per il server e 1 per i client.
Con:
cipher BF-CBC
indichiamo l'algoritmo crittografico che dovrà essere usato, nell'esempio Blowfish, che è poi la scelta di default. Il medesimo algoritmo andrà specificato anche lato client.
Per ridurre i privilegi del demone OpenVPN dopo l'avvio eliminiamo il commento a:
user nobody group nobody
Naturalmente tali direttive non hanno ragione di esistere su un server Windows. Con la successiva istruzione attiviamo la compressione dei dati che transitano attraverso il tunnel VPN, tale opzione dovrà essere utilizzata anche sui client:
comp-lzo
Infine vediamo alcune impostazioni relative all'attività di log:
status openvpn-status.log log openvpn.log verb 4
La direttiva status specifica un file dove memorizzare le informazioni correnti sulle connessioni: viene riscritto ogni minuto. Per default i messaggi di log andrebbero al syslog, ma con la seconda direttiva è possibile richiedere la creazione di un file specifico openvpn.log. Se invece dell'istruzione log usiamo log-append all'avvio di OpenVPN il file non verrà troncato ed i messaggi verranno accodati. Per concludere verb identifica il livello di, passateci il termine, "verbosità" desiderato in una scala che va da 0 a 9.
Sostanzialmente il file di configurazione rimane il medesimo anche in ambiente Windows, con l'accortezza di mettere tra doppi apici eventuali path e raddoppiare le backslash.
Avvio del server OpenVPN
A questo punto non ci resta che avviare OpenVPN sul nostro server:
[root]# openvpn --config /etc/openvpn/server.conf
L'output, piuttosto lungo, fornisce una serie di messaggi che, armandosi di pazienza, conviene consultare per verificare la correttezza delle impostazioni almeno le prime volte ed in fase di sperimentazione. Il tutto dovrebbe terminare con "Initialization Sequence Completed". Attenzione se avete decommentato la direttiva log o log-append l'output non comparirà a video, ma nel relativo file openvpn.log. Ora lanciando il comando:
[root]# ifconfig
noteremo l'aggiunta dell'interfaccia di rete virtuale tun0 riportante inet addr:10.8.0.1. In /etc/openvpn troveremo, come richiesto in fase di configurazione, i file ipp.txt, openvpn-status.log ed eventualmente openvpn.log.
Nell'articolo dedicato all'installazione del software, avevamo rilevato come il pacchetto precompilato si occupasse di aggiungere OpenVPN all'elenco dei servizi e di creare in /etc/init.d lo script di avvio openvpn. Possiamo quindi automatizzare il lancio del demone nei runlevel desiderati ad esempio:
[root]# chkconfig openvpn --level 345 on
e gestirne automaticamente l'avvio, lo stop, la ripartenza:
[root]# service openvpn start
In questo caso la directory /etc/openvpn verrà letta alla ricerca di file con estensione .conf ed una volta individuati si avvierà un'istanza per ogni file di configurazione trovato.
Analogamente su Windows un click con il tasto destro sul file server.ovpn mostrerà nel menu contestuale la voce "Start OpenVPN on this config file". Alternativamente è possibile attivare il menu della GUI cliccando con il tasto destro sull'icona che OpenVPN ha creato nella system tray. Accedendo dal Pannello di controllo all'elenco dei servizi di Windows sarà possibile impostarne l'avvio automatico al prossimo riavvio. Il software effettuerà una scansione della directory C:ProgrammiOpenVPNconfig alla ricerca di file con estensione .ovpn.
Configurazione dei client
Spostiamoci ora su un client, copiamo la corrispondente directory con chiavi e certificati in /etc/openvpn, copiamo il file di esempio client.conf (o client.ovpn) e modifichiamolo, supportati dai commenti. È fondamentale che vi sia esatta corrispondenza con le scelte operate nella configurazione lato server ad esempio il tipo di interfaccia virtuale tun/tap, il protocollo udp/tcp, l'algoritmo di cifratura, la chiave tls e così via.
Soffermiamoci brevemente solo sulle direttive fondamentali e tipiche dei client, per le rimanenti valgono considerazioni analoghe a quelle fatte per il server.
client remote 11.22.33.44 1194
La prima stabilisce che la macchina si comporterà da client e quindi riceverà alcune configurazioni dal server a cui si collega. La seconda invece stabilisce a che indirizzo IP dovrà collegarsi il client e su che porta. Naturalmente se la VPN viene implementata attraverso Internet il numero IP dovrà corrispondere a quello pubblico mediante il quale sia possibile raggiungere il server.
Ricordo che le direttive ca, crt e key devono correttamente puntare ai corrispondenti file del client e se utilizzate tls-auth il parametro numerico deve essere posto a 1.
A questo punto possiamo avviare il client in maniera analoga a quanto fatto per il server. Se tutto funziona correttamente e la sequenza di inizializzazione è completa dovremmo essere in grado di pingare il server all'indirizzo 10.8.0.1.
Conclusioni su OpenVPN
In queste pagine abbiamo visto solo una parte delle possibilità offerte da OpenVPN un software veramente flessibile, per un panorama completo consiglio di consultare il sito del progetto. Vale la pena ribadire che, data la sua natura multipiattaforma, potremmo collegare server e client su cui girano sistemi operativi diversi. Può essere ad esempio un ottimo sistema per amministrare un server Windows dalla nostra linux box tramite VNC utilizzando però una connessione protetta o accedere ai documenti delle condivisioni tramite Samba.
È doveroso anche notare che la strutturazione delle reti risulta spesso complessa ed il lavoro di configurazione potrebbe coinvolgere tutte le altre apparecchiature di rete, come router e firewall, che stanno tra server e client. Talora la configurazione del software sarà solo la metà del lavoro. Niente paura in caso di bisogno provate a consultare l'abbondante documentazione ufficiale ed i file di esempio forniti insieme al software.