Una VPN è una rete privata virtuale che ti consente di accedere a Internet o ad alcuni servizi anche da una rete non affidabile. In sostanza, è come se fossi fisicamente connesso a una rete privata:puoi ad esempio accedere al tuo conto in banca o effettuare pagamenti senza temere che qualcuno intercetta il traffico generato dal tuo dispositivo.
OpenVPN è una VPN basata sui protocolli TLS (Transport Layer Security) e SSL (Secure Sockets Layer). OpenVPN utilizza alcuni certificati per crittografare il traffico tra il server e il client.
In questo tutorial vedrai come configurare OpenVPN su un server con Ubuntu 18.04.
Per implementare questo tutorial sono necessarie una macchina server e un'altra macchina che agisca da CA (Autorità di Certificazione), che valuterà la validità dei certificati.
Dovrai connetterti al tuo server e alla tua CA tramite una connessione SSH. Se non l'hai ancora fatto, ti consigliamo di seguire la nostra guida per connetterti in sicurezza con il protocollo SSH.
Installazione di OpenVPN
Accedi al tuo server.
OpenVPN è già disponibile sul repository ufficiale di Ubuntu di Ubuntu, quindi non è necessario aggiungere altro.
Digita:
sudo apt update
sudo apt install openvpn
A questo punto, OpenVPN sarà stato installato correttamente sul tuo server.
Installazione di EasyRSA
Continua scaricando EasyRSA sul tuo Server e sulla tua CA digitando su entrambi i computer:
wget -P ~/ https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.4/EasyRSA-3.0.4.tgz
L'ultima versione può essere scaricata da https://github.com/OpenVPN/easy-rsa/releases
$ cd ~
$ sudo tar xvf EasyRSA-3.0.4.tgz
Il nome potrebbe essere diverso a seconda della versione scaricata
Configurazione del server
Completa la configurazione del server digitando:
$ sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/
$ sudo gzip -d /etc/openvpn/server.conf.gz
$ sudo nano /etc/openvpn/server.conf
Trova la sezione che fa riferimento a HMAC ("tls-auth"). Se la riga è commentata, rimuovi ";".
Trova la sezione sulla crittografia ("cifra"). Se commentato, rimuovere il ";". Aggiungi una nuova riga contenente il testo "auth SHA256" proprio sotto .
Trova la sezione "dh" che definisce i parametri Diffie-Hellman e rimuovi "2048" dal nome ( "dh dh.pem" dovrebbe essere ottenuto).
Trova la sezione "utente" e "gruppo" e rimuovi ";" per decommentare le righe.
Configurazione di EasyRSA sulla CA
Dopo aver installato EasyRSA, sulla CA è stato creato un file di configurazione per definire le variabili per la tua CA. Digita:
$ cd ~/EasyRSA-3.0.4/
$ cp vars.example vars
$ nano vars
Rimuovi il "#" dalle istruzioni mostrate nella figura seguente:
Avvia lo script "easyrsa" per inizializzare la Public Key Infrastructure (PKI):
$ sudo ./easyrsa init-pki
$ sudo ./easyrsa build-ca nopass
con questo comando verranno creati due file:
ca.crt:certificato CA pubblico utilizzato da server e client per notificare reciprocamente che fanno parte della stessa rete affidabile.
ca.key:chiave privata utilizzata dalla macchina CA per firmare chiavi e certificati per server e client. Questo file deve essere conservato solo sulla macchina CA (che non è accessibile da terzi)altrimenti la sicurezza della rete potrebbe essere compromessa.
Ti verrà richiesto di inserire un nome. Lascialo vuoto e premi Invio.
Richiesta di un certificato server dalla CA
Ora che la CA Machine è configurata, chiedi al server di generare una chiave privata e una richiesta di certificato e inviarli alla CA Machine per farli firmare:
$ cd ~/EasyRSA-3.0.4
$ ./easyrsa init-pki
$ ./easyrsa gen-req server nopass
Per semplicità, lascia "server" come nome della macchina, per evitare di apportare diverse modifiche in seguito.
Hai appena creato una chiave privata per il server e una richiesta di certificato chiamata "server.req":
$ sudo cp ~/EasyRSA-v3.0.6/pki/private/server.key /etc/openvpn/
Copia il file server.req sulla macchina CA:
$ sudo scp ~/EasyRSA-3.0.4/pki/reqs/server.req [email protected]_CA_ip:/tmp
Generazione e firma del certificato
Nella tua CA nella cartella EasyRSA, importa il file appena copiato e firmalo:
$ cd ~/EasyRSA-3.0.4/
$ sudo ./easyrsa import-req /tmp/server.req server
$ sudo ./easyrsa sign-req server server
Digita "yes" e premi Invio.
Trasferisci il certificato firmato e il ca.crt al Server VPN:
$ sudo scp pki/issued/server.crt [email protected]_server_ip:/tmp
$ sudo scp pki/ca.crt [email protected]_server_ip:/tmp
Quindi nel tuo Server
copia i file ricevuti nelle directory appropriate:
$ sudo cp /tmp/{server.crt,ca.crt} /etc/openvpn/
$ cd ~/EasyRSA-3.0.4/
Genera una chiave di scambio forte basata su Diffie-Hellman.
$ sudo ./easyrsa gen-dh
$ sudo openvpn --genkey --secret ta.key
Copia i file generati nella cartella "/ etc / openvpn /"
$ sudo cp ~/EasyRSA-3.0.4/ta.key /etc/openvpn/
$ sudo cp ~/EasyRSA-3.0.4/pki/dh.pem /etc/openvpn/
Configurazione di un client
Creare una cartella in cui memorizzare certificati e chiavi del client (poiché questa guida presenta un solo client, qui si chiama 'client1', ma l'operazione deve essere ripetuta per ogni client, utilizzando un denominazione)
$ sudo mkdir -p ~/client-configs/keys
$ sudo chmod -R 700 ~/client-configs
$ cd ~/EasyRSA-3.0.4/
$ sudo ./easyrsa gen-req client1 nopass
Premi Invio per accettare il nome standard proposto.
$ sudo cp pki/private/client1.key ~/client-configs/keys/
Copia la chiave del cliente nella cartella precedentemente creata.
$ sudo scp pki/reqs/client1.req [email protected]_CA_IP:/tmp
Invia il file client1.req alla macchina CA.
Importa la richiesta di certificato sulla tua CA:
$ cd ~/EasyRSA-3.0.4/
$ sudo ./easyrsa import-req /tmp/client1.req client1
$ sudo ./easyrsa sign-req client client1
Digita "yes" per autorizzare la firma.
Carica client1.crt sul tuo server:
scp pki/issued/client1.crt [email protected]_SERVER:/tmp
Sul server, copia i seguenti file nelle cartelle appropriate.
$ sudo mkdir -p ~/client-configs/keys
$ sudo chmod -R 700 ~/client-configs
$ sudo cp /tmp/client1.crt ~/client-configs/keys/
$ sudo cp ~/EasyRSA-3.0.4/ta.key ~/client-configs/keys/
$ sudo cp /etc/openvpn/ca.crt ~/client-configs/keys/
Ora sono stati generati sia i certificati che le chiavi del server e del client.
Configurazione di routing IP e firewall
Modifica le regole di inoltro IP:
$ sudo nano /etc/sysctl.conf
Trova la sezione "net.ipv4.ip_forward" e rimuovi il "#" per rendere l'istruzione "non commentata".
Modifica alcune regole del firewall per instradare correttamente le connessioni client.
$ ip route | grep default
Memorizza il nome dopo "dev" ( denominato "eth0" nella figura seguente):
$ sudo nano /etc/ufw/before.rules
Aggiungi i comandi come nella figura seguente, sostituendo "eth0" con il nome della tua interfaccia di rete.
# START OPENVPN RULES
# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]
# Allow traffic from OpenVPN client to eth0
-A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE
COMMIT
# END OPENVPN RULES
Salva ed esci. Ora modifica il file di configurazione UFW:
$ sudo nano /etc/default/ufw
Cambia il valore del parametro "DEFAULT_FORWARD_POLICY" con "ACCEPT".
$ sudo ufw allow 1194/udp
Aggiungi la porta 1194 per il traffico UDP.
$ sudo ufw allow OpenSSH
Riavvia UFW:
$ sudo ufw disable
$ sudo ufw enable
Avvia il servizio OpenVPN:
$ sudo systemctl start openvpn
Controlla lo stato del servizio:
$ sudo systemctl status openvpn
Imposta il servizio all'avvio del server.
$ sudo systemctl enable openvpn
Crea il file di configurazione per il client:
$ sudo mkdir -p ~/client-configs/files
$ sudo cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client-configs/base.conf
$ sudo nano ~/client-configs/base.conf
Trova la sezione "remoto" e assicurati che indichi "Server IP_remoto 1194"
IP_Server:scrivere l'IP del server
1194:porta precedentemente selezionata.
Trova la sezione "proto" per assicurarti che il server sia impostato su UDP (troverai la riga TCP commentata con un ";").
Trova la sezione "utente" e "gruppo" e rimuovi ";" per renderli "nessun commento".
Trova le sezioni "ca.crt" - "client.crt" - "client.key" - "ta.key" e commentale con un "#" all'inizio di ogni riga.
Trova la sezione "cifra" e aggiungi l'istruzione "auth SHA256" sotto l'istruzione "cifra AES-256-CBC".
Aggiungi l'istruzione "key-direction 1" in qualsiasi momento.
Aggiungi queste righe commentate in qualsiasi momento. Se il client è una macchina Linux, fallo "senza commenti".
# script-security 2
# up /etc/openvpn/update-resolv-conf
# down /etc/openvpn/update-resolv-conf
Salva ed esci.
Generazione della configurazione per i client
Sul tuo Server, crea uno script per compilare automaticamente la configurazione di un client.
nano ~/client-configs/make_config.sh
Copia e incolla il testo:
#!/bin/bash
# First argument: Client identifier
KEY_DIR=~/client-configs/keys
OUTPUT_DIR=~/client-configs/files
BASE_CONFIG=~/client-configs/base.conf
cat ${BASE_CONFIG} \
<(echo -e '<ca>') \
${KEY_DIR}/ca.crt \
<(echo -e '</ca>\n<cert>') \
${KEY_DIR}/${1}.crt \
<(echo -e '</cert>\n<key>') \
${KEY_DIR}/${1}.key \
<(echo -e '</key>\n<tls-auth>') \
${KEY_DIR}/ta.key \
<(echo -e '</tls-auth>') \
> ${OUTPUT_DIR}/${1}.ovpn
Salva ed esci.
chmod 700 ~/client-configs/make_config.sh
Prova ora a generare la "configurazione" del client client.
$ cd ~/client-configs
$ sudo ./make_config.sh client1
Verrà creato un file chiamato "client1.ovpn".
Ora trasferisci questo file sul dispositivo che desideri utilizzare. Sarà utilizzato dal software VPN per la connessione.
Revocare i certificati del cliente
$ cd EasyRSA-3.0.4/
$ sudo ./easyrsa revoke client1
client1 è il nome del cliente a cui devono essere revocate le autorizzazioni
Digita "yes" per confermare.
Genera e carica il file crl.pem sul tuo server:
$ sudo ./easyrsa gen-crl
$ sudo scp ~/EasyRSA-3.0.4/pki/crl.pem [email protected]_Server:/tmp
Aggiorna la configurazione della tua macchina server per verificare la revoca.
$ sudo cp /tmp/crl.pem /etc/openvpn
$ sudo nano /etc/openvpn/server.conf
Alla fine del file aggiungi "crl-verify crl.pem".
Salva ed esci.
$ sudo systemctl restart [email protected]
Riavvia il server per implementare le modifiche.