Sei sulla pagina 1di 6

OpenVPN-nano-HOWTO

Come creare una vpn over udp col pacchetto OpenVPN

Come creare una vpn over udp col pacchetto OpenVPN

Introduzione
OpenVPN e’ un programmino per creare un tunnel fra due macchine che si basa sull’utilizzo del cosiddetto
TUN/TAP Universal Driver.

Perche’ usare OpenVPN?


E’ opensource 1 . Come puoi fidarti di qualcosa che non puoi vedere?
E’ multipiattaforma (Linux, Windows2000/XP, Solaris, MacOsX, *BSD).
E’ l’unico software opensource capace di supportare pienamente l’utilizzo di una PKI OpenSSL. Negozia la
chiave col protocollo TLS (asimmetrico) basato su certificati e vari protocolli per cifrare e autenticare la
connessione.
Puo’ usare sia tcp che udp. Ma tcp over tcp e’ Male(tm) 2 .
Un programma alternativo a openvpn e’ vtund, ma usa tcp e non ha tutte le feature di OpenVPN (ad esempio la
modalita’ TSL, il pregio di OpenVPN).

Modalita’ di utilizzo di OpenVPN


OpenVPN puo’ usare piu’ modalita’: puo’ essere usato semplicemente per creare un tunnel non criptato fra due
macchine, puo’ creare un tunnel con una chiave statica (pre-shared key) e infine puo’ creare un tunnel usando la
modalita’ TLS, quindi basato su certificati e autenticazione asimmetrica.
Iniziamo subito a lavorare con la modalita’ succulenta, quella basata su certificati X.509 + DiffieHellman
(scambio di chiavi).
In un sistema basato su certificati abbiamo bisogno di una CA (Certification Authority) che firmi i certificati
delle macchine coinvolte. In "Da real life" si usano servizi a pagamento (anche se qualcuno e’ gratuito, tipo
thawte.com o keysign; noi invece useremo me :-) ) Il mio host fara’ da CA.
Innanzitutto lo scambio di certificati e’ una modalita’ client-server, la mia macchina pubblica (ouz.ath.cx) e’
il server e voi siete i client; il tunnel, invece, una volta creato e’ peer2peer. Non avete pero’ bisogno di contattare
on-the-fly la mia macchina per firmarvi i certificati, ma basta che abbiate in locale il certificato della CA, un po’
come nei vostri browser avete gia’ inseriti di default i certificati delle CA famose.
I prerequisiti a livello di sistema sono il pacchetto OpenVPN 3 e aver compilato nel kernel (o come modulo) la
voce TUN/TAP Universal device. 4 Una cosa che puo’ farte molto comodo (ma serve a poco se avete IP statico)
e’ avere un hostname dinamico (tipo dyndns) e un client che aggiorna il DNS quando cambiate indirizzo.

1
OpenVPN-nano-HOWTO

Sia il client che il server devono creare una coppia di chiavi/certificati (i cert saranno .csr, che sta per
Certificate Signing Request, e che poi, firmati dalla CA, diventeranno .crt).
Voi dovrete fare solamente il lavoro della sezione CLIENT qui sotto, che pero’ richiama alcuni punti della
sezione SERVER, visto che sono identici (vedi la creazione delle chiavi e del .csr).

Nota: Ogni volta che creerete un .csr (dopo spiego come) dovrete fornire dei dati, tipicamente:

1. Country Name (2 letter code)


2. State or Province Name (full name)
3. Locality Name (eg, city)
4. Organization Name (eg, company)
5. Organizational Unit Name (eg, section)
6. Common Name (eg, fully qualified host name)
7. Email Address
8. A challenge password
9. An optional company name
Qualcuno di questi dati e’ da dare per forza, se no il sistema si rifiutera’ di crearvi il csr. Lasciate sempre
vuoto "A challenge password" a meno che la vostra CA la richieda (ma la mia non lo richiede).
L’ultima nota e’ che nella macchina che fa anche da CA dovrete dare alcune informazioni (non
necessariamente tutte) diverse da quelle che nella stessa macchina avete usato per creare il .csr della ca.
Non penso che ci sia uno "standard" nel dare le info (potete scrivere it, It o IT; italia oppure Italy...). (PS,
questo serve solo se volete fare da CA)

Implementazione del tutto (passo-passo)

Server

1. Diventare CA
Generare la chiave della CA:
openssl genrsa -out /etc/ssl/private/ca.key 1024

Generare il .csr della CA:


openssl req -new -key /etc/ssl/private/ca.key \
-out /etc/ssl/private/ca.csr

Autofirmarsi il .csr, generando il certificato della CA (ca.crt) che ogni host che trusta la CA (quindi tutte le
vostre macchine) deve avere
openssl x509 -req -days 365 -in /etc/ssl/private/ca.csr \
-signkey /etc/ssl/private/ca.key \
-out /etc/ssl/ca.crt

2
OpenVPN-nano-HOWTO

(forse bisognerebbe anche far puntare la variabile certificate di openssl.cnf a questo crt appena creato. Ma il
file openssl.cnf non l’ho ancora digerito)

2. Creare chiave e certificato e farli firmare alla CA:


openssl genrsa -out /etc/ssl/openvpn/server.key 1024
openssl req -new -key /etc/ssl/openvpn/server.key \
-out /etc/ssl/openvpn/10.0.0.1.csr
La CA firma un certificato ad un client in questo modo:
openssl x509 -req -days 365 -in 10.0.0.1.csr -CA /etc/ssl/ca.crt \
-CAkey /etc/ssl/private/ca.key -CAcreateserial \
-out /etc/ssl/openvpn/10.0.0.1.crt

dove 10.0.0.1 e’ l’IP del mio peer, ma posso chiamarli con i nomi che voglio.

openssl dhparam -out /etc/ssl/openvpn/dh1024.pem 1024

Creare il file.pem (i client non devono farlo): E qui OpenBSD dice:


[0430][root@carmela:~/test]# openssl dhparam -out dh1024.pem 1024
Generating DH parameters, 1024 bit long safe prime, generator 2
This is going to take a long time
......................................................+...........................
......................+...........................................................
.....................+........+......................+............................
........................+....................+...................+......+.........
.............+....................+...............+...........................+...
............+.......................+...................................+.........
.........................................................+........................
..........................................................................+.......
..................................................................................
......................................................+...........................
+............+...............+................................................+...
....................+...............+.............................................
.......................................................................+..........
+...................................................+....+........................
..+....+...............................+..........................................
....

Per la cronaca sono passati circa una decina di minuti (ad occhio).

3. Far partire il tunnel lato server:


openvpn --remote nomeclient.org --dev tun1 \
--ifconfig 10.0.0.1 10.0.0.2
--tls-server \
--dh /etc/ssl/openvpn/dh1024.pem \
--ca /etc/ssl/ca.crt \
--cert /etc/ssl/openvpn/server.crt \
--key /etc/ssl/openvpn/server.key \
--reneg-sec 60 \
--verb 5

Nota: L’opzione --remote e’ solo una “acl” per dire da quali macchine accetto connessioni. Per il client
e’ mandatory, invece il server puo’ anche evitarla, e a quel punto accetterebbe connessioni da qualsiasi
host (che pero’ poi deve autenticare asimmetricamente).

3
OpenVPN-nano-HOWTO

Client

1. Creare chiave e certificato (seguire il punto 2. del server, solo i primi due comandi, quelli marcati con [*])
2. Inviare il Certificate signing request alla CA (il file .csr). Basta che me lo mandiate in mail: ouz@people.it
3. Come il server firma il vostro .csr? Non vi riguarda :-), comunque se siete curiosi e’ la stessa cosa vista in 2
sulla sezione la Sezione Server.
4. La CA vi rimandera’ il vostro .crt
5. La CA vi mandera’ anche il suo ca.crt che voi dovete trustare, leggetelo (cat ca.crt) e “fidatevi” di quello che
c’e’ scritto ;-)
6. Ora potete fare partire il tunnel:
openvpn --remote nomeserver.org \
--dev tun1 \
--ifconfig 10.0.0.2 10.0.0.1 --tls-client \
--ca ca.crt --cert client.crt --key client.key \
--reneg-sec 60 --verb 5

7. Ora, finalmente, potrete testare la connettivita’ dalle vostra VPN con un semplice ping 10.0.0.1.

Sintassi dei vari comandi degne di nota

1. Creazione della chiave:


openssl genrsa -out /etc/ssl/openvpn/server.key 1024
Il nome della chiave puo’ essere qualsiasi cosa, nemmeno l’estensione e’ importante, ma consiglio di usare
il nome standard vostrohost.key

2. Creazione del csr


openssl req -new -key /etc/ssl/openvpn/server.key \
-out /etc/ssl/openvpn/10.0.0.1.csr
La chiave e’ quella che avete appena generato mentre al solito il nome del .csr non conta. Magari metteteli
nella stessa directory, ma NON nella stessa cartella. Le cartelle non esistono :-)

3. Tunnel

openvpn ➊ --remote nomeserver.org


➋ --dev tun1 \
➌ --ifconfig 10.0.0.2 10.0.0.1
➍ --tls-client \
➎ --ca ca.crt \

4
OpenVPN-nano-HOWTO

➏ --cert client.crt \
➐ --key client.key \
➑ --reneg-sec 60 \
➒ --verb 5

➊ --remote e’ l’hostname dell’altro peer, se farete un peer con me dovrete mettere ouz.ath.cx
➋ --dev e’ il vostro device di tunnelling, se non state gia’ usando dei device usate tun0 (potete vederlo
proprio come vedete ethX, solo che non ci gira arp :-D )
➌ --ifconfig come avrete gia’ capito vuole due argomenti: l’indirizzo ip del vostro lato del tunnel e
l’indirizzo del peer remoto
➎ --ca e’ il certificato della CA
➏ --cert e’ il vostro certificato (il .crt)
➐ --key e’ la vostra chiave
➑ --reneg-sec e’ il numero ehm... non ho sottomano la manpage :-)
➒ --verb e’ la “verbosita’ dell’output”, da 1 a 9 in ordine crescente

Per le altre opzioni guardate le relative pagine di manuale, anche se quella di openssl non la consiglio ai deboli di
cuore :-)

Windows (e in generali altri sistemi non *nix).


Non so ancora se bisogna oppure no installare anche un pacchetto per openssl oppure se e’ gia’ stato incluso
nella release di openvpn.
Non so come possa funzionare il device tun/tap, magari funziona gia’ di per se, magari no.
Oppena posso cerchero’ di darci un’occhiata io e pubblichero’ i risultati, nel frattempo se qualch buon anima ci
puo’ dare questi dettagli sarebbe molto gradito, e inseriro’ il suo contributo nel Nano-HOWTO :-) Suppongo
basti leggere la documentazione allegata alla distribuzione per windows.

Contatti
(Mancano)

Note
1. http://openvpn.sourceforge.net/donate.html :-)
2. Perche’ e’ male tcp-over-tcp: si veda http://sites.inka.de/sites/bigred/devel/tcp-tcp.html
3. http://openvpn.sourceforge.net/ , e, in particolare:
http://prdownloads.sourceforge.net/openvpn/openvpn-1.5.0.tar.gz (sorgenti)
http://prdownloads.sourceforge.net/openvpn/openvpn-1.5.0-install.exe (Win32)
4. Nei kernel 2.4: Network device support ---> abilitare Universal TUN/TAP device driver support

5
OpenVPN-nano-HOWTO

Nei kernel 2.6: Device Drivers ---> Networking support ---> abilitare sia Network device support che Universal
TUN/TAP device driver support
Per maggiori info su questo device consultate il file Documentation/networking/tuntap.txt nei sorgenti del
kernel.

Potrebbero piacerti anche