Prerequisiti

Il server OpenVPN deve essere raggiungibile da internet; perciò è indispensabile avere uno dei seguenti requisiti:

  • un indirizzo IP pubblico statico sul server OpenVPN
  • un indirizzo IP pubblico sul router, con impostato il corretto port-forward verso il server OpenVPN
  • un account DynDNS o simili con il quale sopperire alla mancanza di un indirizzo IP pubblico statico. Purtroppo se l’IP è privato (ad esempio la rete fastweb) non sarà possibile usufruirne.

Installazione

L’installazione è molto semplice e consta di pochissimi passaggi:

# aptitude update
# aptitude upgrade
# aptitude install openssl
# aptitude install openvpn

L’ultimo comando terminerà miseramente con un avvertimento simile a questo:

Setting up openvpn (2.0.9-8) …
Starting virtual private network daemon:...
failed!

Niente paura! Il demone non è partito perché non abbiamo ancora creato i file di configurazione necessari.

Generazione dei certificati

Prima di configurare OpenVPN abbiamo bisogno di generare i certificati che identificheranno il server e i client. Rechiamoci nella directory:

# cd /usr/share/doc/openvpn/examples/easy-rsa/2.0/

Nel caso in cui questo percorso non esistesse, possiamo localizzare la directory easy-rsa con i comandi:

# updatedb
# locate easy-rsa

Una volta trovata, copiamola nel path corretto:

# cp -R /usr/share/doc/openvpn/examples/easy-rsa /etc/openvpn
# cd /etc/openvpn/easy-rsa/2.0

Modifichiamo quindi il file vars:

# nano vars

verifichiamo che abbia il seguente contenuto e modifichiamo le informazioni secondo le nostre necessità:

export KEY_COUNTRY="IT"
export KEY_PROVINCE="LO"
export KEY_CITY="Lodi"
export KEY_ORG="Organizzazione"
export KEY_EMAIL="[email protected]"

Salviamo il file e procediamo inizializzando le chiavi:

# . ./vars

Quindi cancelliamo eventuali vecchi certificati:

# ./clean-all

Creiamo il nuovo ca (certificate authority):

# ./build-ca

Otterremo un output del genere, dove quasi tutti i valori saranno autopopolati, dato che abbiamo in precedenza modificato il file vars

mioserver:/etc/openvpn/easy-rsa/2.0# ./build-ca
Generating a 1024 bit RSA private key
…++++++
…………………….++++++
writing new private key to ‘ca.key’
—–
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.’, the field will be left blank.
—–
Country Name (2 letter code) [IT]:
State or Province Name (full name) [LO]:
Locality Name (eg, city) [Lodi]:
Organization Name (eg, company) [Organizzazione]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server’s hostname) []:mioserver
Email Address [[email protected]]:

L’unico valore che dovremo aggiungere a mano sarà il Common Name, dove andrà indicato il nome completo del server. 
A questo punto siamo pronti per generare il certificato per il server:

# ./build-key-server mioserver

che avrà un output simile al seguente:

mioserver:/etc/openvpn/easy-rsa/2.0# ./build-key-server mioserver
Generating a 1024 bit RSA private key
………++++++
…………………++++++
writing new private key to ‘server.key’
—–
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.’, the field will be left blank.
—–
Country Name (2 letter code) [IT]:
State or Province Name (full name) [LO]:
Locality Name (eg, city) [Lodi]:
Organization Name (eg, company) [Organizzazione]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server’s hostname) []:mioserver

Anche in questo caso l’unico valore che dovremo aggiungere a mano sarà il Common Name, dove andrà indicato il nome completo del server.

A questo punto possiamo generare il certificato per il client (questa operazione andrà ripetuta per ogni client che dovrà collegarsi alla VPN):

# ./build-key client1

Otterremo un output simile al precedente, in cui l’unico valore che dovremo aggiungere a mano sarà il Common Name, dove andrà indicato il nome completo del client (in questo caso client1). Alla richiesta di una password lasciamo il campo bianco, premendo semplicemente enter.
Con questa configurazione, ai client che si connetteranno alla VPN non sarà richiesta alcuna password e questo può essere visto come un buco di sicurezza nel caso in cui uno dei client venga ad esempio rubato. Se vogliamo obbligare i client ad inserire una password all’atto della connessione, occorre sostituire il comando ./build-key con ./build-key-pass.

Generiamo infine i parametri di Diffie-Hellman per il server:

# ./build-dh

che darà come output qualcosa di simile:

mioserver:/etc/openvpn/easy-rsa/2.0# ./build-dh
Generating DH parameters, 1024 bit long safe prime, generator 2
This is going to take a long time
……………………+……………………………………..+…….
………………….+..+……………………………………………
…………………………….+………..+…………..+……………
……………………………………………………….+…………
…………………………………………………………………..
…………………………………+………..++*++*++*