Vai al contenuto

OpenVPN

Introduzione

OpenVPN è una rete privata virtuale (VPN) gratuita e open-source. Questo articolo vi guiderà nella configurazione di OpenVPN con l'infrastruttura a chiave pubblica (PKI) X509. Questa guida richiede un sistema Rocky Linux con un indirizzo IP pubblico, poiché OpenVPN opera su un modello client/server. Il modo più semplice per raggiungere questo obiettivo è quello di creare un server privato virtuale (VPS) attraverso un provider cloud di vostra scelta. Al momento in cui scriviamo, Google Cloud Platform offre un livello gratuito per le sue istanze e2-micro. Se state cercando la configurazione più semplice di OpenVPN utilizzando una VPN punto-punto (p2p) senza PKI, fate riferimento al loro Static Key Mini-HOWTO.

Prerequisiti e presupposti

I requisiti minimi per questa procedura sono i seguenti:

  • La possibilità di eseguire comandi come utente root o di utilizzare sudo per elevare i privilegi
  • Un sistema Rocky Linux con un IP accessibile pubblicamente

Installare OpenVPN

Installare il repository Extra Packages for Enterprise Linux (EPEL):

sudo dnf install epel-release -y

Installare OpenVPN:

sudo dnf install openvpn -y

Configurare l'autorità di certificazione

Installare easy-rsa:

sudo dnf install easy-rsa -y

Creare la directory easy-rsa in /etc/openvpn:

sudo mkdir /etc/openvpn/easy-rsa

Crea un collegamento simbolico ai file easy-rsa:

sudo ln -s /usr/share/easy-rsa /etc/openvpn/easy-rsa

Cambiare la directory in /etc/openvpn/easy-rsa:

cd /etc/openvpn/easy-rsa

Eseguire lo script easyrsa con il parametro init-pki per inizializzare la PKI dell'autorità di certificazione:

sudo ./easy-rsa/3/easyrsa init-pki

Eseguire lo script easyrsa con i parametri build-ca e nopass per creare l'Autorità di certificazione senza password:

sudo ./easy-rsa/3/easyrsa build-ca nopass

Creare certificati

Eseguire lo script easyrsa con i parametri gen-req e nopass per generare il certificato del server senza password:

sudo ./easy-rsa/3/easyrsa gen-req server nopass

Eseguire lo script easyrsa con i parametri sign-req e server per firmare il certificato del server:

sudo ./easy-rsa/3/easyrsa sign-req server server

Note

È possibile ripetere i passaggi seguenti tutte le volte che si desidera per altri client.

Eseguire lo script easyrsa con i parametri gen-req e nopass per generare certificati client senza password:

sudo ./easy-rsa/3/easyrsa gen-req client1 nopass

Eseguire lo script easyrsa con i parametri sign-req e client per firmare i certificati client senza password:

sudo ./easy-rsa/3/easyrsa sign-req client client1

OpenVPN richiede i parametri Diffie Hellman. Eseguire questo comando per generarli:

sudo ./easy-rsa/3/easyrsa gen-dh

Configurare OpenVPN

Una volta completata la creazione della PKI, è il momento di configurare OpenVPN.

Copiare il file di esempio server.conf in /etc/openvpn:

sudo cp /usr/share/doc/openvpn/sample/sample-config-files/server.conf /etc/openvpn

Utilizzare l'editor preferito per aprire e scrivere il file server.conf:

sudo vim /etc/openvpn/server.conf

Successivamente, è necessario aggiungere i percorsi dei file dell'autorità di certificazione, del certificato del server e della chiave del server al file di configurazione del server OpenVPN.

Copiare e incollare i percorsi dei file delle chiavi e dei certificati alle righe 78-80:

Note

In Vim, è possibile aggiungere numeri di riga alla modifica in corso con `:set nu`
ca /etc/openvpn/easy-rsa/pki/ca.crt
cert /etc/openvpn/easy-rsa/pki/issued/server.crt
key /etc/openvpn/easy-rsa/pki/private/server.key  # This file should be kept secret

Copiare e incollare il percorso del file Diffie Hellman alla riga 85 del file di esempio server.conf:

dh /etc/openvpn/easy-rsa/pki/dh.pem

OpenVPN utilizza SSL per impostazione predefinita, ma può opzionalmente utilizzare TLS. Questa guida utilizza il protocollo SSL.

Commentare i valori della coppia di chiavi tls-auth ta.key alla riga 244:

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

Salvare prima di chiudere server.conf.

Configurare il firewall

OpenVPN funziona sulla porta UDP 1194 per impostazione predefinita. Si utilizzerà firewalld per consentire il traffico OpenVPN nel server.

Installare firewalld:

sudo dnf install firewalld -y

Abilitare firewalld:

sudo systemctl enable --now firewalld

Consentire OpenVPN attraverso il firewall aggiungendolo come servizio:

sudo firewall-cmd --add-service=openvpn --permanent

Attivate la traduzione degli indirizzi di rete (NAT) e nascondete gli indirizzi IP pubblici dei client aggiungendo una regola di masquerade al firewall:

sudo firewall-cmd --add-masquerade --permanent

Ricaricare il firewall:

sudo firewall-cmd --reload

Configurare il routing

Consentire l'inoltro IP con il seguente comando:

sudo sysctl -w net.ipv4.ip_forward=1

Avviare il server OpenVPN

Secondo la documentazione OpenVPN, "è meglio avviare inizialmente il server OpenVPN dalla riga di comando":

sudo openvpn /etc/openvpn/server.conf

Dopo aver avviato OpenVPN, premere Ctrl + Z, quindi inviare il lavoro in background:

bg

Configurazione e avvio del client

Oltre al server, per funzionare è necessario installare OpenVPN su tutti i client. Installare OpenVPN sul client, se non lo si è già fatto:

sudo dnf install openvpn -y

Creare nuove directory per memorizzare le chiavi, i certificati e il file di configurazione del client:

sudo mkdir -p /etc/openvpn/pki`

Ora copiate le chiavi e i certificati utilizzando un metodo di trasporto sicuro e inseriteli in /etc/openvpn/pki. Alcuni modi potenziali per farlo sono i protocolli SFTP o SCP. Consultate la guida Rocky Linux SSH Public and Private Key per configurare l'accesso SSH.

Si tratta dei certificati e delle chiavi necessari per la configurazione del client e dei relativi percorsi dei file sul server:

  • ca.crt
  • client1.crt
  • client1.key

Dopo aver memorizzato i certificati e le chiavi necessarie in /etc/openvpn/pki, copiare il file di esempio client.conf in /etc/openvpn:

sudo cp /usr/share/doc/openvpn/sample/sample-config-files/client.conf /etc/openvpn

Aprire client.conf con un editor di propria scelta:

sudo vim /etc/openvpn/client.conf`

Mappare i percorsi dei file dei certificati e delle chiavi necessari nel file di configurazione del client. È possibile farlo copiando e incollando queste righe di testo nelle righe 88-90 del file di esempio:

ca /etc/openvpn/pki/ca.crt
cert /etc/openvpn/pki/client1.crt
key /etc/openvpn/pki/client1.key

È inoltre necessario impostare il nome host o l'IP del server. È possibile lasciare la porta UDP predefinita 1194. Nel file di esempio, questo si trova alla riga 42:

remote server 1194

Salvare prima di uscire da client.conf.

Avviare OpenVPN sul client:

sudo openvpn /etc/openvpn/client.conf

Dopo aver avviato OpenVPN, premere Ctrl + Z e inviare il lavoro in background:

bg

Eseguite il comando seguente per visualizzare i lavori in esecuzione in background:

jobs

Inviare un ping di prova al server. Per impostazione predefinita, il suo indirizzo privato è 10.8.0.1:

ping 10.8.0.1

Conclusione

Ora dovreste avere il vostro server OpenVPN attivo e funzionante! Con questa configurazione di base, avete assicurato un tunnel privato per la comunicazione dei vostri sistemi su Internet. Tuttavia, OpenVPN è altamente personalizzabile e questa guida lascia molto all'immaginazione. È possibile approfondire la conoscenza di OpenVPN consultando il suo [sito web] (https://www.openvpn.net). È anche possibile leggere ulteriori informazioni su OpenVPN direttamente sul sistema - man openvpn - utilizzando la pagina man.

Author: Joseph Brinkman

Contributors: Steven Spencer, Ganna Zhyrnova