Overview

Installazione di una Virtual Private Network con OpenVPN e usando un X509 PKI (public key infrastruction using certificates and private keys)

Come riferimento verra' utilizzata una distribuzione debian Sarge (al momento la stable) e una Fedora Core 6

Installazione di OpenVPN

Il consiglio e' di installare il binario disponibile con la distribuzione Linux utlizzata. Nel nostro caso:

Debian apt-get install openvpn openssl lzo pam FC6 yum install install openvpn openssl lzo pam

Routed o Bridged?

Se non c'e' necessita' di usare IPX, risolvere i nomi con Windows senza installare un server Wins o avere necessariamente i pacchetti in broadcasts e' consigliato usare la modalita' routed, essendo piu' efficiente, scalabile e utilizza meno banda (cosa da non sottovalutare).

Per informazioni dettagliate su bridging vs routing si rimanda alle [http://openvpn.net/faq.html#bridge1 FAQ del sito ufficiale]

Determinare la subnet

Gli indirizzi IP sui quali funzionera' il nostro servizio di VPN dovranno essere scelti tra quelli disponibili per reti private definiti nella [http://www.ietf.org/rfc/rfc1918.txt RFC 1918]

   10.0.0.0        -   10.255.255.255  (10/8 prefix)
   172.16.0.0      -   172.31.255.255  (172.16/12 prefix)
   192.168.0.0     -   192.168.255.255 (192.168/16 prefix)

facendo attenzione a non utilizzare reti che possono andare in conflitto con le reti gia' esistenti nei sistemi con i quali interagira' la VPN

Generazione dei certificati

Il prossimo passo e' la generazione dei certificati da utilizzare sul server e sui clients.

Per fare cio' e semplificarci la vita ci avvaliamo degli script messi a disposizione di OpenVPN e residenti nella directory easy-rsa. Questa directory puo' trovarsi in varie locazioni in base al tipo di pacchetto, rpm, deb, tgz ecc. o se l'installazione e' avvenuta manualmente. Nell'ultimo caso la directory sara' dove e' stato scompattato il tarpalla.

Nel caso di pacchetti si trova in /usr/share/dov/openvpn/example/easy-rsa o giu' di li'.

Copiamo tutta la directory in /etc/openvpn/easy-rsa cosi' da evitare eventuali sovrascritture da upgrade.

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

Ora editiamo il file vars stanto attenti a riempire i vari parametri KEY_COUNTRY, KEY_PROVINCE, KEY_CITY, KEY_ORG e KEY_EMAIL

cd /etc/openvpn/easy-rsa/
vi vars

Inizializziamo la PKI

Attenzione: Su Debian ricordarsi di unzippare openssl.cnf.gz

. ./vars
./clean-all
./build-ca

con build-ca parte la generazione interattiva della certification authority, i parametri impostati su vars saranno presentati come valori di default.

Il campo piu' importante e' il Common Name che in questo caso impostiamo a "vacmf-OpenVPN-CA"

Ora generiamo la chiave per il server

./build-key-server server

Come prima alcuni parametri hanno valori di default e alla richiesta del <strong>Common Name</strong> specificare "server".

Durante la generazione della key verra' chiesto di inserire una password, se non la si inserisce non vierra' chiesta, altrimenti si. Rispondere "y" alle domande:

Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y

A questo punto per il server siamo a posto.

Andiamo ora a generare i certificati e le chiavi per i client. Usiamo ./build-key o build-key-pass (senza o con password)

./build-key client1
./build-key client2
...
./build-key clientn

Alla solita richiesta del Common Name specificheremo "client1", "client12", ..., "clientn".

Ora generiamo il Diffie Hellman

./build-dh

Generiamo la chiave direttamente con openvpn da configurare sia sui client che sul server con tls-auth che ci permette di ridurre i problemi dovuti a attacchi DOS e UDP flloding

openvpn --genkey --secret ta.key

Nella directory keys abbiamo ora i seguenti dati:

Filename       Needed By                  Purpose                      Secret
-----------------------------------------------------------------------------
ca.crt         server + all clients       Root CA certificate          NO
ca.key         key signing machine only   Root CA key                  YES
dh{n}.pem      server only                Diffie Hellman parameters    NO
server.crt     server only                Server Certificate           NO
server.key     server only                Server Key                   YES
client1.crt    client1 only               Client1 Certificate          NO
client1.key    client1 only               Client1 Key                  YES
client2.crt    client2 only               Client2 Certificate          NO
client2.key    client2 only               Client2 Key                  YES
client3.crt    client3 only               Client3 Certificate          NO
client3.key    client3 only               Client3 Key                  YES
clientn.crt    clientN only               Clientn Certificate          NO
clientn.key    clientn only               Clientn Key                  YES
-----------------------------------------------------------------------------

Configurazione del server e dei clients

Per la configurazione possiamo partire dai files di esempio allegati a OpenVPN e che si trovano nel tarpalla del sorgente o, per i pacchetto Debian in /usr/share/doc/openvpn/examples/sample-config-files/ o per FC6 in /usr/share/doc/openvpn-x.y/sample-config-files/. Prendiamo i files server.conf e client.conf. Il primo lo copiamo in /etc/openvpn e il secondo lo teniamo da parte per la configurazione del client. Una classica situazione:

# cat server.conf
local 192.168.0.1
port 1194
proto udp
dev tun
ca /etc/openvpn/easy-rsa/keys/ca.crt
cert /etc/openvpn/easy-rsa/keys/server.crt
key /etc/openvpn/easy-rsa/keys/server.key  # This file should be kept secret
dh /etc/openvpn/easy-rsa/keys/dh1024.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push route "192.168.0.0 255.255.255.0"
keepalive 10 120
tls-auth /etc/openvpn/easy-rsa/keys/ta.key 0 # This file is secret
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
log         openvpn.log
verb 3
management 127.0.0.1 1234

Per quanto riguarda i client, gli si devono trasferire le chiavi in totale sicurezza, se si inviano per email, cifrare il messaggio con PGP.

# cat clientn.conf
client
dev tun
proto udp
remote ip.de.ser.ver 1194
# se si omette la porta, nella riga precedente, usare "rport 1194"
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert clientn.crt
key clientn.key
tls-auth ta.key 1
comp-lzo
verb 3
mute 20

Avviare OpenVPN automaticamente

Controllo e gestione di OpenVPN

OpenVPN load balance

Riferimenti esterni

[http://openvpn.net OpenVPN]

[http://openvpn.net/howto.html OpenVPN 2.0 HOWTO]

 
openvpn.txt · Last modified: 2007/04/10 08:52 by 81.208.83.232
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki