Condividi su Facebook
OpenVPN e la sua configurazione
Scritto da: Monska il 19/10/2009 alle 11:26
Tag: Internet, Informatica, Reti.Visto 872 volte.


Logo OpenVPN

OpenVPN è un software che permette la creazione di una Virtual Private Network attraverso un canale pubblico.
L'idea è quella di riuscire ad instaurare tra più soggetti un canale privato attraverso un canale pubblico condiviso.
Lo sviluppo di questo tipologia di software nasce per abbattere i costi aziendali dell'acquisto di canali di comunicazione privati tra due soggetti geograficamente distanti.
L'impiego però di tale tecnologia, anche in ambito privato, risulta spesso utile.
Il risultato finale che si vuole raggiungere è quello di instaurare una LAN, quindi un canale di comunicazione protetto, tra più soggetti, geograficamente distanti.

Lo schema proposto qui sotto sicuramente crea una idea generale di quello che si vuole creare:

Schema VPN

dove le linee arancio tratteggiate rappresento il canale di comunicazione VPN.

Il problema che si deve necessariamente risolvere è rendere tale canale privato, autenticato e cifrato. È necessario poichè quello che vogliamo compiere è mandare dei dati, anche sensibili, su di un canale di comunicazione sicuro, il quale necessariamente passa attraverso un canale pubblico.
Nel nostro caso sfrutteremo come canale di comunicazione pubblico la rete Internet, sulla quale instaureremo il canale privato.

In questa guida vengono spiegati tutti i passi da svolgere per la generazione di chiavi e certificati e la scrittura dei file di configurazione sia per la parte server, che per la parte client.

ATTENZIONE: le path utilizzate in questo file potrebbero subire variazioni in base alle distribuzioni del sistema GNU/Linux utilizzato o in base alla versione di OpenVPN.

I file necessari
Per prima cosa occupiamoci di creare tutti i file che sono necessari per rendere il canale sicuro. Per farlo dobbiamo per prima cosa generare un certificato.
Per farlo OpenVPN ci mette a disposizione un tool easy-rsa, che ci semplifica notevolmente il lavoro da svolgere.
Per prima cosa spostiamoci nella cartella di easy-rsa che in generale si trova in:

Code:

/usr/share/openvpn/easy-rsa/2.0/

Qui digitiamo i seguenti comandi

Code:
source ./vars
./clean-all
./build-ca

ATTENZIONE: controllate che il file vars sia configurato secondo le vostre preferenze; in generale le opzioni predefinite vanno bene.

Al comando build-ca dovrete seguire le istruzioni per il completamento dei campi del certificato.
Dopo aver completato tutti i campi, se avete mantenuto le opzioni di default di vars dovrebbe essere apparsa la cartella keys dentro la quale troverete il certificato.
Ma prima di occuparci della cartella keys generiamo anche gli altri file.

Generiamo la chiave e il certificato per il server con

Code:

./build-key-server server

e la chiavi e il certificato del client con

Code:
./build-key client1

ATTENZIONE: se volete utilizzare più chiavi per diversi client potete ripetere il comando build-key client{n} tutte le volte che vi sarà necessario. In generale è consigliabile utilizzare una chiave differente per ogni utente.

L'ultimo file che ci occorre creare è il file per i parametri Diffie-Hellman attraverso il comando

Code:

./build-dh

Tutti i file che sono stati creati si trovano nella directory keys.
Non ci resta ora che dividerli tra i file necessari al client e quelli per il server.
Eccovi una tabella riassuntiva dei file con il relativo ambito:

FILE PER IL SERVER

Code:

ca.crt
dh{n}.pem
server.crt
server.key

FILE PER IL CLIENT

Code:

ca.crt
client{n}.crt
client{n}.key

I file di configurazione
Quello che manca sono i file di configurazione di OpenVPN.
Il software dovrebbe aver generato una cartella nella quale vengono in genere inseriti i file di configurazione:

Code:

/etc/openvpn/

Occupiamoci prima del server.
Copiamo dalla cartella

Code:

/usr/share/openvpn/easy-rsa/2.0/keys/

i file

Code:
ca.crt
dh{n}.pem
server.crt
server.key

nella cartella

Code:
/etc/openvpn/

Ora occupiamoci del vero e proprio file di configurazione.
Possiamo partire dal file di esempio offerto da OpenVPN che si trova in

