====== 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 Common Name 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", "client2", ..., "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]