Guida definitiva alla configurazione di un server OpenVPN sicuro su Ubuntu 20.04
Una rete privata virtuale (VPN) ti consente di connetterti in modo sicuro e privato a una rete privata remota, ad esempio la rete del tuo ufficio o Internet, come se fossi connesso direttamente a una rete privata.
La VPN funziona in un'architettura server-client. Un server VPN è distribuito su una macchina ed è accessibile pubblicamente su Internet. Il server VPN può essere configurato per consentire la connessione a una LAN privata, come una rete aziendale, o consentire connessioni a Internet. L'utente si connette al server VPN utilizzando un client VPN sulla sua macchina locale. La comunicazione tra server VPN e client avviene utilizzando un protocollo di tunneling sicuro. A Internet sembra che la destinazione del traffico sia il server VPN; tuttavia, il traffico passa al client tramite il server.
La VPN ha molti usi nella vita quotidiana, come connettersi in modo sicuro a una rete Wi-Fi pubblica, che è spesso compromessa o aggirare le restrizioni geografiche su determinati siti Web collegandosi a una VPN con sede in un paese consentito dal sito Web.
OpenVPN è un'implementazione VPN ampiamente utilizzata che consente un'ampia gamma di configurazioni e opzioni. Utilizza il protocollo Secure Sockets Layer (SSL) per la crittografia dei dati e chiavi pre-condivise, username/password o certificati per l'autenticazione del client VPN. In questo articolo vedremo come configurare un server VPN e un client VPN su Ubuntu 20.04.
Installazione
OpenVPN è disponibile nei repository Ubuntu ufficiali nel pacchetto openvpn
. Questo pacchetto installa sia il server OpenVPN che il client.
sudo apt install openvpn
Come accennato in precedenza, OpenVPN utilizza i certificati SSL per crittografare i dati tra il server e il client. Dobbiamo configurare la nostra autorità di certificazione (CA) per emettere certificati per la VPN. Nota che questo dovrebbe essere impostato su una macchina diversa da quella su cui è configurato OpenVPN; il motivo è che se si trova sullo stesso server e se viene compromesso, un utente malintenzionato può accedere alla chiave privata e quindi attaccare la connessione VPN.
Utilizzeremo uno strumento chiamato "Easy-RSA" per configurare l'autorità di certificazione. Per installarlo, eseguire quanto segue sulla macchina CA, sulla macchina server OpenVPN e sulla macchina client, poiché la configurazione è richiesta su tutte e tre queste per configurare la CA.
sudo apt install easy-rsa
Ora configureremo prima l'autorità di certificazione sulla macchina CA ed eseguiremo alcuni passaggi di configurazione richiesti per la stessa sulla macchina server Open VPN.
Configurazione dell'autorità di certificazione
Configurazione iniziale sulla macchina CA
Ora, questo pacchetto installa un comando chiamato make-cadir
che viene utilizzato per creare una cartella per la configurazione dell'autorità di certificazione. Creiamo una cartella usando questo ed entriamo nella cartella.
make-cadir cert_authority && cd cert_authority
Apri il file chiamato vars
creato in questa directory. Questo file contiene alcune variabili di configurazione che dobbiamo modificare. I valori che devono essere modificati sono alle righe 91-96, dopo il commento su Campi organizzativi che descrive questi campi. Decommenta le righe e inserisci i valori appropriati al posto dei valori di esempio.
Salva ed esci dal file. Se stai usando l'editor vim, premi Esc
, genere :wq
e premere accedere
per salvare ed uscire.
Successivamente, eseguiamo il easyrsa
programma nella directory per configurare l'infrastruttura a chiave pubblica (PKI), che verrà utilizzata per generare la chiave pubblica e i certificati.
./easyrsa init-pki
Il passaggio successivo genererà la chiave CA e il certificato. Quando il comando richiede una password, immettere una password per la chiave CA. Inoltre, inserisci un nome comune quando richiesto. Se lo lasci vuoto, verrà utilizzato il nome predefinito Easy-RSA CA name.
./easyrsa build-ca
Come possiamo vedere dall'output, il certificato e la chiave sono stati generati. Questa chiave verrà utilizzata per firmare i certificati client e server, quindi non dovrebbe mai essere toccata/modificata.
Ora abbiamo la configurazione PKI. Il prossimo passo è creare una chiave server e un certificato sulla macchina che useremo come server OpenVPN. Questo certificato verrà successivamente firmato dalla macchina CA.
Generazione della chiave e del certificato del server sulla macchina del server
Abbiamo già installato Easy RSA sulla macchina server. Ora esegui i tre passaggi sulla macchina server, che abbiamo precedentemente eseguito sulla macchina CA, vale a dire. creare una directory CA usando make-cadir
e andando al suo interno, modificando le variabili nel vars
file e generare PKI utilizzando ./easyrsa init-pki
comando.
Successivamente, dobbiamo eseguire il comando per generare una richiesta e una chiave di certificato del server.
./easyrsa gen-req server nopass
Nota che abbiamo passato l'opzione Nessuna tessera
in modo che il comando non ci chieda di inserire una password per la chiave del server. Ti verrà comunque richiesto un nome comune per il server, che puoi inserire qualsiasi cosa, o lasciarlo vuoto per il nome predefinito (server) da essere usato.
Sposta il file chiave generato all'interno del /etc/openvpn
directory.
sudo mv pki/private/server.key /etc/openvpn
Invia la richiesta di certificato alla macchina CA. Useremo il comando scp
per questo scopo.
scp pki/reqs/server.req user@CA_MACHINE_HOSTNAME:/directory
Nella schermata sopra, l'host 45.79.125.41 è la macchina CA. Abbiamo copiato il certificato nella directory /root.
Ora, il certificato del server è stato copiato sulla macchina CA. Il prossimo passo è tornare alla macchina CA e firmare questo certificato.
Firma del certificato del server nella CA
Innanzitutto, verifichiamo se il file di richiesta del certificato dal server è stato copiato sulla macchina CA. Vai alla directory in cui abbiamo copiato il file (/root nel mio esempio) ed esegui ls
.
:~# cd /root && ls cert_authority server.req
Come possiamo vedere, il file server.req
è presente. Quindi, vai alla directory CA e importa questa richiesta.
cd cert_authority ./easyrsa import-req /root/server.req server
Per firmare questa richiesta, esegui il comando seguente.
./easyrsa sign-req server server
Qui il primo argomento è il tipo di richiesta, cioè, server, e il secondo argomento è il nome comune della macchina server, per la quale in precedenza abbiamo utilizzato il valore predefinito, ovvero, server.
Inserisci la frase sì, e la password per la chiave CA quando richiesto.
Ora possiamo rimuovere il file di richiesta del certificato e copiare il certificato generato per il server, così come il certificato pubblico della CA sulla macchina del server.
rm /root/server.req scp pki/issued/server.crt [email protected]:/root scp pki/ca.crt [email protected]:/root
Successivamente, dobbiamo eseguire alcuni passaggi in più per garantire una connessione sicura della VPN.
Generazione dei parametri DH
Lo scambio di chiavi DH (Diffie-Hellman) è un algoritmo per garantire uno scambio sicuro di chiavi crittografiche su un canale non sicuro. Innanzitutto, spostiamo il certificato ricevuto e il certificato pubblico della CA in /etc/openvpn
.
mv /root/ca.crt /root/server.crt /etc/openvpn
Vai alla cartella CA sul computer server ed esegui il comando seguente per generare i parametri DH. Potrebbe volerci molto tempo per generare.
./easyrsa gen-dh
Ora sposta il file generato in /etc/openvpn
.
mv /root/cert_authority/pki/dh.pem /etc/openvpn
Generazione chiavi TA
OpenVPN utilizza un'altra misura di sicurezza aggiuntiva utilizzando la chiave di autenticazione TLS. Per generare la chiave di autenticazione TLS, eseguire:
openvpn --genkey --secret tls_auth.key
E sposta la chiave su /etc/openvpn
.
mv tls_auth.key /etc/openvpn
La configurazione della chiave del server e l'impostazione dell'autorità di certificazione sono ora terminate. Passiamo ora alla configurazione vera e propria del server VPN.
Configurazione del server OpenVPN
Il file di configurazione per il server OpenVPN non viene creato automaticamente, tuttavia possiamo utilizzare un file di configurazione del modello dal openvpn
pacchetto.
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 usando vim o qualsiasi editor di tua scelta.
cd /etc/openvpn vim server.conf
Dobbiamo inserire i nomi comuni delle chiavi e dei certificati che abbiamo generato in precedenza. Vai alla riga n. 78. Poiché abbiamo utilizzato tutti i nomi predefiniti, li manteniamo invariati. Quindi controlla il nome del file di parametro DH alla riga 85. Abbiamo usato il nome dh.pem, quindi cambiamolo.
Quindi, modifichiamo i privilegi per il server OpenVPN. Vai alla riga 274 e 275 e rimuovi l'iniziale ;
per decommentarlo.
Allo stesso modo vai alla riga 192 e rimuovi il punto e virgola. Questa direttiva consente al traffico di tutti i client di passare attraverso la VPN.
Salva ed esci dal file.
Cambia la proprietà della cartella /etc/openvpn in root.
sudo chown -R root:root /etc/openvpn
Configurazione di rete e firewall
È necessario consentire l'inoltro IP sul server per consentire l'inoltro dei pacchetti da e verso il client VPN. Rimuovi il commento dalla riga 28 in poi /etc/sysctl.conf
:
Salva ed esci dal file.
Ricomincia systemctl
affinché questi cambiamenti abbiano luogo.
sudo sysctl -p
Dobbiamo impostare Network Address Translation (NAT) sul server utilizzando un firewall UFW in modo da consentire al client VPN di accedere a Internet utilizzando l'indirizzo IP del server VPN. Innanzitutto, abilitiamo l'inoltro dei pacchetti nella configurazione del firewall. Aprire /etc/default/ufw
e cambia la variabile alla riga 19 in ACCEPT.
Salva ed esci dal file.
Ora aggiungi le seguenti regole al file /etc/ufw/before.rules
prima di filtro riga nel file.
*nat :POSTROUTING ACCEPT [0:0] -A POSTROUTING -s 10.8.0.0/8 -o -j MASQUERADE COMMIT
Inserisci la tua interfaccia di rete al posto di . Puoi vedere la tua interfaccia di rete con il comando ifconfig
.
Consenti il traffico per il servizio OpenVPN sul firewall e consenti la porta 1194.
sudo ufw consenti openvpn && sudo ufw consenti 1194
Ricarica il servizio firewall.
sudo ufw reload
Ora possiamo riavviare il demone del server Open VPN eseguendo:
sudo service openvpn riavvio
Abilitalo per l'avvio all'avvio eseguendo:
sudo systemctl abilita openvpn
Il server OpenVPN è stato ora configurato ed è stato avviato. Passiamo ora alla richiesta del certificato del client e alla generazione della chiave e ad altre configurazioni.
Configurazione client OpenVPN
Dobbiamo generare una chiave e una richiesta di certificato per il client. La procedura per farlo è la stessa di quella per il server.
Sebbene una chiave client e una richiesta di certificato possano essere create sulla macchina client e quindi trasferite alla macchina CA, si consiglia di crearla sulla macchina server. Il vantaggio di eseguire questa operazione sul server è che puoi creare uno script per eseguire tutti i passaggi richiesti sul server, il che rende più semplice l'accesso alla VPN da parte di un nuovo client.
Vai alla cartella CA sul server ed esegui quanto segue:
cd ~/cert_authority ./easyrsa gen-req client nopass
In modo simile a quanto fatto in precedenza, inserisci un nome comune quando richiesto o lascialo vuoto per utilizzare il nome comune predefinito, ad es. cliente.
Copiamo ora la richiesta di certificato client generata sulla macchina CA.
scp pki/reqs/client.req [email protected]:/root
Importiamo questa richiesta nella macchina CA:
./easyrsa import-req /root/client.req client
E adesso firmiamolo:
./client client easyrsa sign-req
accederesì
quando viene richiesto di continuare. Immettere la password per la chiave CA quando richiesto.
Ora possiamo rimuovere il file richiesto per il client e copiare di nuovo la richiesta sulla macchina del server VPN.
rm /root/client.req scp pki/issued/client.crt [email protected]:/root
Creiamo una cartella chiamata cliente
per conservare tutti i file relativi al client sul server VPN. Sposteremo la chiave client e il certificato in questa cartella.
mkdir ~/client sudo mv ~/client.crt ~/cert_authority/pki/private/client.key ~/client
Ora creiamo un file di configurazione da un modello disponibile, in modo simile a come abbiamo creato il file di configurazione del server.
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client
Apri il file client.conf
. Alla riga 42, inserisci il nome host o l'indirizzo IP della tua macchina server al posto di mio-server-1
.
Decommenta le righe 61 e 62 rimuovendo il punto e virgola iniziale, per eseguire il downgrade dei privilegi per il file.
Successivamente, commenta le righe 88-90 e la riga 108. Il motivo è che vogliamo aggiungere manualmente il contenuto dei file menzionati invece di utilizzare le posizioni dei file. Lo scopo di fare ciò è che il file di configurazione del client verrà successivamente trasferito al client, dove in realtà non avremo la chiave del client e i file del certificato; quindi copiamo il contenuto di quelli nel file di configurazione stesso.
Aggiungere quanto segue al file di configurazione del client. Inserisci il contenuto dei file dei rispettivi file all'interno dei tag indicati.
# Incolla qui il contenuto del file ca.crt # Incolla qui il contenuto del file client.crt # Incolla qui il contenuto del file client.key key-direction 1 # Incolla qui il contenuto del file tls_auth.key
Salva ed esci dal file. Rinomina questo file da client.conf
a cliente.ovpn
, poiché quest'ultima è l'estensione necessaria per i file di configurazione che possono essere importati come configurazioni di rete.
Ora trasferisci il file cliente.ovpn
al client, ovvero alla macchina locale.
Correre scp
sul computer client per trasferire file dal computer server al computer locale.
scp utente@ip_server:/percorso_del_file percorso_destinazione_locale
Infine, dobbiamo utilizzare questo file di configurazione per connetterci al server VPN. Questo può essere fatto sia tramite riga di comando che tramite GUI.
Per avviare il client VPN dalla riga di comando, esegui:
sudo openvpn --config client.ovpn
E questo è l'unico comando che devi eseguire per avviare il client VPN.
Per avviare il client VPN tramite GUI, eseguire i passaggi seguenti.
Vai su Impostazioni »Rete sul tuo computer client.
Clicca sul + pulsante nella sezione VPN e scegli "Importa da file..." dalle opzioni.
Fai clic su "Aggiungi" per iniziare a utilizzare la VPN.
Si noti che in "Gateway" è l'indirizzo IP del server.
Infine, attiva il pulsante "VPN client" per abilitare la VPN sulla macchina.
Potrebbero essere necessari alcuni secondi per stabilire una connessione VPN. Un nuovo logo di avanzamento per VPN apparirà nell'angolo in alto a sinistra dello schermo durante la configurazione e cambierà in un logo VPN una volta configurato.
Per verificare se la VPN funziona correttamente, esegui quanto segue:
curl //ipinfo.io/ip
Dovrebbe restituire l'indirizzo IP della macchina server. Oppure puoi anche controllare il tuo indirizzo IP semplicemente cercando "Il mio IP" su Google. Dovrebbe mostrare l'indirizzo IP del tuo server VPN se la nostra configurazione VPN funziona correttamente.
Conclusione
In questo articolo abbiamo visto come configurare un server OpenVPN, un'autorità di certificazione e un client OpenVPN. Per aggiungere più client alla VPN, ora dobbiamo seguire la procedura per generare e firmare un certificato per il client e utilizzare lo stesso file di configurazione creato qui, con solo la chiave client e i valori del certificato modificati.
In caso di connessioni Internet più lente, è possibile che, se si utilizza UDP per la comunicazione, si verifichi una notevole perdita di pacchetti. L'utente può passare a TCP decommentando la riga protocollo tcp
e commentando la linea proto udp
nel file di configurazione del server.
Inoltre, nel caso ci siano altri errori, puoi impostare il livello di registrazione con il verbo
direttiva nei file di configurazione sia del server che del client. È possibile immettere valori compresi tra 0 e 9. Più alto è il valore di questa direttiva, più dettagliato sarà il registro.