Nell’articolo Installare e configurare OpenVPN su Kali Linux di qualche tempo fa, ho descritto brevemente come installare OpenVPN e configurarlo per l’utilizzo lato client.
Ho anche spiegato gli enormi vantaggi nell’uso di una VPN, ma se vi siete interessati un minimo alla questione e avete guardato qualcuno dei siti di provider che offrono questo tipo di servizio, avrete notato all’istante il suo principale svantaggio: il costo.
Ci sono provider che offrono servizi VPN gratuiti, ma generalmente tendono a limitare la banda, il traffico giornaliero o il numero di dispositivi con possibilità di connessione.
Niente paura, se avete voglia di sporcarvi un po’ le mani o più semplicemente siete curiosi di come possa funzionare una VPN, vi introduco a quella che potrebbe essere una soluzione a questo problema, descrivendo una guida per la creazione di un server VPN completamente autonomo e indipendente.
Prerequisiti
Ovviamente per creare un server VPN sarà necessario avere a disposizione un server. Può essere una macchina server fisica, una macchina virtuale, un VPS o un Cloud Server: non importa la sua natura, l’importante è che ci dia la possibilità di installare un sistema operativo server.
Per realizzare questo tutorial ho optato per Ubuntu Server date le sue doti di affidabilità e semplicità nell’utilizzo, ma la procedura che andrò a descrivere non dovrebbe variare molto anche per altre distribuzioni Linux.
Installazione del software necessario
Per realizzare il server VPN avremo bisogno di:
- OpenVPN, il programma principale che si occuperà della connessione;
- Easy-RSA, un pacchetto per la gestioni delle chiavi basato su OpenSSL;
- UFW, uno strumento che semplifica la gestione di Iptables e configura un firewall per il nostro server;
Installiamo il software indicato sopra, lanciando il seguente comando da una shell di root
apt-get install openvpn easy-rsa ufw
Configurazione di OpenVPN
Copiamo il file di configurazione di esempio di OpenVPN nella cartella di installazione del software e lo apriamo con un editor testuale
gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz > /etc/openvpn/server.conf nano /etc/openvpn/server.conf
e lo modifichiamo, cambiando la riga dh1024.pem
in dh2048.pem
(ciò garantirà una maggiore sicurezza modificando la chiave di cifratura da 1024 a 2048 bit) e decommentiamo le seguenti righe:
push "redirect-gateway def1 bypass-dhcp"
user nobody
group nogroup
Salviamo e chiudiamo il file.
Abilitiamo il forwarding dei pacchetti con il comando echo 1 > /proc/sys/net/ipv4/ip_forward
e lo rendiamo effettivo all’avvio del sistema aprendo il file /etc/sysctl.conf e decommentando la riga net.ipv4.ip_forward=1
Configurazione di UFW
Apriamo le porte necessarie per la comunicazione con il server da remoto e di default di OpenVPN digitando da terminale
ufw allow ssh ufw allow 1194/udp
Apriamo il file di configurazione di UFW /etc/default/ufw e cambiamo la riga DEFAULT_FORWARD_POLICY="DROP"
in DEFAULT_FORWARD_POLICY="ACCEPT"
, salviamo e chiudiamo il file.
Apriamo il file /etc/ufw/before.rules e aggiungiamo le seguenti regole subito dopo il primo blocco di commento ammettendo che eth0 sia la nostra interfaccia di rete
*nat :POSTROUTING ACCEPT [0:0] -A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE COMMIT
Salviamo e chiudiamo il file e abilitiamo UFW digitando da shell ufw enable
Configurazione e creazione di una Certification Authority
Copiamo gli script di generazione dei certificati Easy-RSA nella cartella di installazione di OpenVPN e creiamo la cartella che conterrà chiavi e certificati
cp -r /usr/share/easy-rsa/ /etc/openvpn mkdir /etc/openvpn/easy-rsa/keys
Apriamo il file /etc/openvpn/easy-rsa/vars attribuiamo valori che si addicano al nostro ambiente alle seguenti variabili
export KEY_COUNTRY export KEY_PROVINCE export KEY_CITY export KEY_ORG export KEY_EMAIL export KEY_OU
e diamo un nome alla chiave del server
export KEY_NAME="server"
Salviamo e chiudiamo il file.
Sempre attraverso una shell, generiamo il file dei parametri Diffie-Hellman, ci spostiamo nella cartella di generazione delle chiavi, inizializziamo PKI (Public Key Infrastructure), puliamo la cartella delle chiavi e infine creiamo la Certification Authority
openssl dhparam -out /etc/openvpn/dh2048.pem 2048 cd /etc/openvpn/easy-rsa . ./vars ./clean-all ./build ca
Generare certificato e chiave per il server
Supponendo di trovarci ancora nella cartella di generazione dei certificati, lanciamo da terminale il comando ./build-key-server server
dove server è il valore attribuito alla variabile KEY_NAME nel file di configurazione delle variabili della Certification Authority, e diamo conferma con y
ad entrambe le domande che ci verranno poste durante la generazione del certificato.
Copiamo chiave e certificati generati in /etc/openvpn digitando cp /etc/openvpn/easy-rsa/keys/{server.crt,server.key,ca.crt} /etc/openvpn
e finalmente avviamo il server con service openvpn start
Generare certificato e chiave per i client
Possiamo generare una chiave non protetta digitando ./build-key newclient
oppure protetta da password con ./build-key-pass newclient
Se il client per il quale stiamo creando il certificato è Linux abbiamo concluso, basterà scaricare i file ca.crt, newclient.crt e newclient.key ed inserirli nella configurazione di OpenVPN per utilizzare la rete.
Per gli altri client sarà necessario qualche passo in più, in quanto essi si aspettano di ricevere un file con estensione ovpn.
Copiamo il file di configurazione di esempio nella cartella di generazione dei certificati di Easy-RSA modificandone l’estensione
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn/easy-rsa/keys/client.ovpn
Apriamo il file /etc/openvpn/easy-rsa/keys/client.ovpn e lo modifichiamo come segue
remote [indirizzo-ip-pubblico-del-server] 1194
Con il simbolo #
davanti ad ognuna di esse commentiamo le righe
# ca ca.crt # cert client.crt # key client.key
Aggiungiamo in fondo al file con una sintassi simile all’xml
<ca> [contenuto-file-ca.crt] </ca> <cert> [contenuto-file-newclient.crt] </cert> <key> [contenuto-file-newclient.key] </key>
A questo punto possiamo scaricare il file /etc/openvpn/easy-rsa/keys/client.ovpn sul nostro dispositivo e iniziare ad utilizzare la VPN.