Ricerca nel sito web

Come configurare un server OpenVPN su Debian 11


introduzione

Il tuo team deve accedere in modo privato e sicuro alle risorse interne da postazioni remote, attraverso reti non attendibili, come se fossero connesse alla rete privata? Una rete privata virtuale (VPN) consente loro di fare proprio questo. Un server VPN funge da singolo punto di accesso alla tua rete privata per gli utenti remoti ed è una soluzione più flessibile e appropriata rispetto, ad esempio, a un jump server SSH. Autentica gli utenti e crea un tunnel crittografato tra i loro dispositivi e la rete privata, fungendo da portale sicuro non solo per quella rete, ma anche per Internet in generale, se lo configuri in questo modo.

Potresti prendere in considerazione una VPN commerciale, ma puoi anche amministrare la tua VPN gratuita come quella di questo tutorial. OpenVPN è una soluzione VPN SSL (Secure Socket Layer) open source completa che si adatta a un'ampia gamma di configurazioni. In questo tutorial, configurerai un server OpenVPN su un server Debian 11 e quindi configurerai l'accesso ad esso da Windows, macOS, Linux, iOS e/o Android.

Nota: se prevedi di configurare un server OpenVPN su un DigitalOcean Droplet, tieni presente che noi, come molti provider di hosting, addebitiamo costi per le eccedenze di larghezza di banda. Tieni presente la quantità di larghezza di banda che probabilmente consumeranno i tuoi utenti VPN, poiché tutto ciò che fanno su Internet mentre sono connessi alla VPN consumerà la larghezza di banda di DigitalOcean (supponendo che tu scelga di instradare tutto il loro traffico attraverso la VPN).

Vedi questa pagina per maggiori informazioni.

Prerequisiti

Per completare questo tutorial, avrai bisogno di:

  • Due server Debian 11: uno per ospitare il tuo servizio OpenVPN e uno per fungere da autorità di certificazione (CA).
  • Un utente non root con privilegi sudo su entrambi i server. Puoi seguire la nostra guida all'installazione iniziale del server Debian 11 per configurare un utente con le autorizzazioni appropriate. Quel tutorial imposterà anche un firewall, che si presume sia presente su entrambi i server in questa guida.
  • Easy-RSA installato su entrambi i server. Questa è l'utilità che utilizzerai per gestire i certificati per la tua VPN. Segui i passaggi 1-2 di questa guida sul tuo server VPN e segui i passaggi 1-3 sul tuo server CA.

Sebbene sia tecnicamente possibile eseguire la tua CA dal tuo server OpenVPN o dalla tua macchina locale, è più sicuro mantenere la CA, ovvero la sua chiave privata, su un server separato che non è continuamente connesso a Internet. Poiché probabilmente prevedi di mantenere il tuo server VPN connesso a Internet 24 ore su 24, 7 giorni su 7, potrebbe essere più vulnerabile alla compromissione da parte di aggressori. Non vuoi mantenere la chiave privata della tua CA su un server così pubblico perché se un utente malintenzionato dovesse ottenere l'accesso alla chiave privata, potrebbe usarla per firmare nuovi certificati, dando loro accesso alla tua VPN. Secondo la documentazione ufficiale di OpenVPN, dovresti posizionare la tua CA su un server autonomo dedicato all'importazione e alla firma delle richieste di certificato.

Infine, tieni presente che se disabiliti l'autenticazione della password durante la configurazione di questi server, potresti incontrare difficoltà durante il trasferimento di file tra di loro più avanti in questa guida. Per risolvere questo problema, puoi riattivare l'autenticazione della password su ciascun server. In alternativa, puoi generare una coppia di chiavi SSH per ciascun server, quindi aggiungere la chiave SSH pubblica del server OpenVPN al file authorized_keys della macchina CA e viceversa. Vedere Come configurare le chiavi SSH su Debian 11 per istruzioni su come eseguire una di queste soluzioni.

Una volta soddisfatti questi prerequisiti, puoi passare al passaggio 1 di questo tutorial.

Passaggio 1: installazione di OpenVPN

Per iniziare, aggiorna l'indice dei pacchetti del tuo server VPN e installa OpenVPN. OpenVPN è disponibile nei repository predefiniti di Debian, quindi puoi usare apt per l'installazione:

  1. sudo apt update
  2. sudo apt install openvpn

Questo è tutto. Poiché hai già installato Easy-RSA su entrambi i server come prerequisito e hai inizializzato anche la CA, sei pronto per generare il certificato del server VPN.

Passaggio 2: creazione del certificato del server, della chiave e dei file di crittografia

Sul server OpenVPN, passa alla directory /easy-rsa all'interno della home directory dell'utente non root ed esegui lo script easyrsa con gen-req opzione seguita da un nome comune per la macchina. Questo potrebbe essere qualsiasi cosa tu voglia, ma può essere utile renderlo qualcosa di descrittivo. Nel corso di questo tutorial, il nome comune del server OpenVPN sarà semplicemente \server. Assicurati di includere anche l'opzione nopass. In caso contrario, il file della richiesta verrà protetto con una password, il che potrebbe causare problemi di autorizzazioni in seguito:

Nota: se qui scegli un nome diverso da \server, dovrai modificare alcune delle istruzioni riportate di seguito. Ad esempio, quando copi i file generati nella directory /etc/openvpn, dovrai sostituire i nomi corretti.Dovrai anche modificare il file /etc/openvpn/server.conf in seguito per puntare al .crt e al corretti .key.

  1. cd ~/easyrsa
  2. ./easyrsa gen-req server nopass

Lo script richiederà il nome comune che si desidera venga visualizzato nella richiesta di firma del certificato (CSR). Per impostazione predefinita, mostrerà il nome che hai passato a ./easyrsa gen-req (ad esempio, server). Digita ENTER per accettare il nome predefinito o inseriscine uno diverso.

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/:

  1. sudo cp ~/easy-rsa/pki/private/server.key /etc/openvpn/

