OpenVPN Tunnel

In questo articolo verrà spiegato come configurare una VPN con interfacce di tipo TAP (Layer 2 ISO/OSI) con assegnazione manuale degli indirizzi IP, con autenticazione e cifratura per mezzo di certificati SSL.

Come prima cosa analizzeremo la configurazione lato server. Per consentire in maniera più agevole la connessione da parte dei client occorre scegliere come server una macchina che dispone di indirizzo IP statico oppure occorre configurare un sistema di DNS dinamico (NoIP, DynDNS o simili). Di default il sistema utilizza le connessioni UDP per una questione di performance, ma in alcuni casi si preferisce utilizzare le connessione TCP, sopratutto su porta 443, per consentire la connessione dei client che utilizzano connessioni internet pubbliche, con firewall in uscita o con proxy.

La prima cosa da fare è generare i certificati SSL necessari sia per l’autenticazione e la cifratura. Per fare questo possiamo utilizzare EasyRSA, un sistema di script bash ed utility che ci consente di interagire in maniera agevolata con i comandi di OpenSSL. Dopo averlo installato creeremo una copia del sistema dentro la directory che conterrà tutto il necessario per la configurazione del Tunnel.

Creiamo una directory in /etc/openvpn/tunnel, dove il nome “tunnel” rappresenta il nome della VPN che vogliamo creare.

All’interno copiamo la directory di EasyRSA con il seguente comando:

Spostiamo dentro la directory appena copiata e configuriamo EasyRSA. La prima cosa da fare e modificare il file “vars” impostando le variabili alla fine dello script:

Nell’esempio sono riportate solamente le variabili da modificare. I valori da inserire sono totalmente a scelta e verranno memorizzati in ogni chiave che verrà generata. Le prime tre variabili impostano il numero di bit della lunghezza delle chiavi  da generare ed il numero di giorni per il quale i certificati saranno validi. Con il valore 3650 si generano chiavi che valgono per circa 10 anni.

Nel passo successivo prepariamo la configurazione di EasyRSA lanciando il comando:

In questo modo il sistema è pronto a generare chiavi. Iniziamo preparando la chiave per la Certification Authority che firmerà tutte le altre chiavi generate. Premete INVIO ad ogni domanda per tenere i valori di default impostati nel file “vars”:

Ora possiamo procedere generando la prima chiave della VPN necessaria per il server. Rispondete “y” (yes) alle ultime due domande come mostrato nell’esempio:

Ora prepariamo i parametri/numeri DH (Diffie–Hellman) necessari per la cifratura SSL:

A questo punto abbiamo terminato con i certificati necessari per il server e possiamo procedere con il file di config. Creiamo un file in /etc/openvpn/tunnel.conf ed inseriamo il seguente contenuto:

Nell’ordine elencato i parametri servono per:

  • server-bridge: abilitare la modalità bridge consentendo ad OpenVPN di lavorare come un tunnel a Layer2;
  • dev tap0: “tap” indica la modalità di funzionamento dell’interfaccia di rete virtuale creata, mentre il numero consente di creare più VPN indicando il nome completo dell’interfaccia da usare;
  • proto udp: protocollo UDP
  • port 1194: porta da utilizzare;
    client-to-client: abilitare il funzionamento del tunnel come se fosse uno switch vero e proprio, consentendo al comunicazione fra client;
  • ca /etc/openvpn/tunnel/ca.crt: path della chiave pubblica della CA;
  • cert /etc/openvpn/tunnel/server.crt: path della chiave pubblica del server;
  • key /etc/openvpn/tunnel/server.key: path della chiave privata del server;
  • dh /etc/openvpn/tunnel/dh2048.pem: path del file contenente i numeri DH;
  • cipher AES-256-CBC: algoritmo da usare per la cifratura;
  • auth SHA1: meccanismo di autenticazione dei client;
  • up /etc/openvpn/tunnel/netconf.sh: script bash da eseguire dopo aver stabilito il tunnel;
  • script-security 2: livello di sicurezza degli script da eseguire;
  • keepalive 10 120: ping remoto ogni 10 secondi, considera spenti i nodi che non rispondono entro 120 secondi;
  • comp-lzo: abilita la compressione LZO nel tunnel;
  • user nobody: dopo aver lanciato il demone, cambia l’utente di runtime;
  • group nogroup: gruppo di runtime dopo l’avvio;
  • persist-key: mantieni in memoria le chiavi in caso di riavvio (utile in caso di cambio di user:group);
  • persist-tun: mantieni l’interfaccia attiva in caso di riavvio (utile in caso di cambio di user:group);
  • log /var/log/openvpn/hellnet.log: path del file di log da utilizzare;
  • verb 3: livello del logging.

Come specificato nel file di configurazione, occorre creare la directory /var/log/openvpn ed occorre copiare le chiavi nei path corretti.Per sicurezza impostiamo in sola lettura per root i files appena copiati:

Come ultimo step creiamo un file in /etc/openvpn/tunnel/netconf.sh che verrà eseguito ogni volta che si avvierà il demone OpenVPN per la configurazione degli indirizzi IP.:

Lo script verrà invocato passando come primo parametro il nome completo dell’interfaccia di rete del tunnel.

A questo punto, come ultimo step, occorre impostare i permessi di eseguibilità allo script appena creato:

Ora non ci resta che avviare il server:

In questo modo dovremo trovare un demone in esecuzione nel sistema ed una nuova interfaccia di rete virtuale con l’indirizzo IP appena impostato.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *