Introduzione
Desideri accedere a Internet in modo sicuro dal tuo smartphone o laptop quando ti connetti a una rete non affidabile (ad es. il WiFi di un hotel o di un bar)? Fortunatamente, c'è un modo per esaudire i tuoi desideri. Puoi connetterti in modo sicuro a una rete non affidabile come se fossi su una rete privata utilizzando una Virtual Private Network (VPN).
Cos'è una VPN?
VPN sta per Virtual Private Network (Rete Privata Virtuale). Offre la possibilità di aprire un tunnel sicuro verso un server affidabile. Tutte le richieste vengono quindi inviate e ricevute tramite questo server. Il vantaggio è quello di proteggere l'accesso e le transazioni quando si utilizzano reti pubbliche come il WiFi gratuito di un hotel.
Attraverso la VPN, tutti i dati vengono crittografati ed elaborati tramite il server. I dispositivi intermedi, come i router di terze parti e simili, non hanno modo di reindirizzare il traffico verso destinazioni indesiderate. Inoltre, una volta stabilita con successo la connessione, si entra a far parte della rete del server. Altri server, computer o dispositivi come le stampanti che normalmente sarebbero accessibili solo nella rete locale del server possono ora essere raggiunti anche attraverso il tunnel VPN. Tuttavia, poiché non tutti i dati devono essere inviati attraverso un tunnel crittografato, è possibile configurare il client VPN in modo che solo una parte definita delle richieste venga inviata attraverso il tunnel VPN. Il resto del traffico viene elaborato normalmente su Internet.
In questo tutorial, ti guideremo attraverso i passaggi per configurare un server OpenVPN su Ubuntu 18.04.
Requisiti
È necessario avere accesso a un server Ubuntu 18.04 per ospitare il tuo OpenVPN servizio per completare questo tutorial. Prima di iniziare questa guida, è necessario configurare anche un utente non-root con permessi sudo. Puoi installare facilmente il tuo server seguendo il nostro tutorial sulla configurazione di un server Ubuntu.
Inoltre, avrai bisogno di un computer separato che funga da autorità di certificazione (CA). Tecnicamente, puoi usare il tuo server OpenVPN o il tuo computer locale come autorità di certificazione. Tuttavia, non lo consigliamo in quanto esporrebbe la tua VPN a falle di sicurezza. Secondo la documentazione ufficiale di OpenVPN, dovresti posizionare l’autorità di certificazione su un computer separato dedicato all’importazione e alla firma delle richieste di certificato. Pertanto, assumiamo che la tua autorità di certificazione si trovi su un server Ubuntu 18.04 separato che dispone anche di un utente non-root con permessi sudo e di un firewall di base. In questa guida, tutti i passaggi di installazione e configurazione saranno il più semplici possibile per ciascuna delle installazioni. Puoi anche dare un’occhiata al nostro tutorial su come configurare un server Open VPN con Docker.
Step 1 – Installare OpenVPN e EasyRSA
Innanzitutto, aggiorna l’indice dei pacchetti del tuo server VPN e installa OpenVPN. Puoi installare OpenVPN usando apt perché è disponibile nei repository predefiniti di Ubuntu:
|
1 2 |
sudo apt update sudo apt install openvpn |
Step 2: Creare un’autorità di certificazione
Crea una semplice autorità di certificazione (CA) per emettere certificati attendibili per il server OpenVPN. Per fare ciò, scarica l’ultima versione di EasyRSA sia sulla tua macchina CA che sul server OpenVPN usando wget. Per ottenere l’ultima versione, vai alla pagina Releases del progetto ufficiale EasyRSA su GitHub, copia il link di download per il file che termina con .tgz e incollalo nel seguente comando:
|
1 |
wget -P ~/ https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.4/EasyRSA-3.0.4.tgz <span class="s1">--no-check-certificate</span> |
Quindi, estrai il tarball:
|
1 2 |
cd ~ tar xvf EasyRSA-3.0.4.tgz |

A questo punto, tutto il software richiesto è stato installato con successo sul computer CA e sul server.
Step 3 – Configurare le variabili EasyRSA e compilare la CA
EasyRSA viene fornito con un file di configurazione che puoi modificare per definire una serie di variabili per la tua CA utilizzando questo comando:
|
1 |
cd ~/EasyRSA-3.0.4/ |
Nella directory è presente un file denominato vars.example. Crea una copia di questo file e nominala vars senza estensione:
|
1 |
cp vars.example vars |
Usa il tuo editor di testo preferito per aprire questo nuovo file:
|
1 |
nano vars |
Successivamente, trova le impostazioni che definiscono i valori predefiniti dei campi per i nuovi certificati. Sarà simile a questo:
|
1 2 3 4 5 6 |
#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 "me@example.net" #set_var EASYRSA_REQ_OU "My Organizational Unit" |
Aggiorna queste variabili con i valori che preferisci, come mostrato di seguito:
|
1 2 3 4 5 6 |
set_var EASYRSA_REQ_COUNTRY "SL" set_var EASYRSA_REQ_PROVINCE "Zurich" set_var EASYRSA_REQ_CITY "Zurich City" set_var EASYRSA_REQ_ORG "CloudSigma" set_var EASYRSA_REQ_EMAIL "admin@example.com" set_var EASYRSA_REQ_OU "Community" |
Salva e chiudi il file una volta pronto. Il passo successivo consiste nel richiamare lo script easyrsa ed eseguirlo con l'opzione init-pki per avviare l'infrastruttura a chiave pubblica sul server CA:
|
1 |
./easyrsa init-pki |

Successivamente, esegui il comando build-ca con l'opzione nopass in modo che non ti venga richiesta una password ogni volta che interagisci con la tua CA:
|
1 |
./easyrsa build-ca nopass |
Nell'output ti verrà chiesto di confermare il common name per la tua CA:

Fatto questo, la tua CA è configurata ed è pronta per iniziare a firmare le richieste di certificato.
Passo 4 – Generare il certificato del server, la chiave e i file di crittografia
Dopo che la CA è pronta, puoi generare la chiave privata e la richiesta di certificato dal server e poi inviarla alla CA per la firma creando il certificato richiesto. Per prima cosa, naviga nella directory EasyRSA sul server OpenVPN:
|
1 |
cd EasyRSA-3.0.4 |
Da lì, esegui lo script easyrsa con l'opzione init-pki. Sebbene tu abbia già eseguito questo comando sul computer della CA, questo comando deve essere eseguito anche qui. Questo perché le directory PKI del server e della CA sono diverse:
|
1 |
./easyrsa init-pki |
Quindi richiama nuovamente lo script easyrsa, questa volta con l'opzione gen-req, seguita dal nome generico del computer:
|
1 |
./easyrsa gen-req server nopass |
Questo creerà una chiave privata per il server e un file di richiesta di certificato denominato server.req. Copia la chiave del server nella directory /etc/openvpn/:
|
1 |
sudo cp ~/EasyRSA-3.0.4/pki/private/server.key /etc/openvpn/ |
Trasferisci il file server.req sul tuo computer CA utilizzando un metodo sicuro (come SCP nel seguente esempio):
|
1 |
scp ~/EasyRSA-3.0.4/pki/reqs/server.req cloudsigma@your_CA_ip:/tmp |
Successivamente, naviga nella directory EasyRSA sul tuo computer CA:
|
1 |
cd EasyRSA-3.0.4/ |
Usa nuovamente lo script easyrsa per importare il file server.req e aggiungi il suo common name dopo il percorso del file:
|
1 |
./easyrsa import-req /tmp/server.req server |
Quindi, firma la richiesta eseguendo lo script easyrsa con l'opzione sign-req seguita dal tipo di richiesta e dal common name. Per la richiesta di certificato del server OpenVPN, assicurati di utilizzare il tipo di richiesta server:
|
1 |
./easyrsa sign-req server server |
L'output richiede di verificare che la richiesta provenga da una fonte attendibile. Digitare yes e premere Invio per confermare. Verificare i dettagli mostrati di seguito per assicurarne l'accuratezza. Si prega di notare che questa richiesta non è stata ancora verificata tramite password.
Richiedere il soggetto e firmarlo come certificato del server per 3650 giorni:

Se la chiave CA è stata crittografata, a questo punto verrà richiesta la password. Successivamente, utilizzare un metodo sicuro per trasferire il certificato firmato al server VPN:
|
1 |
scp pki/issued/server.crt siigma@your_server_ip:/tmp |
Trasferire il file ca.rt sul server prima di disconnettersi dal computer CA:
|
1 |
scp pki/ca.crt siigma@our_server_ip:/tmp |
Successivamente, accedere nuovamente al server OpenVPN e copiare i file server.crt e ca.crt nella directory /etc/openvpn/:
|
1 |
sudo cp /tmp/{server.crt,ca.crt} /etc/openvpn/ |
Quindi, navigare nella directory EasyRSA:
|
1 |
cd ~/EasyRSA-3.0.4/ |
Inserire il seguente codice per creare una chiave Diffie-Hellman robusta da utilizzare durante lo scambio di chiavi:
|
1 |
./easyrsa gen-dh |
Al termine, generare una firma HMAC per migliorare la funzionalità di controllo dello stato TLS del server:
|
1 |
openvpn --genkey --secret ta.key |
Al termine del comando, copiare i due nuovi file nella directory / etc / openvpn /:
|
1 2 |
sudo cp ~/EasyRSA-3.0.4/ta.key /etc/openvpn/ sudo cp ~/EasyRSA-3.0.4/pki/dh.pem /etc/openvpn/ |
In questo modo vengono generati tutti i certificati e i file di chiave richiesti dal server. Ora è possibile creare il certificato e la chiave appropriati che il computer client utilizzerà per accedere al server OpenVPN.
Passo 4 – Generare il certificato client e la coppia di chiavi
Successivamente, creeremo una chiave client e diversi certificati. Se si hanno più client, è possibile ripetere questo processo per ciascun client. Si noti, tuttavia, che è necessario passare un valore di nome univoco allo script per ciascun client. In questo tutorial, chiameremo la prima coppia certificato/chiave client1. Innanzitutto, creare una struttura di directory nella propria home directory per memorizzare i certificati client e i file di chiave:
|
1 |
mkdir -p ~/client-configs/keys |
Poiché per motivi di sicurezza la coppia certificato/chiave e il file di configurazione del client vengono salvati in questa directory, è ora necessario revocare i permessi:
|
1 |
chmod -R 700 ~/client-configs |
Quindi tornare alla directory EasyRSA ed eseguire lo script easyrsa con le opzioni gen-req e nopass, oltre al nome generico del client:
|
1 2 |
cd ~/EasyRSA-3.0.4/ ./easyrsa gen-req client1 nopass |
Premere Invio per confermare il common name. Successivamente, copiare il file client1.key nella directory / client-configs / keys / precedentemente creata:
|
1 |
cp pki/private/client1.key ~/client-configs/keys/ |
Successivamente, utilizzare un metodo sicuro per trasferire il file client1.req al computer CA:
|
1 |
scp pki/reqs/client1.req sigma@your_CA_ip:/tmp |
Accedere al computer CA, navigare nella directory EasyRSA e importare la richiesta di certificato:
|
1 2 3 |
ssh siigma@your_CA_ip cd EasyRSA-3.0.4/ ./easyrsa import-req /tmp/client1.req client1 |

Quindi, come nel passaggio precedente, firmare la richiesta sul server. Ma questa volta è necessario specificare il tipo di richiesta client:
|
1 |
./easyrsa sign-req client client1 |
Al prompt, digitare yes per confermare che si desidera firmare la richiesta di certificato e che la richiesta proviene da una fonte attendibile. Inserire la parola “yes” per continuare o inserire qualsiasi altra cosa per annullare:
|
1 |
Conferma Richiesta Dettagli: Sì |

Se la chiave CA è stata crittografata, anche in questo caso verrà richiesto di inserire la password. Questo creerà un file di certificato client denominato client1.crt. Trasferire questo file di nuovo al server:
|
1 |
scp pki/issued/client1.crt siigma@your_server_ip:/tmp |
Riconnettiti via SSH al tuo server OpenVPN e copia il certificato del client nella directory / client-configs / keys /:
|
1 |
cp /tmp/client1.crt ~/client-configs/keys/ |
Successivamente, copia i file ca.crt e ta.key nella directory / client-configs / keys /:
|
1 2 |
cp ~/EasyRSA-3.0.4/ta.key ~/client-configs/keys/ sudo cp /etc/openvpn/ca.crt ~/client-configs/keys/ |
Allo stesso tempo, tutti i certificati e le chiavi del server e del client sono stati generati e salvati nelle directory corrispondenti sul server. Ora puoi continuare a configurare OpenVPN sul server.
Passo 5 – Configurazione del servizio OpenVPN
Dopo aver generato i certificati del client e del server, puoi configurare il servizio OpenVPN per utilizzare queste credenziali. Innanzitutto, copia il file di configurazione di esempio di OpenVPN nella tua directory di configurazione e poi estrailo per utilizzarlo come base per la configurazione:
|
1 2 |
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 nel tuo editor di testo preferito:
|
1 |
sudo nano /etc/openvpn/server.conf |
Quindi, trova la parte HMAC cercando il comando tls-auth:
|
1 |
tls-auth ta.key 0 # Questo file è segreto |
Trova la parte relativa alla password cercando la riga della password commentata. La cifratura AES-256-CBC offre un buon livello di cifratura ed è ben supportata. La riga non dovrebbe essere commentata, ma se lo è, elimina il “;” precedente:
|
1 |
cipher AES-256-CBC |
Sotto di essa, aggiungi un comando Auth per selezionare l'algoritmo di message-digest HMAC. SHA256 è una buona scelta per questo:
|
1 |
auth SHA256 |
Successivamente, trova la riga con l'istruzione dh che definisce i parametri Diffie-Hellman. A causa di alcune recenti modifiche a EasyRSA, il nome del file della chiave Diffie-Hellman potrebbe essere diverso da quello elencato nel file di configurazione di esempio del server. Se necessario, modifica il nome del file elencato qui eliminando 2048 per allinearlo con la chiave del passaggio precedente:
|
1 |
dh dh.pem |
Infine, trova le impostazioni user e group ed elimina il “;” all'inizio di ogni riga:
|
1 2 |
user nobody group nogroup |
Finora, le modifiche apportate al file server.conf di esempio dovrebbero consentire il funzionamento di OpenVPN.
Passo 6 – Configurazione di rete del server
Configura l'IP forwarding per instradare correttamente il traffico attraverso la VPN. Questo è essenziale per la funzionalità VPN fornita dal tuo server:
|
1 |
sudo nano /etc/sysctl.conf |
Cerca la riga commentata che imposta net.ipv4.ip_forward. Rimuovi il carattere “#” dall'inizio della riga per decommentare questa impostazione:
|
1 |
net.ipv4.ip_forward=1 |
Salva il file e chiudilo una volta terminato. Per leggere il file e applicare i valori per la sessione corrente, digita:
|
1 |
sudo sysctl -p |

