OpenVPN su Hardy Heron (Ubuntu 8.04)

31 08 2008

Volendo creare una VPN che mi permettesse di connettermi dall’ufficio a casa, ho provato varie alternative, tutte egualmente utili per certi versi. PPTP ad esempio è buona per connettersi con client Windows, ma non garantisce praticamente nulla in sicurezza ed è molto scomoda da gestire via Linux (server o client). Dopo altre peregrinazioni sono giunto alla ben (almeno da me) conosciuta OpenVPN che qualche tempo fa non mi ispirò tanta fiducia a causa dell’assenza di un client già integrato in Windows.

Per farla breve, ho riscoperto questo meraviglioso server, ho trovato che alla fine l’installazione del client su Windows non è così complessa (l’unica cosa che mi secca sono i privilegi di amministratore che devi avere, ma a quanto pare si può porre rimedio anche a quelli). Ho così installato il server sulla mia Hardy Heron e vado a trascrivervi come al solito i passaggi salienti per la configurazione.

Prima di tutto si deve installare il pacchetto OpenVPN:

sudo aptitude install openvpn

Poi si creano manualmente due directory che serviranno più in la a contenere files importanti (sempre perchè sono preciso e ordinato):

sudo mkdir /etc/openvpn/configs && sudo mkdir /etc/openvpn/keys

A questo punto bisogna creare il file /etc/openvpn/server.conf che stabilisce i parametri più importanti che il server avrà. Ovviamente dovete modificare alcuni parametri: io ho cambiato la porta per ragioni personali, anche se in questo file lascio quella assegnata da IANA al protocollo, ovvero la 1194.  Modificate anche la riga server e le due seguenti perchè corrspondano alla vostra classe di IP della LAN privata e alla relativa maschera di sottorete (se non sapete di cosa parlo non vi dovrebbe neanche servire una VPN).

port 1194 
local 192.168.2.50 
proto udp 
dev tun0 
ca keys/ca.crt 
cert keys/server.crt 
key keys/server.key 
dh keys/dh1024.pem 
server 192.168.100.0 255.255.255.0 
push "route 192.168.0.0 255.255.0.0" 
push "redirect-gateway def1" 
push "dhcp-option DNS 192.168.100.1" 
client-to-client 
keepalive 10 600 
cipher AES-128-CBC 
comp-lzo 
user nobody 
group nogroup 
persist-key 
persist-tun 
status /var/log/openvpn-status.log 
log openvpn 
verb 3 
mute 20

La riga local deve corrispondere all’indirizzo IP interno del vostro server (nel mio caso 2.50), il server OpenVPN visto dai client avrà indirizzo 192.168.100.1 e il range di IP assegnabili sarà 192.168.100.0/24.

Ora bisogna editare con il vostro Emacs preferito il file /usr/share/doc/openvpn/examples/easy-rsa/2.0/vars, andando a cambiare alla fine del file i valori e mettendone alcuni che corrispondano alla nostra localizzazione geografice, ecc…
Consiglio di lasciare gli altri valori così come sono se non volete ritrovarvi a passare la notte a fare troubleshooting.

A questo punto conviene diventare root e lanciare nella directory precedente (/usr/share/doc/openvpn/examples/easy-rsa/2.0/) i seguenti comandi:

source ./vars
./clean-all
./build-ca
./build-key-server server
./build-key --pass vostronick
./build-dh

E’ ovvio che dovrete sostituire a vostronick un nome che poi verrà usato per la connessione. L’ho anche messo in corsivo…
Consiglio anche qui di lasciare tutte le impostazioni di default eccetto che per il Common Name che va impostato come vostronick…
Spostiamoci nella cartella keys e lanciamo un bel

cp ca.key ca.crt dh1024.pem server.key server.crt /etc/openvpn/keys
cp vostronick.crt vostronick.key ca.crt /etc/openvpn/configs/

Tiriamo un sospiro e andiamo avanti (mi sto stancando molto a scrivere questa guida).
Ora bisogna creare il file di configurazione (/etc/openvpn/vostronick.conf)  che andrà utilizzato sul/sui client; come per il server le impostazioni sono molte e il contenuto può variare per voi. Vi incollo il mio leggermente modificato. Cambiate ciò che vi sembra opportuno:

client
 proto udp
 dev tun
 remote vostroindirizzoip 1194
 persist-key
 persist-tun
 ca ca.crt
 cert vostronick.crt
 key vostronick.key
 cipher AES-128-CBC
 comp-lzo
 verb 3
 mute 20

Per quanto riguarda l’indirizzo IP che dovrà essere ovviamente statico, consiglio servizi come No-IP e simili.

adesso diamo i permessi di lettura al file vostronick.key e copiamolo (via scp, USB o altri mezzi sicuri) sul client con il file .conf e il .crt, oltre al file ca.crt ovviamente.

Andiamo ancora in /etc/openvpn e lanciamo il comando:

openvpn --genkey --secret ta.key

che genererà la chiave del server.

Siamo quasi alla fine, ricordiamoci di aprire sul nostro router la porta 1194 UDP, di abilitare l’IP forwardingo con

echo 1 > /proc/sys/net/ipv4/ip_forward

e facciamo partire il servizio con un bel

sudo /etc/init.d/openvpn start

Ora se tutto va bene vi potrete connettere alla vostra VPN casalinga installando un appropriato client sul vostro PC (io uso kvpnc anche su Gnome e questo su Windows) importando certificato, chiave e file di configurazione (tutto nella stessa directory).

Come al solito se qualcosa non dovesse andare, commentate e vedrò di rispondervi. Se lo chiederete inoltre, potrò ampliare il post spiegando come associare il servizio di VPN ad un meccanismo di sicurezza di tipo port-knocking per far si che il vostro server sia completamente invisibile dall’esterno.


Azioni

Informazione

3 risposte

7 09 2008
Port Knocking, OpenVPN e IPTables « Works in my mind…

[...] Works in my mind… Pluralitas non est ponenda sine necessitate « OpenVPN su Gutsy Gibbon (Ubuntu 8.04) [...]

3 06 2009
Jo

cp ca.key ca.crt dh1024.pem server.key server.crt /etc/openvpn/keys
cp: impossibile fare stat di `dh1024.pem’: No such file or directory

Sai x’?

Grazie per l’howto in ogni caso :-)

18 07 2009
Manuel

Ciao, ho eseguito tutti i passaggi (abbastanza facile grazie al tuo howto) solo che quando gli dico /etc/init.d/openvpn start mi da questo errore…

* Starting virtual private network daemon(s)… * Autostarting VPN ‘manuel’ [fail]

????? non capisco….. Grazie in anticipo

Lascia un commento