Debian come server VPN: differenze tra le versioni
Riga 171: | Riga 171: | ||
dev tun | dev tun | ||
ca ca.crt | ca ca.crt | ||
cert | cert mioserver.crt | ||
key | key mioserver.key | ||
dh dh1024.pem | dh dh1024.pem | ||
server 172.17.0.0 255.255.255.0 | server 172.17.0.0 255.255.255.0 | ||
Riga 186: | Riga 186: | ||
client-to-client | client-to-client | ||
</pre> | </pre> | ||
L'ultima riga (<code>client-to-client</code>) è necessaria solo se vogliamo che i client VPN connessi al nostro server siano in grado di parlare tra di loro. | |||
<br/> | |||
Un esempio ben commentato di tutte le opzioni utilizzabili nella configurazione si trova nella documentazione di Debian: <code>/usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz</code>. |
Versione delle 10:46, 17 apr 2011
Versioni Compatibili Tutte le versioni supportate di Debian |
Introduzione
In molte aziende c'è la necessità di permettere al personale fuori ufficio la connessione ad alcuni servizi della LAN o ad alcune directory presenti sul server aziendale.
Un sistema semplice per permettere tutto questo è di creare una rete privata virtuale (VPN): una Virtual Private Network o VPN è una rete di telecomunicazioni privata instaurata tra soggetti che utilizzano un sistema di trasmissione pubblico e condiviso come per esempio Internet. Lo scopo delle reti VPN è di dare alle aziende le stesse possibilità delle linee private in affitto ad un costo inferiore sfruttando le reti condivise pubbliche. La sicurezza è garantita dal fatto che all'interno della rete pubblica viene creato un tunnel criptato in cui corre tutta la comunicazione.
Tra le possibili opzioni la scelta è ricaduta su OpenVPN, principalmente per la facilità di configurazione e per il supporto a diversi tipi di sistemi operativi o dispositivi; esistono infatti client OpenVPN per Microsoft Windows, per MacOSX, per Linux e per diversi dispositivi mobili quali iPhones e smartphones.
OpenVPN crea connessioni punto-punto ( client-server ) criptate in modo simile a Ipsec ma senza modificare il kernel, permenttendo il routing delle chiamate del client sulla rete del server.
In altre parole con un portatile equipaggiato ad esempio con Microsoft Windows ( il client ) è possibile collegarsi al server che ospita OpenVPN, il quale si occuperà poi del routing verso le macchine della rete remota, gestendo il tutto come se si fosse fisicamente collegati ad uno switch della rete remota.
Prerequisiti
Il server OpenVPN deve essere raggiungibile da internet; perciò è indispensabile avere uno dei seguenti requisiti:
- un indirizzo IP pubblico 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
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 direcctory 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="ferdy@organizzazione.com"
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 [ferdy@organizzazione.com]:
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.
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 ……………………+……………………………………..+……. ………………….+..+…………………………………………… …………………………….+………..+…………..+…………… ……………………………………………………….+………… ………………………………………………………………….. …………………………………+………..++*++*++*
Configurazione
Spostiamo i file generati nella directory corretta:
# cd keys # cp ca.crt /etc/openvpn # cp ca.key /etc/openvpn # cp mioserver.crt /etc/openvpn # cp mioserver.key /etc/openvpn # cp dh1024.pem /etc/openvpn
Spostiamoci nella root di OpenVPN:
# cd /etc/openvpn
e creiamo il file di configurazione principale:
# nano openvpn.conf
Il suo contenuto dovrà essere simile al seguente:
port 1194 proto udp dev tun ca ca.crt cert mioserver.crt key mioserver.key dh dh1024.pem server 172.17.0.0 255.255.255.0 ifconfig-pool-persist ipp.txt keepalive 10 120 comp-lzo user nobody group users persist-key persist-tun status openvpn-status.log verb 3 client-to-client
L'ultima riga (client-to-client
) è necessaria solo se vogliamo che i client VPN connessi al nostro server siano in grado di parlare tra di loro.
Un esempio ben commentato di tutte le opzioni utilizzabili nella configurazione si trova nella documentazione di Debian: /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz
.