Successivamente, aggiungi l'interfaccia di rete pubblica della tua macchina:
|
1 |
ip route | grep default |
La tua interfaccia pubblica è la stringa all'interno dell'output di questo comando che segue la parola “dev”. Ad esempio, questo risultato mostra l'interfaccia denominata ens3.

Apri il file /etc/ufw/before.rules per aggiungere la configurazione pertinente:
|
1 |
$ sudo nano /etc/ufw/before.rules |
Verso la parte superiore del file, aggiungi le righe evidenziate di seguito per impostare la policy predefinita per la catena POSTROUTING nella tabella nat e mascherare tutto il traffico proveniente dalla VPN. Sostituisci ens3 nella riga -A POSTROUTING qui sotto con l'interfaccia trovata nel comando precedente:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# rules.before # Regole che dovrebbero essere eseguite prima delle regole aggiunte dalla riga di comando di ufw. Le regole personalizzate # dovrebbero essere aggiunte a una di queste catene: # ufw-before-input # ufw-before-output # ufw-before-forward # START OPENVPN RULES # Regole della tabella NAT *nat :POSTROUTING ACCEPT [0:0] # Consenti il traffico dal client OpenVPN a wlp11s0 (cambia con l'interfaccia che hai scoperto!) -A POSTROUTING -s 10.8.0.0/8 -o ens3 -j MASQUERADE COMMIT # END OPENVPN RULES # Non eliminare queste righe richieste, altrimenti si verificheranno errori . . . |
Salva il file e chiudilo una volta terminato. Successivamente, devi indicare a UFW di consentire anche i pacchetti inoltrati per impostazione predefinita. Per fare ciò, apri il file /etc/default/ufw:
|
1 |
sudo nano /etc/default/ufw |
All'interno, trova la direttiva DEFAULT_FORWARD_POLICY e cambia il valore da DROP ad ACCEPT:
|
1 |
DEFAULT_FORWARD_POLICY="ACCEPT" |
Salva e chiudi il file quando hai finito. Successivamente, regola il firewall per abilitare il traffico verso OpenVPN. Se non hai modificato la porta e il protocollo nel file /etc/openvpn/server.conf, dovrai aprire il traffico UDP verso la porta 1194. Se hai modificato la porta e/o il protocollo, sostituisci qui i valori che hai selezionato. Nel caso in cui tu abbia dimenticato di aggiungere la porta SSH seguendo il tutorial dei prerequisiti, aggiungila anche qui:
|
1 2 |
sudo ufw allow 1194/udp sudo ufw allow OpenSSH |
Dopo aver aggiunto queste regole, disabilita e riabilita UFW per riavviarlo e caricare le modifiche da tutti i file che hai modificato:
|
1 2 |
sudo ufw disable sudo ufw enable |

Congratulazioni, il tuo server è ora configurato per gestire correttamente il traffico OpenVPN!
Conclusione
Se hai seguito questo tutorial fino in fondo, ora sei in grado di navigare in Internet in modo sicuro. Potrai tenere la tua identità, la tua posizione e il tuo traffico al sicuro da sguardi indiscreti.
Buon computing!
Commenti
Ancora nessun commento. Scrivi il primo.