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.

Lascia un commento

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.