Code:

/usr/share/doc/openvpn-2.1/sample-config-files/server.conf

che copiamo in

Code:
/etc/openvpn/

ed iniziamo a modificare a nostro piacimento.
Qui vi proponiamo un file di configurazione da noi editato:

Code:
port 1194 /* Porta di ascolto */
proto udp /* Protocollo usato */
dev tun /* Interfaccia */
ca ca.crt /* Certificato */
key server.key /* Chiave del server */
cert server.crt /* Certificato del server */
dh dh1024.pem /* Diffie-Hellman */
server 10.0.0.0 255.255.255.0 /* Network */
ifconfig 10.0.0.1 255.255.255.0 /* Ip del server */
client-to-client /* La rete permette ai client di vedersi tra loro */
duplicate-cn /* Lo stesso certificato può essere utilizzato da più client */
keepalive 10 120
comp-lzo /* Compressione lzo */
user nobody /* Utente con cui girerà openvpn */
group nobody /* Gruppo con cui girerà openvpn */
persist-key
persist-tun
status openvpn-status.log
verb 3

Ecco il link per scaricarlo.

Una volta che avrete scritto una configurazione che vi soddisfa possiamo far partire il server con il comando:

Code:

openvpn --cd /etc/openvpn/ --config server.conf --daemon

e con

Code:
ps aux | grep openvpn

controlliamo che effettivamente tutto funzioni e che il processo sia attivo.

Passiamo ora al client.
Come per il server è consigliabile utilizzare la cartella predefinita

Code:

/etc/openvpn/

per salvare i nostri file.
CONSIGLIO: se utilizzate diverse VPN in base alle occasioni, consigliamo di creare all'interno di /etc/openvpn/ delle cartelle con un nome simbolico e rappresentativo, in modo da utilizzare cartelle diverse per salvare file e configurazioni di VPN differenti.

Copiamo dalla cartella

Code:

/usr/share/openvpn/easy-rsa/2.0/keys/

i file

Code:
ca.crt
client{n}.crt
client{n}.key

nella cartella

Code:
/etc/openvpn/<nomeVPN>/

Passiamo ora al file di configurazione.
Come per il server, esiste un file di esempio dal quale possiamo partire

Code:

/usr/share/doc/openvpn-2.1/sample-config-files/client.conf

che copiamo in

Code:
/etc/openvpn/<nomeVPN>/

Modifichiamo il file in base alle nostre esigenze.
Proponiamo qui un file di configurazione da noi editato che può essere utilizzato con un server che utilizza il file di configurazione illustrato precedentemente.

Code:
client /* Identifica il client */
dev tun /* Interfaccia */
proto udp /* Protocollo */
remote <DNS del server> 1194 /* Indirizzo del server VPN */
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt /* Certificato */
cert client.crt /* Certificato del client */
key client.key /* Chiave del client */
comp-lzo /* Compressione lzo */
verb 3

Ecco il link per scaricarlo.

Conclusioni
Abbiamo voluto scrivere questa guida poichè in rete, cercando un metodo per configurare decentemente OpenVPN, sia lato server che lato client, vi appaiono una infinità di link, che spesso presentano solo una parte del problema (o client o server). Inoltre, noi non abbiamo mai trovato una guida completa con generazione dei file dei certificati e delle chiavi e impostazione dei file di conf. Speriamo quindi di essere stati completi e precisi in questa pagina.
Alcune informazioni sono state reperite dal sito internet ufficiale del software.
La maggior parte dei passi spiegati in questa guida derivano da un lavoro di configurazione e messa a punto durato circa 6 mesi.
Grazie a questa guida possiamo ora creare una rete, paragonabile ad una LAN, passando attraverso un canale di comunicazione pubblico come internet.
Tunnel VPN vengono spesso utilizzati quando si vuole mantenere un livello di confidenzialità dei dati scambiati decisamente alto.
Possiamo capire facilmente l'utilizzo di tale software all'interno di una azienda con sedi geograficamente distanti, ma questo software può portare svariati vantaggi anche per l'uso domestico, potendo visionare file sensibili depositati a casa in qualunque posto ci si trovi.
Ovviamente i vantaggi apportati da questo tipo di servizio sono svariati, non vi resta quindi che installare, configurare e PROVARE.


Aggiungi un commento:
Nick:
captchaInserire il codice: