Introduzione

Una rete privata virtuale (VPN) consente di attraversare reti non attendibili in modo sicuro e protetto come in una rete privata.

Se combinato con le connessioni HTTPS, questa configurazione consente di proteggere gli accessi e le transazioni wireless. È possibile aggirare le restrizioni geografiche, la censura, la propria posizione e qualsiasi traffico HTTP non crittografato.

OpenVPN è una soluzione VPN Secure Socket Layer (SSL) completa e open source che può contenere una vasta gamma di configurazioni. In questo tutorial, configureremo OpenVPN su un server Ubuntu 18.04 LTS.

Prerequisiti

Per questo tutorial, avrai bisogno di un server Ubuntu 18.04 da utilizzare per il servizio OpenVPN. È necessario configurare un utente non root con privilegi sudo prima di iniziare questa guida. È possibile seguire la nostra guida per la configurazione iniziale di Ubuntu 18.04 per impostare un utente con le autorizzazioni appropriate.

Sarà necessario un computer separato per fungere da autorità di certificazione (certificate authority - CA). Mentre è possibile utilizzare il tuo server VPN o il tuo computer locale come CA, anche se non è consigliato in quanto apre la tua VPN ad alcune vulnerabilità di sicurezza. Secondo la documentazione ufficiale di OpenVPN, è necessario posizionare la CA su un computer autonomo dedicato all'importazione e alla firma delle richieste di certificati. Per questa ragione, questa guida presume che la CA sia su un server Ubuntu 18.04 separato che ha anche un utente non root con privilegi sudo.

Si noti che se si disabilita l'autenticazione della password durante la configurazione di questi server, è possibile che si verifichino delle difficoltà durante il trasferimento dei file. Per risolvere questo problema, è possibile riabilitare l'autenticazione della password su ciascun server. In alternativa, è possibile generare una coppia di chiavi SSH per ciascun server, quindi aggiungere la chiave SSH pubblica del server OpenVPN al file authorized_keys del server CA e viceversa.

Connessione al Server

Per accedere al server, è necessario conoscere l'indirizzo IP. Avrai anche bisogno della password per l'autenticazione.

Per connettersi al server come utente root digitare questo comando:
ssh [email protected]_DEL_SERVER

Successivamente vi verrà chiesto di inserire la password dell'utente root.

Se non utilizzate l'utente root potete connettervi con un'altro nome utente utilizzando lo stesso comando, quindi modificare anche il primo parametro:
ssh [email protected]_DEL_SERVER

Successivamente vi verrà chiesto di inserire la password del vostro utente.

Siete ora connessi al vostro server, siete pronti per iniziare l'installazione di OpenVPN.

Installare OpenVPN e EasyRSA

Aggiornare l'indice del pacchetto del server VPN e installare OpenVPN. OpenVPN è disponibile nei repository predefiniti di Ubuntu, quindi è possibile usare apt per l'installazione:
sudo apt update

sudo apt install openvpn

OpenVPN è una VPN TLS/SSL. Ciò significa che utilizza i certificati per crittografare il traffico tra il server e i client. Utilizzeremo l'ultima versione di EasyRSA per costruire la nostra infrastruttura a chiave pubblica CA (PKI).

Costruiremo la CA su un server standalone. La gestione della CA da un server standalone aiuta a impedire agli utenti non autorizzati di accedere alla VPN.

Scaricare la versione più recente di EasyRSA sia sul server CA che sul server OpenVPN. Per ottenere l'ultima versione, vai alla pagina ufficiale del progetto su GitHub di EasyRSA , copia il link per il download per il file che termina in .tgz, quindi incollalo nel seguente comando:

wget -P ~/ https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.5/EasyRSA-nix-3.0.5.tgz

Quindi estrarre il tarball:
cd ~

tar xvf EasyRSA-nix-3.0.5.tgz

Il software richiesto è stato installato correttamente sul server OpenVPN e sul server CA.

Configurare EasyRSA e CA

EasyRSA viene installato con un file di configurazione che è possibile modificare per la CA.

  • Connettersi all server CA

Sul server CA, vai alla directory EasyRSA:
cd ~/EasyRSA-3.0.5/

All'interno di questa directory c'è un file chiamato vars.example. Crea una copia di questo file e assegna un nome alla copia vars senza estensione file:

cp vars.example vars
Aprire il file:
nano vars

Trova le seguenti impostazioni:

...
#set_var EASYRSA_REQ_COUNTRY    "US"
#set_var EASYRSA_REQ_PROVINCE   "California"
#set_var EASYRSA_REQ_CITY       "San Francisco"
#set_var EASYRSA_REQ_ORG        "Copyleft Certificate Co"
#set_var EASYRSA_REQ_EMAIL      "[email protected]"
#set_var EASYRSA_REQ_OU         "My Organizational Unit"
...

Decommenta queste righe e modifica i valori con quelli che preferisci, non lasciarli vuoti:

...
set_var EASYRSA_REQ_COUNTRY    "US"
set_var EASYRSA_REQ_PROVINCE   "NewYork"
set_var EASYRSA_REQ_CITY       "New York City"
set_var EASYRSA_REQ_ORG        "Noviello"
set_var EASYRSA_REQ_EMAIL      "[email protected]"
set_var EASYRSA_REQ_OU         "Community"
...

Al termine, salva e chiudi il file.

All'interno della directory EasyRSA c'è uno script chiamato easyrsa che viene chiamato per eseguire una serie di funzioni relativi alla creazione e alla gestione della CA. Esegui questo script con l'opzione init-pki per avviare l'infrastruttura a chiave pubblica sul server CA:

./easyrsa init-pki

Dovresti ricevere un messaggio di output simile al seguente:

. . .
init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /home/TUO_NOME_UTENTE/EasyRSA-3.0.5/pki

Dopo questo, richiama di nuovo lo script easyrsa, seguendolo con l'opzione build-ca. Questo costruirà la CA e creerà due file importanti - ca.crt e ca.key - che costituiscono il lato pubblico e privato di un certificato SSL.

ca.crt è il file di certificato pubblico della CA che, nel contesto di OpenVPN. Il tuo server e tutti i tuoi client avranno bisogno di una copia di questo file.

ca.key è la chiave privata utilizzata dal server CA per firmare chiavi e certificati per server e client. Questo file .key dovrebbe essere solo sul tuo server CA e, idealmente, il tuo server CA dovrebbe essere tenuta offline quando non firma le richieste di certificati come misura di sicurezza aggiuntiva.
Se non si desidera che venga richiesta una password ogni volta che si interagisce con la CA, è possibile eseguire il comando build-ca con l'opzione nopass, in questo modo:

./easyrsa build-ca nopass

Dovresti ricevere un messaggio di output simile al seguente:

. . .
Common Name (eg: your user, host, or server name) [Easy-RSA CA]:

Il nome comune è il nome utilizzato per fare riferimento a questo server nel contesto dell'autorità di certificazione. È possibile inserire qualsiasi stringa di caratteri per il nome comune della CA ma, per motivi di semplicità, premere INVIO per accettare il nome predefinito.

Creare il certificato e la chiave del server

Ora che hai una CA pronta, puoi generare una chiave privata e una richiesta di certificato dal tuo server VPN e poi trasferire la richiesta alla tua CA per essere firmata, creando il certificato richiesto.

  • Connettersi al server VPN

Entrare nella directory EasyRSA sul server OpenVPN:
cd EasyRSA-3.0.5/

Eseguire lo script easyrsa con l'opzione init-pki. Sebbene tu abbia già eseguito questo comando sul server CA, è necessario eseguirlo qui perché il tuo server VPN e CA avranno directory PKI separate:
./easyrsa init-pki

Quindi chiama di nuovo lo script easyrsa, questa volta con l'opzione gen-req seguita da un nome comune per il server. Questo potrebbe essere un nome qualsiasi. In questo tutorial, il nome comune del server OpenVPN sarà semplicemente "server". Assicurati di includere anche l'opzione nopass. In caso contrario, verrà protetto con password il file di richiesta che potrebbe causare problemi di autorizzazione in un secondo momento:

ATTENZIONE: se scegli qui un nome diverso da "server", ovvero quello che utilizzeremo noi per il resto della guida, dovrai fare attenzione a modificare alcuni comandi che verranno.

Quindi lanciare il seguente comando:
./easyrsa gen-req server nopass

Questo creerà una chiave privata per il server e un file di richiesta di certificato chiamato server.req. Copia la chiave del server nella directory /etc/openvpn/:
sudo cp ~/EasyRSA-3.0.5/pki/private/server.key /etc/openvpn/

Utilizzando un metodo sicuro (come SCP, nel nostro esempio di seguito), trasferire il file server.req sul server CA:
scp ~/EasyRSA-3.0.5/pki/reqs/server.req [email protected]_SERVER_CA:/tmp

  • Connettersi al server CA

Successivamente, sul server CA, accedere alla directory EasyRSA:
cd EasyRSA-3.0.5/

Utilizzando di nuovo lo script easyrsa, importa il file server.req, seguendo il percorso del file con il suo nome comune:
./easyrsa import-req /tmp/server.req server

Quindi firmare la richiesta eseguendo lo script easyrsa con l'opzione sign-req, seguito dal tipo di richiesta e dal nome comune. Il tipo di richiesta può essere client o server, quindi per la richiesta di certificato del server OpenVPN, assicurarsi di utilizzare il tipo di richiesta del server:
./easyrsa sign-req server server

Nell'output, ti verrà chiesto di verificare che la richiesta provenga da una fonte attendibile. Digitare yes quindi premere INVIO per confermare questo:

You are about to sign the following certificate.
Please check over the details shown below for accuracy. Note that this request
has not been cryptographically verified. Please be sure it came from a trusted
source or that you have verified the request checksum with the sender.

Request subject, to be signed as a server certificate for 3650 days:

subject=
    commonName                = server


Type the word 'yes' to continue, or any other input to abort.
  Confirm request details: yes

Se hai crittografato la tua chiave CA, ti verrà richiesta la password a questo punto.

Successivamente, trasferisci il certificato firmato al tuo server VPN usando un metodo sicuro:
scp pki/issued/server.crt [email protected]_SERVER_VPN:/tmp

Prima di disconnettersi dal server CA, trasferire anche il file ca.crt sul server:
scp pki/ca.crt [email protected]_SERVER_VPN:/tmp

  • Connettersi al server VPN

Accedere nuovamente al server VPN e copiare i file server.crt e ca.crt nella directory /etc/openvpn/:
sudo cp /tmp/{server.crt,ca.crt} /etc/openvpn/

Quindi vai alla tua directory EasyRSA:
cd EasyRSA-3.0.5/

Crea una chiave Diffie-Hellman da utilizzare durante lo scambio di chiavi digitando:
./easyrsa gen-dh

Questo potrebbe richiedere alcuni minuti per completare.
Al termine, genera una firma HMAC per rafforzare le capacità di verifica dell'integrità TLS del server:
openvpn --genkey --secret ta.key

Adesso coopiare i due nuovi file nella directory /etc/openvpn/:
sudo cp ~/EasyRSA-3.0.5/ta.key /etc/openvpn/
sudo cp ~/EasyRSA-3.0.5/pki/dh.pem /etc/openvpn/

Sono stati generati tutti i certificati e i file chiave necessari per il tuo server.

Generare un Certificato Client e una Coppia di Chiavi

Genereremo una singola chiave client e una coppia di certificati. Se hai più di un client, puoi ripetere questo processo per ognuno di essi. Si noti, tuttavia, che è necessario passare un valore di nome univoco allo script per ogni client. In questo tutorial, il primo certificato / coppia di chiavi viene indicato come client1.

Inizia creando una struttura di directory all'interno della directory home per archiviare il certificato del client e i file di chiavi:
mkdir -p ~/client-configs/keys

Poiché in questa directory si archiviano i certificati, chiavi e i file di configurazione dei client, è necessario bloccare le autorizzazioni come misura di sicurezza:
chmod -R 700 ~/client-configs

Quindi, tornare alla directory EasyRSA ed eseguire lo script easyrsa con le opzioni gen-req e nopass, insieme al nome comune per il client:
cd ~/EasyRSA-3.0.5/

./easyrsa gen-req client1 nopass

Premere INVIO per confermare il nome comune. Quindi, copia il file client1.key nella directory /client-configs/keys/ che hai creato in precedenza:
cp pki/private/client1.key ~/client-configs/keys/

Quindi, trasferire il file client1.req sul server CA utilizzando un metodo sicuro:
scp pki/reqs/client1.req [email protected]_SERVER_CA:/tmp

  • Connettersi al server CA

Accedere al server CA, accedere alla directory EasyRSA e importare la richiesta di certificato:
ssh [email protected]_SERVER_CA

cd EasyRSA-3.0.5/

./easyrsa import-req /tmp/client1.req client1

Quindi firma la richiesta come hai fatto per il server nel passaggio precedente. Questa volta, tuttavia, assicurati di specificare il tipo di richiesta del client:
./easyrsa sign-req client client1

Al prompt, immettere yes per confermare che si intende firmare la richiesta di certificato e che proviene da una fonte attendibile:

Dovresti ricevere un messaggio di output simile al seguente:

Output
Type the word 'yes' to continue, or any other input to abort.
  Confirm request details: yes

Questo creerà un file di certificato client denominato client1.crt. Trasferisci questo file sul server VPN:

scp pki/issued/client1.crt [email protected]_SERVER_VPN:/tmp

  • Connettersi al server VPN

Connettersi di nuovo al server VPN e copiare il certificato client nella directory /client-configs/keys/:
cp /tmp/client1.crt ~/client-configs/keys/

Successivamente, copia anche i file ca.crt e ta.key nella directory /client-configs/keys/:

cp ~/EasyRSA-3.0.5/ta.key ~/client-configs/keys/
sudo cp /etc/openvpn/ca.crt ~/client-configs/keys/

I certificati e le chiavi del server e del client sono stati tutti generati e memorizzati nelle directory appropriate sul server.

Configurare il OpenVPN Service

Ora che sono stati generati sia i certificati che i certificati del client e del server, è possibile iniziare a configurare il servizio OpenVPN per utilizzare queste credenziali.

Inizia copiando un file di configurazione OpenVPN di esempio nella directory di configurazione e quindi estrailo per utilizzarlo come base per la configurazione:
sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/

sudo gzip -d /etc/openvpn/server.conf.gz

Apri il file di configurazione del server:
sudo nano /etc/openvpn/server.conf

Trova la sezione HMAC cercando la direttiva tls-auth. Questa riga dovrebbe già essere decommentata, ma se non lo è, rimuovere ";" per decommentarlo. Sotto questa riga, aggiungi il parametro key-direction, impostato su "0":

tls-auth ta.key 0 # This file is secret
key-direction 0

Successivamente, trova la sezione sui cifrari crittografici cercando le righe di cipher commentate. La crittografia AES-256-CBC offre un buon livello di crittografia ed è ben supportata. Di nuovo, questa riga dovrebbe già essere decommentata, ma se non lo è, basta rimuovere ";" precedendolo:

cipher AES-256-CBC

Sotto, aggiungi una direttiva auth per selezionare l'algoritmo di digest del messaggio HMAC. Per questo, SHA256 è una buona scelta:

auth SHA256

Successivamente, trova la riga contenente una direttiva dh che definisce i parametri Diffie-Hellman. A causa di alcune recenti modifiche apportate a EasyRSA, il nome file per la chiave Diffie-Hellman potrebbe essere diverso da quello elencato nel file di configurazione del server di esempio. Se necessario, modificare il nome del file qui elencato rimuovendo il 2048 in modo che sia allineato con la chiave generata nel passaggio precedente:

dh dh.pem

Infine, trova le impostazioni dell'user e del group e rimuovi il ";" all'inizio di ogni commento togliere queste righe:

user nobody
group nogroup

Le modifiche apportate al file server.conf di esempio fino a questo punto sono necessarie per far funzionare OpenVPN. Le modifiche descritte di seguito sono opzionali, sebbene siano necessarie anche per molti casi d'uso comuni.

(Opzionale) Modificare i DNS per reindirizzare tutto il traffico attraverso la VPN

Le impostazioni precedenti creeranno la connessione VPN tra le due macchine, ma non imporrà alcuna connessione per utilizzare il tunnel. Se si desidera utilizzare la VPN per instradare tutto il traffico, è probabile che si desideri inviare le impostazioni DNS ai computer client.

Ci sono alcune direttive nel file server.conf che è necessario modificare per abilitare questa funzionalità. Trova la sezione redirect-gateway e rimuovi il punto e virgola ";" dall'inizio della linea di redirect-gateway per decommentarlo:

push "redirect-gateway def1 bypass-dhcp"

Subito sotto, trova la sezione dhcp-option. Ancora una volta, rimuovere ";" di fronte a entrambe le righe per decommentarli:

push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"

Ciò aiuterà i client a riconfigurare le loro impostazioni DNS per utilizzare il tunnel VPN come gateway predefinito.

(Opzionale) Modificare la porta e il protocollo

Per impostazione predefinita, il server OpenVPN utilizza la porta 1194 e il protocollo UDP per accettare le connessioni client. Se è necessario utilizzare una porta diversa. Se non si utilizzano software come Apache, Nginx o simili, è possibile utilizzare anche la porta 443 scelta popolare poiché generalmente è consentita dalle regole del firewall.

#opzionale
port 443

Spesso, il protocollo è limitato a quella porta. Se è così, cambia proto da UDP a TCP:

#opzionale
proto tcp

Se si passa il protocollo a TCP, sarà necessario modificare il valore della direttiva notify-exit-notify da 1 a 0, poiché questa direttiva viene utilizzata solo da UDP. Non riuscendo a farlo durante l'utilizzo di TCP causerà errori quando si avvia il servizio OpenVPN:

#opzionale
explicit-exit-notify 0

Se non è necessario utilizzare una porta e un protocollo diversi, è meglio lasciare queste due impostazioni come predefinite.

(Opzionale) Puntare a credenziali non predefinite

Se si è selezionato un nome diverso durante il comando ./build-key-server in precedenza, modificare il certificato e le linee chiave che si vedono per puntare ai file .crt e .key appropriati. Se hai usato il nome predefinito, "server", questo è già impostato correttamente:

cert server.crt
key server.key

Al termine, salva e chiudi il file.

Dopo aver eseguito tutte le modifiche necessarie alla configurazione OpenVPN del tuo server per il tuo caso d'uso specifico, puoi iniziare ad apportare alcune modifiche alla rete del tuo server.

Configurare la rete del server

Ci sono alcuni aspetti della configurazione di rete del server che devono essere modificati affinché OpenVPN possa instradare correttamente il traffico attraverso la VPN. Il primo di questi è l'IP forwarding, un metodo per determinare dove indirizzare il traffico IP. Questo è essenziale per la funzionalità VPN che il tuo server fornirà.