Utilizzando un metodo sicuro (come SCP, nell'esempio seguente), trasferisci il file server.req sulla tua macchina CA:

  1. scp ~/easy-rsa/pki/reqs/server.req sammy@your_CA_ip:/tmp

Successivamente, sulla tua macchina CA, vai alla directory ~/easy-rsa:

  1. cd ~/easy-rsa

Utilizzando lo script easyrsa, importa il file server.req, seguendo il percorso del file con il nome comune che hai inserito durante la creazione del CSR:

  1. ./easyrsa import-req /tmp/server.req server

Quindi firma la richiesta eseguendo easyrsa con l'opzione sign-req, seguita 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, assicurati di utilizzare il tipo di richiesta server:

  1. ./easyrsa sign-req server server

Nell'output, ti verrà chiesto di verificare che la richiesta provenga da una fonte attendibile. Digita yes e premi INVIO per confermare:

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 825 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 mentre stavi seguendo il tutorial elencato nei prerequisiti, a questo punto ti verrà richiesta la passphrase.

Successivamente, trasferisci nuovamente il certificato firmato al tuo server VPN utilizzando un metodo sicuro:

  1. scp pki/issued/server.crt sammy@your_server_ip:/tmp

Trasferisci anche il file ca.crt sul tuo server VPN:

  1. scp pki/ca.crt sammy@your_server_ip:/tmp

Il tuo server OpenVPN ha bisogno di ca.crt in modo che sappia di potersi fidare dell'entità che ha firmato server.crt.

Successivamente, sul tuo server OpenVPN, copia i file server.crt e ca.crt nella tua directory /etc/openvpn/:

  1. sudo cp /tmp/{server.crt,ca.crt} /etc/openvpn/

Quindi vai alla tua directory ~/easy-rsa:

  1. cd ~/easy-rsa

Da lì, crea una forte chiave Diffie-Hellman da utilizzare durante lo scambio di chiavi digitando:

  1. ./easyrsa gen-dh

Questo potrebbe richiedere alcuni minuti per il completamento. Una volta fatto, genera una firma HMAC per rafforzare le capacità di verifica dell'integrità TLS del server:

  1. sudo openvpn --genkey secret ta.key

Al termine del comando, copia i due nuovi file nella directory /etc/openvpn/:

  1. sudo cp ~/easy-rsa/ta.key /etc/openvpn/
  2. sudo cp ~/easy-rsa/pki/dh.pem /etc/openvpn/

Con ciò, tutti i file di certificato e chiave necessari al tuo server sono stati generati. Sei pronto per creare i certificati e le chiavi corrispondenti che il tuo computer client utilizzerà per accedere al tuo server OpenVPN.

Passaggio 3: generazione di un certificato client e di una coppia di chiavi

Sebbene sia possibile generare una chiave privata e una richiesta di certificato sul computer client e quindi inviarla alla CA per la firma, questa guida delinea un processo per generare la richiesta di certificato sul server VPN. Il vantaggio di ciò è che possiamo creare uno script del server che genererà automaticamente i file di configurazione del client che contengono tutte le chiavi, i certificati e le opzioni di configurazione richiesti in un singolo file. Normalmente, il file di configurazione del client principale specifica i nomi dei file di chiavi e certificati separati, quindi dovresti distribuire più file a ciascun client. Ma è molto meglio includere l'intero corpo delle chiavi e del certificato all'interno del file di configurazione principale stesso in modo da poter semplificare il processo di adesione alla VPN. Genererai quel singolo file di configurazione client nel passaggio 8.

In questo passaggio, genererai prima la chiave client e la coppia di certificato. Se hai più di un cliente, puoi ripetere questo processo per ognuno. Tieni presente, tuttavia, che dovrai passare un valore di nome univoco allo script per ogni client. In questo tutorial, la prima coppia certificato/chiave viene chiamata client1.

Sul tuo server VPN, inizia creando una struttura di directory all'interno della tua home directory per archiviare il certificato client e i file chiave:

  1. mkdir -p ~/client-configs/keys

Poiché memorizzerai le coppie certificato/chiave e i file di configurazione dei tuoi clienti in questa directory, dovresti bloccarne le autorizzazioni ora come misura di sicurezza:

  1. chmod -R 700 ~/client-configs

Successivamente, torna alla directory ~/easy-rsa ed esegui lo script easyrsa con gen-req e nopass opzioni, insieme al nome comune per il client:

  1. cd ~/easy-rsa
  2. ./easyrsa gen-req client1 nopass

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

  1. cp pki/private/client1.key ~/client-configs/keys/

Successivamente, trasferisci il file client1.req sulla tua macchina CA utilizzando un metodo sicuro:

  1. scp pki/reqs/client1.req sammy@your_CA_ip:/tmp

Sulla tua macchina CA, vai alla directory ~/easy-rsa e importa la richiesta di certificato:

  1. cd ~/easy-rsa
  2. ./easyrsa import-req /tmp/client1.req client1

Quindi firma la richiesta come hai fatto per il server nel passaggio precedente. Questa volta, però, assicurati di specificare il tipo di richiesta client:

  1. ./easyrsa sign-req client client1

Al prompt, inserisci yes per confermare che intendi firmare la richiesta di certificato e che proviene da una fonte attendibile:

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

Ancora una volta, se hai crittografato la tua chiave CA, ti verrà richiesta la tua passphrase qui.

Questo creerà un file di certificato client denominato client1.crt. Ritrasferisci questo file al server:

  1. scp pki/issued/client1.crt sammy@your_server_ip:/tmp

Sul tuo server OpenVPN, copia il certificato client nella directory /client-configs/keys/:

  1. cp /tmp/client1.crt ~/client-configs/keys/

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

  1. sudo cp ~/easy-rsa/ta.key ~/client-configs/keys/
  2. sudo cp /etc/openvpn/ca.crt ~/client-configs/keys/

Con ciò, i certificati e le chiavi del tuo server e client sono stati tutti generati e sono archiviati nelle directory appropriate sul tuo server. Ci sono ancora alcune azioni che devono essere eseguite con questi file, ma quelle arriveranno nel passaggio 8. Per ora, puoi passare alla configurazione di OpenVPN sul tuo server.

Passaggio 4: configurazione del servizio OpenVPN

Ora che i certificati e le chiavi del client e del server sono stati generati, puoi iniziare a configurare il servizio OpenVPN per utilizzare queste credenziali.

Inizia copiando un file di configurazione OpenVPN di esempio nella directory di configurazione da utilizzare come base per la configurazione:

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

Apri il file di configurazione del server nel tuo editor di testo preferito:

  1. sudo nano /etc/openvpn/server.conf

Trova la sezione HMAC cercando la direttiva tls-auth. Questa riga dovrebbe già essere decommentata, ma in caso contrario rimuovere il carattere \; per decommentarlo.

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

Successivamente, trova la sezione sui cifrari crittografici cercando le righe cipher commentate. La crittografia AES-256-CBC offre un buon livello di crittografia ed è ben supportata. Ancora una volta, questa riga dovrebbe essere già decommentata, ma se non lo è, rimuovi semplicemente \; lo precede:

cipher AES-256-CBC

Al di sotto di questo, aggiungi una direttiva auth per selezionare l'algoritmo 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 Easy-RSA, il nome del file per la chiave Diffie-Hellman potrebbe essere diverso da quello elencato nel file di configurazione del server di esempio. Se necessario, modifica il nome del file qui elencato rimuovendo 2048 in modo che sia allineato con la chiave che hai generato nel passaggio precedente:

dh dh.pem

Infine, trova le impostazioni user e group e rimuovi \; all'inizio di ciascuna per decommentare queste righe:

user nobody
group nogroup

Le modifiche che hai apportato al file di esempio server.conf fino a questo punto sono necessarie affinché OpenVPN funzioni. Le modifiche descritte di seguito sono facoltative, sebbene anch'esse siano necessarie per molti casi d'uso comuni.

Invia modifiche DNS per reindirizzare tutto il traffico attraverso la VPN (opzionale)

Le impostazioni di cui sopra creeranno la connessione VPN tra le due macchine, ma non forzeranno alcuna connessione a utilizzare il tunnel. Se desideri utilizzare la VPN per instradare tutto il tuo traffico, probabilmente vorrai inviare le impostazioni DNS ai computer client.

Ci sono alcune direttive nel file server.conf che devi modificare per abilitare questa funzionalità. Trova la sezione redirect-gateway e rimuovi il punto e virgola \; dall'inizio della riga redirect-gateway per decommentarla:

push "redirect-gateway def1 bypass-dhcp"

Subito sotto, trova la sezione dhcp-option. Ancora una volta, rimuovi \; da davanti a entrambe le righe per decommentarle:

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

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

Regola la porta e il protocollo (facoltativo)

Per impostazione predefinita, il server OpenVPN utilizza la porta 1194 e il protocollo UDP per accettare le connessioni client. Se hai bisogno di utilizzare una porta diversa a causa di ambienti di rete restrittivi in cui potrebbero trovarsi i tuoi client, puoi modificare l'opzione port. Se non stai ospitando contenuti web sul tuo server OpenVPN, la porta 443 è una scelta popolare poiché di solito è consentita tramite le regole del firewall.

# Optional!
port 443

Spesso, il protocollo è limitato anche a quella porta. In tal caso, cambia proto da UDP a TCP:

# Optional!
proto tcp

Se passi il protocollo a TCP, dovrai cambiare il valore della direttiva explicit-exit-notify da 1 a 0, poiché questo La direttiva è utilizzata solo da UDP. In caso contrario durante l'utilizzo di TCP, si verificheranno errori all'avvio del servizio OpenVPN:

# Optional!
explicit-exit-notify 0

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

Punta a credenziali non predefinite (facoltativo)

Se hai selezionato un nome diverso durante il comando ./easyrsa gen-req per il certificato del server nel passaggio 2, modifica le righe cert e key che vedi puntare ai file .crt e .key appropriati. Se hai utilizzato il nome predefinito, \server, questo è già impostato correttamente:

cert server.crt
key server.key

Quando hai finito, salva e chiudi il file.

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

Passaggio 5: regolazione della configurazione della rete del server

Ci sono alcuni aspetti della configurazione di rete del server che devono essere ottimizzati in modo che OpenVPN possa instradare correttamente il traffico attraverso la VPN. Il primo di questi è l'inoltro IP, un metodo per determinare dove deve essere instradato il traffico IP.

Regola l'impostazione di inoltro IP predefinita del tuo server modificando il file /etc/sysctl.conf:

  1. 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

Salva e chiudi il file quando hai finito.

Per leggere il file e regolare i valori per la sessione corrente, digitare:

  1. sudo sysctl -p
Output
net.ipv4.ip_forward = 1

Se hai seguito la guida all'installazione iniziale del server Debian 11 elencata nei prerequisiti, dovresti disporre di un firewall UFW. Indipendentemente dal fatto che tu usi il firewall per bloccare il traffico indesiderato (cosa che dovresti quasi sempre fare), per questa guida hai bisogno di un firewall per manipolare parte del traffico che entra nel server. Alcune delle regole del firewall devono essere modificate per abilitare il masquerading, un concetto di iptables che fornisce la traduzione dinamica degli indirizzi di rete (NAT) al volo per instradare correttamente le connessioni client.

Prima di aprire il file di configurazione del firewall per aggiungere le regole di mascheramento, devi prima trovare l'interfaccia di rete pubblica della tua macchina. Per fare ciò, digita:

  1. ip route | grep default

La tua interfaccia pubblica è la stringa che segue \dev nell'output del comando. Ad esempio, l'output seguente mostra un'interfaccia denominata eth0, che è evidenziata:

Output
default via 203.0.113.1 dev eth0 proto static

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

  1. 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 righe evidenziate di seguito. Questo imposterà la politica predefinita per la catena POSTROUTING nella tabella nat e maschererà tutto il traffico proveniente dalla VPN. Ricorda di sostituire eth0 nella riga -A POSTROUTING sottostante 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 eth0 (change to the interface you discovered!)
-A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE
COMMIT
# END OPENVPN RULES

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

Salva e chiudi il file quando hai finito.

Successivamente, devi dire 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 modifica il valore da DROP a ACCEPT:

DEFAULT_FORWARD_POLICY="ACCEPT"

Salva e chiudi il file quando hai finito.

Successivamente, regola il firewall stesso per consentire il traffico verso OpenVPN. Se non hai modificato la porta e il protocollo nel file /etc/openvpn/server.conf, dovrai aprire il traffico UDP alla porta 1194. Se hai modificato la porta e/o il protocollo, sostituisci i valori che hai selezionato qui.

Inoltre, nel caso in cui non hai aggiunto la porta SSH durante il completamento del tutorial dei prerequisiti, aggiungila anche qui:

  1. sudo ufw allow 1194/udp
  2. sudo ufw allow OpenSSH

Dopo aver aggiunto queste regole, disattiva e riattiva UFW per riavviarlo e caricare le modifiche da tutti i file che hai modificato:

  1. sudo ufw disable
  2. sudo ufw enable

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

Passaggio 6: avvio e abilitazione del servizio OpenVPN

Sei finalmente pronto per avviare il servizio OpenVPN sul tuo server. Questo viene fatto usando l'utility systemd systemctl:

  1. sudo systemctl start openvpn@server

Questo avvia il servizio openvpn usando /etc/openvpn/server.conf come file di configurazione. Se invece avessi specificato openvpn@server2, ad esempio, systemd avrebbe utilizzato il nome file /etc/openvpn/server2.conf all'avvio del servizio.

Ricontrolla che il servizio sia stato avviato correttamente digitando:

  1. sudo systemctl status openvpn@server

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

Output
● openvpn@server.service - OpenVPN connection to server Loaded: loaded (/lib/systemd/system/openvpn@.service; disabled; vendor preset: enabled) Active: active (running) since Wed 2022-12-21 03:39:24 UTC; 29s ago Docs: man:openvpn(8) https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage https://community.openvpn.net/openvpn/wiki/HOWTO Main PID: 3371 (openvpn) Status: "Initialization Sequence Completed" Tasks: 1 (limit: 3587) Memory: 1.2M CGroup: /system.slice/system-openvpn.slice/openvpn@server.service └─3371 /usr/sbin/openvpn --daemon ovpn-server --status /run/openvpn/server.status 10 --cd /etc/openvpn --config /etc/openvpn/server.conf --writepid /run/openvpn/

Puoi anche verificare che l'interfaccia OpenVPN tun0 sia disponibile digitando:

  1. ip addr show tun0

Questo produrrà un'interfaccia configurata:

Output
3: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast 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 inet6 fe80::dd60:3a78:b0ca:1659/64 scope link stable-privacy valid_lft forever preferred_lft forever

Dopo aver avviato il servizio, abilitalo in modo che si avvii automaticamente all'avvio:

  1. sudo systemctl enable openvpn@server

Il tuo servizio OpenVPN è ora attivo e funzionante. Prima di poter iniziare a usarlo, tuttavia, devi prima creare un file di configurazione per il computer client. Questo tutorial ha già illustrato come creare coppie certificato/chiave per i client e il passaggio successivo dimostrerà come creare un'infrastruttura che genererà i file di configurazione del client.

Passaggio 7: creazione dell'infrastruttura di configurazione del client

La creazione di file di configurazione per i client OpenVPN può essere in qualche modo complicata, poiché ogni client deve avere la propria configurazione e ciascuno deve essere allineato con le impostazioni delineate nel file di configurazione del server. Anziché scrivere un singolo file di configurazione che può essere utilizzato solo su un client, questo passaggio delinea un processo per la creazione di un'infrastruttura di configurazione del client che è possibile utilizzare per generare file di configurazione al volo. Per prima cosa creerai un file di configurazione \base, quindi eseguirai uno script che genererà file di configurazione del client univoci utilizzando il file di configurazione di base più il certificato e le chiavi univoci del client.

Inizia creando una nuova directory sul tuo server OpenVPN in cui memorizzerai i file di configurazione del client all'interno della directory client-configs che hai creato in precedenza:

  1. mkdir -p ~/client-configs/files

Successivamente, copia un file di configurazione del client di esempio nella directory client-configs da utilizzare come configurazione di base:

  1. cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client-configs/base.conf

Apri questo nuovo file nel tuo editor di testo:

  1. nano ~/client-configs/base.conf

All'interno, individua la direttiva remote. Questo indirizza il client all'indirizzo del tuo server OpenVPN, l'indirizzo IP pubblico del tuo server OpenVPN. Se hai deciso di cambiare la porta su cui è in ascolto il server OpenVPN, dovrai anche cambiare 1194 con la porta che hai selezionato:

. . .
# 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, decommenta le direttive user e group rimuovendo \; all'inizio di ogni riga:

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

Trova le direttive che impostano i file ca, cert e key. Commenta queste direttive poiché a breve aggiungerai l'intero contenuto del certificato e dei file chiave al file di base:

# 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, poiché 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

Rispecchia le impostazioni 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. Devi impostarlo su \1 affinché la VPN funzioni correttamente sul computer 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'utility 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.

Salva e chiudi il file quando hai finito.

Successivamente, crea un semplice script che creerà un nuovo file di configurazione contenente il certificato, la chiave, i file di crittografia e la configurazione di base nella directory ~/client-configs/files. Apri un nuovo file chiamato make_config.sh all'interno della directory ~/client-configs:

  1. nano ~/client-configs/make_config.sh

All'interno, aggiungi il seguente contenuto, assicurandoti di modificare sammy nell'account utente non root del tuo server:

#!/bin/bash

# First argument: Client identifier

KEY_DIR=/home/sammy/client-configs/keys
OUTPUT_DIR=/home/sammy/client-configs/files
BASE_CONFIG=/home/sammy/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 e chiudi il file quando hai finito.

Prima di proseguire, assicurati di contrassegnare questo file come eseguibile digitando:

  1. chmod 700 ~/client-configs/make_config.sh

Questo script creerà una copia del file base.conf che hai creato, raccoglierà tutti i file di certificato e chiave che hai creato per il tuo client, ne estrarrà il contenuto, li aggiungerà alla copia della configurazione di base file ed esportare tutto questo contenuto in un nuovo file di configurazione del client. Ciò significa che, invece di dover gestire separatamente la configurazione, il certificato e i file chiave del client, tutte le informazioni richieste vengono archiviate in un unico posto. Il vantaggio di ciò è che se in futuro dovessi aggiungere un client, puoi semplicemente eseguire questo script da una posizione centrale per creare rapidamente il file di configurazione che contiene tutte le informazioni necessarie in un unico file facile da distribuire.

Tieni presente che ogni volta che aggiungi un nuovo client, dovrai generare nuove chiavi e certificati prima di poter eseguire questo script e generare il suo file di configurazione. Farai un po' di pratica usando questo script nel passaggio successivo.

Passaggio 8: generazione delle configurazioni client

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

  1. cd ~/client-configs
  2. sudo ./make_config.sh client1

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

  1. ls ~/client-configs/files
Output
client1.ovpn

Devi trasferire questo file sul dispositivo che intendi utilizzare come client. Ad esempio, questo potrebbe essere il tuo computer locale o un dispositivo mobile.

Mentre le applicazioni esatte utilizzate per eseguire questo trasferimento dipenderanno dal sistema operativo del tuo dispositivo e dalle tue preferenze personali, un metodo affidabile e sicuro consiste nell'utilizzare SFTP (protocollo di trasferimento file SSH) o SCP (Secure Copy) sul back-end. Questo trasporterà i file di autenticazione VPN del tuo cliente su una connessione crittografata.

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

  1. sftp sammy@your_server_ip:client-configs/files/client1.ovpn ~/

Ecco diversi strumenti e tutorial per trasferire in modo sicuro i file dal server a un computer locale:

  • Come utilizzare SFTP per trasferire file in modo sicuro con un server remoto
  • WinSCP
  • FileZilla
  • Cyberduck

Passaggio 9: installazione della configurazione del client

Questa sezione illustra come installare un profilo VPN client su Windows, macOS, Linux, iOS e Android. Nessuna di queste istruzioni del client dipende l'una dall'altra, quindi sentiti libero di saltare a quella applicabile al tuo dispositivo.

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, in linea con il primo file client che hai generato.

finestre

Installazione

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

Nota: OpenVPN necessita di privilegi amministrativi per l'installazione.

Dopo aver installato OpenVPN, copia il file .ovpn in:

C:\Program Files\OpenVPN\config

Potrebbe non essere possibile trasferire il file direttamente in questa posizione se non si esegue il programma di trasferimento file (ad es. WinSCP) come amministratore. Puoi eseguirlo come amministratore o trasferire il file nella home directory dell'utente non amministratore e quindi copiarlo in C:\Program Files\OpenVPN\config localmente, approvando la copia a un amministratore posizione quando richiesto.

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

Devi eseguire OpenVPN come amministratore ogni volta che viene utilizzato, anche da account amministrativi. Per fare ciò senza dover fare clic con il tasto destro e selezionare Esegui come amministratore ogni volta che usi la VPN, devi preimpostarlo 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 non disponga dei diritti di amministratore, quindi i privilegi elevati sono necessari.

Per impostare l'applicazione OpenVPN in modo che venga sempre eseguita come amministratore, fai clic con il pulsante destro del mouse sull'icona del collegamento e vai su Proprietà. Nella parte inferiore della scheda Compatibilità, fai clic sul pulsante Modifica impostazioni per tutti gli utenti. Nella nuova finestra, seleziona Esegui questo programma come amministratore e fai clic su Applica.

Collegamento

Ogni volta che avvii la GUI di OpenVPN, Windows ti chiederà se desideri consentire al programma di apportare modifiche al tuo computer. Fare clic su Sì. L'avvio dell'applicazione client OpenVPN inserisce solo l'applet nella barra delle applicazioni in modo da poter connettere e disconnettere la VPN secondo necessità; in realtà non effettua la connessione VPN.

Una volta avviato OpenVPN, avvia una connessione accedendo all'applet della barra delle applicazioni e facendo clic con il pulsante destro del mouse sull'icona dell'applet OpenVPN. Questo apre il menu contestuale. Seleziona client1 nella parte superiore del menu (questo è 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 del mouse sull'icona dell'applet OpenVPN, selezionare il profilo del client e fare clic su Disconnetti.

Mac OS

Installazione

Pagina dei download di Tunnelblick. Fai doppio clic sul file .dmg scaricato e segui le istruzioni per l'installazione.

Verso la fine del processo di installazione, Tunnelblick ti chiederà se disponi di file di configurazione. Risposta Ho i file di configurazione e lascio che Tunnelblick finisca. Apri una finestra del Finder e fai doppio clic su client1.ovpn. Tunnelblick installerà il profilo client. Sono richiesti privilegi amministrativi.

Collegamento

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, quindi sulla voce di menu Connect client1 per avviare la connessione VPN.

Linux

Installazione

Se stai usando Linux, ci sono una varietà di strumenti che puoi usare a seconda della tua distribuzione. Il tuo ambiente desktop o gestore di finestre potrebbe includere anche utilità di connessione.

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

Su Debian, puoi installarlo proprio come hai fatto sul server digitando:

  1. sudo apt update
  2. sudo apt install openvpn

Su CentOS puoi abilitare i repository EPEL e poi installarlo digitando:

  1. sudo yum install epel-release
  2. sudo yum install openvpn

Configurazione

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

  1. ls /etc/openvpn
Output
update-resolv-conf

Successivamente, modifica il file di configurazione del client OpenVPN che hai trasferito:

  1. nano client1.ovpn

Se sei riuscito a trovare un file update-resolv-conf, decommenta le tre righe che hai aggiunto per regolare le impostazioni DNS:

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

Se stai utilizzando CentOS, modifica la direttiva group da nogroup a nobody in modo che corrisponda ai gruppi disponibili della distribuzione:

group nobody

Salva e chiudi il file.

Ora puoi connetterti alla VPN semplicemente indirizzando il comando openvpn al file di configurazione del client:

  1. sudo openvpn --config client1.ovpn

Questo dovrebbe connetterti alla tua VPN.

iOS

Installazione

Dall'App Store del tuo iPhone o iPad, cerca e installa questo articolo di supporto di Apple per trasferire il tuo file client1.ovpn dal tuo computer locale al tuo dispositivo iOS, copiandolo specificamente nell'applicazione OpenVPN.

Ora avvia l'app OpenVPN sul dispositivo iOS. Dovrebbe vedere che c'è un nuovo profilo pronto per l'importazione. Tocca AGGIUNGI per aggiungerlo.

Collegamento

OpenVPN è ora pronto per l'uso con il nuovo profilo. Avviare la connessione toccando CONNETTI. Quando lo fai, iOS ti avviserà che OpenVPN vorrebbe aggiungere configurazioni VPN tramite le impostazioni del tuo sistema. Tocca Consenti e usa FaceID o TouchID per autorizzare le modifiche.

Nota: l'interruttore VPN in Impostazioni > Generali > VPN e gestione dispositivo > VPN potrebbe attivare e disattivare correttamente la connessione, ma è meglio utilizzare l'interruttore nell'app OpenVPN Connect

Androide

Installazione

Apri il Google Play Store. Cerca e installa Android OpenVPN Connect, l'applicazione client Android OpenVPN ufficiale.

Puoi trasferire il profilo .ovpn collegando il dispositivo Android al tuo computer tramite USB e copiando il file. In alternativa, se disponi di un lettore di schede SD, puoi rimuovere la scheda SD del dispositivo, copiare il profilo su di essa e quindi reinserire la scheda nel dispositivo Android.

Collegamento

Quando sAvvia l'app OpenVPN, questa inizia nella schermata Importa profilo. Toccare la scheda FILE e quindi toccare SFOGLIA per trovare e selezionare il file client1.ovpn.

Dopo aver selezionato il file, l'app ti chiederà di importare il profilo. Tocca OK.

Nella schermata Profilo importato, seleziona la casella di controllo Connetti dopo l'importazione, quindi tocca AGGIUNGI nell'angolo in alto a destra.

Ti verrà chiesto se ti fidi dell'applicazione OpenVPN. Scegliere OK per avviare la connessione. Per disconnetterti dalla VPN, attiva l'interruttore nella pagina Profilo.

Passaggio 10: test della connessione VPN (facoltativo)

Nota: questo metodo per testare la tua connessione VPN funzionerà solo se hai scelto di instradare tutto il tuo traffico attraverso la VPN nel passaggio 4 tramite la sezione facoltativa Invia modifiche DNS per reindirizzare tutto il traffico attraverso la VPN.

Una volta installato tutto, un semplice controllo conferma che tutto funziona correttamente. Senza avere una connessione VPN abilitata, apri un browser e vai su DNSLeakTest.

Il sito restituirà l'indirizzo IP assegnato dal tuo provider di servizi Internet e come appari al resto del mondo. Per controllare le tue impostazioni DNS attraverso lo stesso sito Web, fai clic su Test esteso e ti dirà quali server DNS stai utilizzando.

Ora collega il client OpenVPN al tuo server OpenVPN e aggiorna il browser. Ora dovrebbe apparire un indirizzo IP completamente diverso (quello del tuo server VPN), ed è così che appari al mondo. Ancora una volta, il test esteso di DNSLeakTest controllerà le tue impostazioni DNS e confermerà che stai utilizzando i resolver DNS spinti dalla tua VPN.

Ricorda: se hai scelto di instradare tutto il traffico dei client VPN attraverso il tuo server OpenVPN e il tuo server OpenVPN è in esecuzione su un DigitalOcean Droplet, tutto ciò che i tuoi client VPN fanno su Internet mentre sono connessi alla VPN consumerà la larghezza di banda di DigitalOcean. Se hai molti client attivi, potresti incorrere in eccedenze di larghezza di banda.

Passaggio 11: revoca dei certificati client

Occasionalmente, potrebbe essere necessario revocare un certificato client per impedire un ulteriore accesso al server OpenVPN.

Per farlo, vai alla directory ~/easy-rsa sulla tua macchina CA:

  1. cd ~/easy-rsa

Successivamente, esegui lo script easyrsa con l'opzione revoke, seguita dal nome del client che desideri revocare:

  1. ./easyrsa revoke client2

Questo ti chiederà di confermare la revoca inserendo yes:

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

Se la tua chiave privata CA è protetta da una passphrase, inseriscila quando richiesto.

Dopo aver confermato l'azione, la CA revocherà completamente il certificato del cliente. Tuttavia, il tuo server OpenVPN al momento non ha modo di verificare se i certificati dei client sono stati revocati e il client avrà ancora accesso alla VPN. Per correggere questo problema, crea un elenco di revoche di certificati (CRL) sulla tua macchina CA (inserendo nuovamente la tua passphrase CA, se necessario):

  1. ./easyrsa gen-crl

Questo genererà un file chiamato crl.pem. Trasferisci in modo sicuro questo file sul tuo server OpenVPN:

  1. scp ~/easy-rsa/pki/crl.pem sammy@your_server_ip:/tmp

Sul tuo server OpenVPN, copia questo file nella directory /etc/openvpn/:

  1. sudo cp /tmp/crl.pem /etc/openvpn

Successivamente, apri il file di configurazione del server OpenVPN:

  1. 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 revoca dei certificati che abbiamo creato ogni volta che viene effettuato un tentativo di connessione:

. . .
crl-verify crl.pem

Salva e chiudi il file.

Infine, riavvia OpenVPN per implementare la revoca del certificato:

  1. sudo systemctl restart openvpn@server

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

Per revocare client aggiuntivi, segui questa procedura:

  1. Revocare il certificato con il comando ./easyrsa revoke client_name
  2. Genera un nuovo CRL
  3. Trasferisci il nuovo file crl.pem sul tuo server OpenVPN e copialo nella directory /etc/openvpn per sovrascrivere il vecchio elenco.
  4. Riavvia il servizio OpenVPN.

Puoi utilizzare questo processo per revocare qualsiasi certificato che hai emesso in precedenza per il tuo server.

Conclusione

I membri del tuo team remoto possono ora connettersi in modo sicuro alle tue risorse interne come se fossero direttamente connessi alla rete privata. Con l'introduzione della tua nuova VPN, potresti prendere in considerazione lo spostamento di determinate risorse che sono attualmente accessibili a Internet aperto, magari protette con qualcosa di meno robusto (ad esempio, l'autenticazione di base HTTP) rispetto all'infrastruttura a chiave pubblica che hai appena configurato, sulla tua rete privata rete e dietro la VPN. Con un solo server e alcuni software open source, hai fatto un grande passo avanti verso la protezione dei dati e dell'infrastruttura critici.

Un altro tipo di strumento di sicurezza e privacy simile a una VPN è un proxy web. Come una VPN, un proxy Web funge da intermediario tra gli utenti finali e la risorsa Internet a cui desiderano accedere, fornendo anonimato agli utenti finali. Sebbene un proxy web sia pensato solo per il traffico web e non fornisca la crittografia, potrebbe comunque essere uno strumento utile per il tuo team da utilizzare quando la VPN non è necessaria. Se sei curioso, dai un'occhiata al nostro tutorial Come configurare Squid Proxy per connessioni private su Ubuntu 22.04.