Creazione di una rete vpn con openvpn
“Una Virtual Private Network o VPN è una rete privata instaurata tra soggetti che utilizzano un sistema di trasmissione pubblico e condiviso come per esempio Internet. Lo scopo delle reti vpn è di dare alle aziende le stesse possibilità delle linee private in affitto ad un costo inferiore sfruttando le reti condivise pubbliche (wikipedia)”.
Le reti vpn sono un ottimo strumento per connettere reti lan tramite internet in maniera totalmente sicura ed economica inoltre sono estramementi semplici da realizzare, gli scenari che offre una vpn sono molteplici, eccone alcuni:
- Collegare reti lan distanti tra loro
- Connettere un client mobile alla rete aziendale o casalinga
- Creare una lan virtuale con gli amici tramite internet per giocare con l’xbox 360 scavalcando il servizio xbox-live
Il software che ho utilizzeremo oggi è OpenVPN basato sulla condivisione di una chiave segreta (crittografia) fra le postazioni della VPN. La crittografia (simmetrica) verrà realizzata con l’algoritmo blowfish.Per quanto riguarda l’installazione,la parte server e client mi sono basato su sistemi linux (in particolare sulla distro di Ubuntu ma anche su distro derivanti da Red Hat).
Premessa
La prima cosa da fare è verificare in
/dev
la presenza della directory net
contenente il device virtuale tun
. Se tutto ciò non ci fosse, crearlo con:
mkdir /dev/net && mknod /dev/net/tun c 10 200
caricare il modulo e far sì che al boot venga caricato:
modprobe tun echo "tun" >> /etc/modules
Infine abilitare il forwarding:
echo 1 > /proc/sys/net/ipv4/ip_forward
Installazione
Installiamo openvpn a seconda della distro.Un consiglio particolare è quello di installare openvpn dai sorgenti che sono reperibili sul sito http://www.openvpn.net/, dove vengono messi a disposizione anche pacchetti RPM.
Dopo aver compilato i sorgenti e quindi installato il software, dobbiamo creare prima di tutto la chiave privata per l’inizializzazione del tunnel.
openvpn --genkey --secret static.key
Creare una PKI
Adesso, avvalendoci di SSL/TLS, configureremo un CA (Certificate Authority) che servirà a firmare i certificati degli host e a rendere disponibile il proprio; creeremo le rispettive chiavi (una anche per il CA stesso) facendo in modo che ognuno detenga una chiave e un certificato firmato. Infine, per lo scambio sicuro di tali dati, creeremo un Diffie-Hellman.Installiamo openssl:
apt-get install openssl
Openvpn dispone di vari script pronti all’uso che facilitano il compito.Per prima cosa,cercare la directory easy-rsa/2.0 e copiatela in /etc/openvpn
cp /usr/share/doc/openvpn/examples/easy-rsa/2.0/ /etc/openvpn/easy-rsa/2.0
andate nella directory 2.0
cd /etc/openvpn/easy-rsa/2.0
Aprite il file vars e assegnate i vostri valori alle seguenti variabili.Non lasciate righe vuote e usate NA nel caso non vogliate assegnare un valore:
export KEY_SIZE=2048 export KEY_COUNTRY=IT export KEY_PROVINCE=RM export KEY_CITY=Roma export KEY_ORG=Ufficio export KEY_MAIL=test@test.it
Eseguite ora questi comandi esattamente come mostrato e seguite i loro prompt.Dopo il primo punto in . ./vars c’è uno spazio.
. ./vars ./clean-all ./build-ca
Quando ci verrà chiesto un Common Name,usate qualcosa di descrittivo,come vpn-ca.Eseguite quindi questo comando per creare il certificato per il server,usando come nome quello del vostro server.
./build-key-server pippo
Usate il nome del server completo di dominio,come pippo.pluto.it, per il Common Name.Rispontete yes a “Sign the certificate? [y/n]” e a “1 out of 1 certificate requests certified,commit? [y/n]”.
Ora create le chiavi Uniche per tutti i clienti.Questo esempio genera una coppia di chiavi senza password per la macchina topolino.
./build-key topolino
Se volete proteggere con una password la chiave del client usate
./build-key-pass topolino
La password verrà chiesta all’apertura di ogni nuova connessione.Usate il nome del host come Common Name.Ora generate i parametri crittografati Diffie-Hellman:
./build-dh
Nella directory delle vostre chiavi dovreste a questo punto avere i seguenti file:
01.pem 02.pem ca.cert ca.key dh2048.pem index.txt index.txt.attr index.txt.attr.old index.txt.old serial serial.old topolino.crt topolino.csr topolino.key static.key pippo.crt pippo.csr
pippo.key
Per evitare inutili confusioni,usate una directory differente,magari su una macchina separata,per creare le chiavi.Create una nuova directory per le chiavi e spostateci le nuove chiavi e i nuovi certificati del server.Questi comandi vanno tutti eseguite da /etc/openvpn/easy-rsa/2.0:
mkdir -m 0700 /etc/openvpn/keys cp ca.crt ../../keys mv dh2048.pem static.key pippo.crt pippo.key ../../keys
topolino.crt,topolino.key e copie di static.key e di ca.crt vanno spostate nell’appropriata directory su topolino.Dovete creare una coppia di chiavi per ciascun client che deve accedere alla VPN.
Configurazione OpenVPN
Una volta creata la chiave segreta e i certificati dobbiamo creare il file di configurazione per il server (/etc/openvpn/server.conf).
dev tap tls-auth /etc/openvpn/keys/static.key ping 10 verb 3 mute 10 tls-server comp-lzo
#Certificati digitali #Certificate Authority o root certificate ca /etc/openvpn/keys/ca.crt #Certificato server cert /etc/openvpn/keys/pippo.crt #Chiave server key /etc/openvpn/keys/pippo.key #Diffie hellman parameters dh /etc/openvpn/keys/dh2048.pem ifconfig 10.0.1.1 255.255.255.252 proto tcp-server lport 443 log /var/log/openvpn.log
La configurazione del gateway VPN (client) è identica a quella vista precedentemente. Ovviamente dobbiamo copiare la chiave segreta e i certificati e posizionarli nella directory /etc/openvpn/keys/ e creare il file di configurazione (/etc/openvpn/server.conf), che deve essere di questo tipo:
remote pippo.pluto.it rport 443 proto tcp-client dev tap tls-client ping 10 verb 3 comp-lzo mute 10 key "/etc/openvpn/certificati/topolino.key" ca "/etc/openvpn/certificati/ca.crt" cert "/etc/openvpn/certificati/topolino.crt" ifconfig 10.0.1.2 255.255.255.252 log /var/log/openvpn.log
Una volta compilati i file, lanciamo openvpn su entrambe le macchine.
/etc/init.d/openvpn start
Infine controllate nel file log di openvpn eventuali errori.Se tutto andrà nel verso giusto dalla vostra macchina client (10.0.1.2 sull’interfaccia tap0) pingherete la macchina server (10.0.1.1)
Conclusione
Questa è solo una configurazione personalizzata di openvpn,naturalmente potete ampliare o semplificare tale configurazione.Ho tralasciato un pò la parte networking sulla configurazione dell’interfacce ma da come si vede sono abbastanza semplici da “fare”.Grazie a questa vpn,attraverso il protocollo tcp sulla porta 443,non saremmo “spiati” e/o potremmo “sorpassare” eventuali firewall in una rete aziendale e raggiungere tranquillamente casa nostra.