Regola le impostazioni di inoltro IP predefinite del tuo server modificando il file /etc/sysctl.conf:

sudo nano /etc/sysctl.conf

All'interno, cerca la riga commentata che imposta net.ipv4.ip_forward. Rimuovi il carattere "#" dall'inizio della riga per rimuovere il commento da questa impostazione:

net.ipv4.ip_forward=1

Salvare e chiudere il file.

Per leggere il file e regolare i valori per la sessione corrente, digitare:
sudo sysctl -p

Dovresti ricevere un messaggio di output simile al seguente:

net.ipv4.ip_forward = 1

Alcune regole del firewall devono essere modificate per abilitare il masquerading, un concetto di iptables che fornisce una NAT (dynamic address translation) dinamica al volo per instradare correttamente le connessioni client.

Prima di aprire il file di configurazione del firewall per aggiungere le regole di masquerading, devi prima trovare l'interfaccia di rete pubblica del tuo computer. Per fare ciò, digitare:
ip route | grep default

La tua interfaccia pubblica è la stringa trovata nell'output di questo comando che segue la parola "dev". Ad esempio, questo risultato mostra l'interfaccia chiamata wlp11s0, che è evidenziata di seguito:

Dovresti ricevere un messaggio di output simile al seguente:

default via 203.0.113.1 dev wlp11s0 proto static

Quando hai l'interfaccia associata alla tua rotta predefinita, apri il file /etc/ufw/before.rules per aggiungere la configurazione pertinente:

sudo nano /etc/ufw/before.rules

Le regole UFW vengono in genere aggiunte utilizzando il comando ufw. Le regole elencate nel file before.rules, tuttavia, vengono lette e messe in atto prima che vengano caricate le regole UFW convenzionali. Verso la parte superiore del file, aggiungi le linee evidenziate sotto. Questo imposterà la politica di default per la catena POSTROUTING nella tabella nat e maschererà tutto il traffico proveniente dalla VPN. Ricordati di sostituire wlp11s0 nella riga -A POSTROUTING sotto con l'interfaccia che hai trovato nel comando precedente:

#
# rules.before
#
# Rules that should be run before the ufw command line added rules. Custom
# rules should be added to one of these chains:
#   ufw-before-input
#   ufw-before-output
#   ufw-before-forward
#

# START OPENVPN RULES
# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0] 
# Allow traffic from OpenVPN client to wlp11s0 (change to the interface you discovered!)
-A POSTROUTING -s 10.8.0.0/8 -o wlp11s0 -j MASQUERADE
COMMIT
# END OPENVPN RULES

# Don't delete these required lines, otherwise there will be errors
*filter
. . .

Salvare e chiudere il file.

Successivamente, è necessario indicare a UFW anche i pacchetti inoltrati per impostazione predefinita. Per fare ciò, apri il file /etc/default/ufw:
sudo nano /etc/default/ufw

All'interno, trova la direttiva DEFAULT_FORWARD_POLICY e modifica il valore da DROP a ACCEPT:

DEFAULT_FORWARD_POLICY="ACCEPT"

Salvare e chiudere il file.

Quindi, regola il firewall stesso per consentire il traffico a OpenVPN. Se non è stata modificata la porta e il protocollo nel file /etc/openvpn/server.conf, sarà necessario aprire il traffico UDP alla porta 1194. Se la porta e / o il protocollo sono stati modificati, sostituire i valori selezionati qui.

Se hai dimenticato di aggiungere la porta SSH, aggiungilo anche qui:
sudo ufw allow 1194/udp

sudo ufw allow OpenSSH

Dopo aver aggiunto quelle regole, disabilita e riattiva UFW per riavviarlo e caricare le modifiche da tutti i file che hai modificato:
sudo ufw disable

sudo ufw enable

Il tuo server ora è configurato per gestire correttamente il traffico OpenVPN.

Avviare e attivare OpenVPN Service

Avviare il server OpenVPN specificando il nome del file di configurazione come variabile di istanza dopo il nome del file dell'unità systemd. Il file di configurazione per il tuo server si chiama /etc/openvpn/server.conf, quindi aggiungi @server alla fine del file dell'unità quando lo chiami:
sudo systemctl start [email protected]

Ricontrolla che il servizio è stato avviato correttamente digitando:
sudo systemctl status [email protected]

Se tutto è andato bene, il risultato sarà simile a questo:

[email protected] - OpenVPN connection to server
   Loaded: loaded (/lib/systemd/system/[email protected]; disabled; vendor preset: enabled)
   Active: active (running) since Tue 2018-01-02 15:30:05 EDT; 47s ago
     Docs: man:openvpn(8)
           https://community.openvpn.net/openvpn/wiki/Openvpn23ManPage
           https://community.openvpn.net/openvpn/wiki/HOWTO
  Process: 5852 ExecStart=/usr/sbin/openvpn --daemon ovpn-%i --status /run/openvpn/%i.status 10 --cd /etc/openvpn --script-security 2 --config /etc/openvpn/%i.conf --writepid /run/openvpn/%i.pid (code=exited, sta
 Main PID: 5856 (openvpn)
    Tasks: 1 (limit: 512)
   CGroup: /system.slice/system-openvpn.slice/[email protected]
           └─5856 /usr/sbin/openvpn --daemon ovpn-server --status /run/openvpn/server.status 10 --cd /etc/openvpn --script-security 2 --config /etc/openvpn/server.conf --writepid /run/openvpn/server.pid

Puoi anche verificare che l'interfaccia tun0 di OpenVPN sia disponibile digitando:
ip addr show tun0

Questo produrrà un'interfaccia configurata:

4: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 100
    link/none 
    inet 10.8.0.1 peer 10.8.0.2/32 scope global tun0
       valid_lft forever preferred_lft forever

Dopo aver avviato il servizio, abilitarlo in modo che si avvii automaticamente all'avvio:
sudo systemctl enable [email protected]

Il tuo servizio OpenVPN è ora attivo e funzionante. Prima di poter iniziare ad usarlo, tuttavia, è necessario prima creare un file di configurazione per il computer client. Abbiamo già spiegato su come creare coppie di certificati / chiavi per i client, e nel prossimo passo dimostreremo come creare un'infrastruttura che generi facilmente i file di configurazione del client.

Creare l'infrastruttura di configurazione del client

Ogni client deve avere una propria configurazione e ognuno deve essere allineato con le impostazioni delineate nel file di configurazione del server. Dovrai prima creare un file di configurazione "base", quindi creare uno script che ti consenta di generare file di configurazione client, certificati e chiavi univoci, se necessario.

Inizia creando una nuova directory in cui salverai i file di configurazione del client all'interno della directory di configurazione del client che hai creato in precedenza:
mkdir -p ~/client-configs/files

Successivamente, copia un esempio di file di configurazione del client nella directory client-configs da utilizzare come configurazione di base:
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client-configs/base.conf

Aprire il seguente file:
nano ~/client-configs/base.conf

All'interno, individuare la direttiva remote. Ciò indica al client l'indirizzo del server OpenVPN - l'indirizzo IP pubblico del server OpenVPN. Se hai deciso di cambiare la porta su cui è in ascolto il server OpenVPN, dovrai anche modificare 1194 sulla porta selezionata:

. . .
# The hostname/IP and port of the server.
# You can have multiple remote entries
# to load balance between the servers.
remote your_server_ip 1194
. . .

Assicurati che il protocollo corrisponda al valore che stai utilizzando nella configurazione del server:

proto udp

Quindi, decommentare le direttive user e di group rimuovendo ";" all'inizio di ogni riga:

# Downgrade privileges after initialization (non-Windows only)
user nobody
group nogroup

Trova le direttive che impostano ca, cert e key. Commenta queste direttive poiché aggiungerai certs e keys all'interno del file stesso:

# SSL/TLS parms.
# See the server config file for more
# description.  It's best to use
# a separate .crt/.key file pair
# for each client.  A single ca
# file can be used for all clients.
#ca ca.crt
#cert client.crt
#key client.key

Allo stesso modo, commenta la direttiva tls-auth, dato che aggiungerai ta.key direttamente nel file di configurazione del client:

# If a tls-auth key is used on the server
# then every client must also have the key.
#tls-auth ta.key 1

Specificare le impostazioni di cipher e auth impostate nel file /etc/openvpn/server.conf:

cipher AES-256-CBC
auth SHA256

Successivamente, aggiungi la direttiva key-direction da qualche parte nel file. È necessario impostare su "1" affinché la VPN funzioni correttamente sul server client:

key-direction 1

Infine, aggiungi alcune righe commentate. Sebbene sia possibile includere queste direttive in ogni file di configurazione del client, è necessario abilitarle solo per i client Linux forniti con un file /etc/openvpn/update-resolv-conf. Questo script utilizza l'utilità resolvconf per aggiornare le informazioni DNS per i client Linux.

# script-security 2
# up /etc/openvpn/update-resolv-conf
# down /etc/openvpn/update-resolv-conf

Se il tuo client esegue Linux e ha un file /etc/openvpn/update-resolv-conf, decommenta queste righe dal file di configurazione del client dopo che è stato generato.

Salvare e chiudere il file.

Successivamente, crea un semplice script che compilerà la configurazione di base con i relativi certificati, chiavi e file di crittografia e quindi inserirà la configurazione generata nella directory ~/client-configs/files. Apri un nuovo file chiamato make_config.sh nella directory ~/client-configs:
nano ~/client-configs/make_config.sh

All'interno, aggiungi il seguente contenuto:

#!/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

Salvare e chiudere il file.

Prima di proseguire, assicurati di contrassegnare questo file come eseguibile digitando:
chmod 700 ~/client-configs/make_config.sh

Questo script crea una copia del file base.conf che hai creato, raccoglie tutti i certificati e i file chiave che hai creato per il tuo client, estrae il loro contenuto, li aggiunge alla copia del file di configurazione di base ed esporta tutto questo contenuto in un nuovo file di configurazione del client. Ciò significa che, anziché dover gestire separatamente la configurazione, il certificato e i file chiave del client, tutte le informazioni richieste vengono archiviate in un'unica posizione. Il vantaggio di questo è che se in futuro avessi bisogno di aggiungere un client, puoi semplicemente eseguire questo script per creare rapidamente il file di configurazione e assicurarti che tutte le informazioni importanti siano archiviate in una posizione unica e di facile accesso.

Si noti che ogni volta che si aggiunge un nuovo client, sarà necessario generare nuove chiavi e certificati.

Generare le configurazioni del Client

Se hai seguito la guida, hai creato un certificato e una chiave client rispettivamente client1.crt e client1.key. Puoi generare un file di configurazione per queste credenziali spostandoti nella tua directory ~/client-configs e eseguendo lo script che hai eseguito alla fine del passaggio precedente:
cd ~/client-configs
sudo ./make_config.sh client1

Questo creerà un file chiamato client1.ovpn nella tua directory ~/client-configs/files:
ls ~/client-configs/files

Dovresti il seguente messaggio di output:

client1.ovpn

È necessario trasferire questo file sul dispositivo che si intende utilizzare come client. Ad esempio, questo potrebbe essere il tuo computer locale o un dispositivo mobile.

Le applicazioni esatte utilizzate per eseguire questo trasferimento dipenderanno dal sistema operativo del dispositivo e dalle preferenze personali, un metodo affidabile e sicuro consiste nell'utilizzare SFTP (SSH file transfer protocol) o SCP (Secure Copy) sul back-end. Ciò trasporterà i file di autenticazione VPN del client su una connessione crittografata.

Ecco un comando SFTP di esempio che utilizza l'esempio client1.ovpn che puoi eseguire dal tuo computer locale (macOS o Linux). Mette il file .ovpn nella tua home directory:

sftp [email protected]_SERVER_VPN:client-configs/files/client1.ovpn ~/

Installazione della configurazione del client

Questa sezione spiega come installare un profilo VPN client su Windows, macOS, Linux.

La connessione OpenVPN avrà lo stesso nome di quello che hai chiamato il file .ovpn. Per quanto riguarda questo tutorial, ciò significa che la connessione è denominata client1.ovpn, allineata con il primo file client generato.

Installazione per Windows
Scarica l'applicazione client OpenVPN per Windows dalla pagina Download di OpenVPN. Scegli la versione di installazione appropriata per la tua versione di Windows.

Nota
OpenVPN richiede i privilegi di amministratore da installare.
Dopo aver installato OpenVPN, copia il file .ovpn in:

C:\Program Files\OpenVPN\config

Quando avvii OpenVPN, vedrà automaticamente il profilo e lo renderà disponibile.

È necessario eseguire OpenVPN come amministratore ogni volta che viene utilizzato, anche da account amministrativi. Per eseguire questa operazione senza dover fare clic con il pulsante destro del mouse e selezionare Esegui come amministratore ogni volta che si utilizza la VPN, è necessario preimpostare questo da un account amministrativo. Ciò significa anche che gli utenti standard dovranno inserire la password dell'amministratore per utilizzare OpenVPN. D'altra parte, gli utenti standard non possono connettersi correttamente al server a meno che l'applicazione OpenVPN sul client abbia diritti di amministratore, quindi sono necessari i privilegi elevati.

Per impostare l'applicazione OpenVPN affinché venga sempre eseguita come amministratore, fare clic con il pulsante destro del mouse sull'icona del collegamento e accedere a Proprietà. Nella parte inferiore della scheda Compatibilità, fare clic sul pulsante per modificare le impostazioni per tutti gli utenti. Nella nuova finestra, seleziona Esegui questo programma come amministratore.

Ogni volta che si avvia la GUI OpenVPN, Windows chiederà se si desidera consentire al programma di apportare modifiche al computer. Fare clic su . L'avvio dell'applicazione client OpenVPN mette l'applet solo nella barra delle applicazioni in modo che sia possibile connettersi e disconnettere la VPN in base alle esigenze; in realtà non fa la connessione VPN.

Dopo aver avviato OpenVPN, avviare una connessione accedendo all'applet del vassoio di sistema e facendo clic con il pulsante destro del mouse sull'icona dell'applet OpenVPN. Questo apre il menu di scelta rapida. Seleziona client1 nella parte superiore del menu (è il tuo profilo client1.ovpn) e scegli Connetti.

Si aprirà una finestra di stato che mostra l'output del registro mentre viene stabilita la connessione e verrà visualizzato un messaggio una volta che il client è connesso.

Disconnettersi dalla VPN allo stesso modo: accedere all'applet della barra delle applicazioni, fare clic con il pulsante destro sull'icona dell'applet OpenVPN, selezionare il profilo client e fare clic su Disconnetti.

Installazione per macOS
Tunnelblick è un client OpenVPN open source gratuito per macOS. È possibile scaricare l'ultima immagine del disco dalla pagina Download di Tunnelblick. Fare doppio clic sul file .dmg scaricato e seguire le istruzioni per l'installazione.

Verso la fine del processo di installazione, Tunnelblick chiederà se si dispone del file di configurazione. Selezionare il file di configurazione e lasciare che Tunnelblick finisca. Apri una finestra del Finder e fai doppio clic su client1.ovpn. Tunnelblick installerà il profilo del client. Sono richiesti privilegi amministrativi.

Avvia Tunnelblick facendo doppio clic sull'icona Tunnelblick nella cartella Applicazioni. Una volta che Tunnelblick è stato lanciato, ci sarà un'icona Tunnelblick nella barra dei menu in alto a destra dello schermo per controllare le connessioni. Fare clic sull'icona e quindi sulla voce di menu Connetti client1 per avviare la connessione VPN.

Installazione per Linux
Se stai usando Linux, ci sono una varietà di strumenti che puoi usare a seconda della tua distribuzione. L'ambiente desktop o il gestore di finestre potrebbero anche includere utilità di connessione.

Il modo più universale di collegamento, tuttavia, è utilizzare semplicemente il software OpenVPN.

Su Ubuntu o Debian, puoi installarlo proprio come hai fatto sul server digitando:
sudo apt update

sudo apt install openvpn

Su CentOS puoi abilitare i repository EPEL e quindi installarlo digitando:
sudo yum install epel-release

sudo yum install openvpn

Verifica se la tua distribuzione include uno script /etc/openvpn/update-resolv-conf:
ls /etc/openvpn

Dovresti il seguente messaggio di output:

update-resolv-conf

Successivamente, modifica il file di configurazione del client OpenVPN trasferito:
nano client1.ovpn

Se sei riuscito a trovare un file update-resolv-conf, decommenta le tre linee aggiunte per regolare le impostazioni DNS:

script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf

Se si utilizza CentOS, modificare la direttiva di group da nogroup a nobody per far corrispondere i gruppi disponibili della distribuzione:

group nobody

Salvare e chiudere il file.

Ora è possibile connettersi alla VPN semplicemente puntando il comando openvpn al file di configurazione del client:
sudo openvpn --config client1.ovpn

Questo dovrebbe collegarti alla tua VPN.

Revoca dei Certificati client
Occasionalmente, potrebbe essere necessario revocare un certificato client per impedire un ulteriore accesso al server VPN.

Per fare ciò, accedere alla directory EasyRSA sul server CA:
cd EasyRSA-3.0.5/

Successivamente, esegui lo script easyrsa con l'opzione revoke, seguito dal nome del client che desideri revocare:
./easyrsa revoke client2

Questo ti chiederà di confermare la revoca inserendo yes.

Dovresti il seguente messaggio di output:

Please confirm you wish to revoke the certificate with the following subject:

subject=
    commonName                = client2


Type the word 'yes' to continue, or any other input to abort.
  Continue with revocation: yes

Dopo aver confermato l'azione, la CA revocherà completamente il certificato del client. Tuttavia, il tuo server OpenVPN attualmente non ha modo di verificare se i certificati dei client sono stati revocati e il client avrà comunque accesso alla VPN. Per correggere ciò, creare un elenco di revoche di certificati (CRL) sul server CA:
./easyrsa gen-crl

Questo genererà un file chiamato crl.pem. Trasferisci in modo sicuro questo file sul tuo server OpenVPN:
scp ~/EasyRSA-3.0.5/pki/crl.pem [email protected]_SERVER_VPN:/tmp

Sul tuo server OpenVPN, copia questo file nella tua directory /etc/openvpn/:
sudo cp /tmp/crl.pem /etc/openvpn

Quindi, aprire il file di configurazione del server OpenVPN:
sudo nano /etc/openvpn/server.conf

Nella parte inferiore del file, aggiungi l'opzione crl-verify, che istruirà il server OpenVPN a controllare l'elenco di revoche di certificati che abbiamo creato ogni volta che viene effettuato un tentativo di connessione:

crl-verify crl.pem

Salvare e chiudere il file.

Infine, riavvia OpenVPN per implementare la revoca del certificato:
sudo systemctl restart [email protected]

Il client non dovrebbe più essere in grado di connettersi al server utilizzando le vecchie credenziali.

L'installazione e la configurazione di OpenVPN su Ubuntu 18.04 LTS è terminata.