OpenVPN è una soluzione SSL VPN che implementa l'estensione di rete sicura di livello OSI 2 o OSI 3, utilizzando il protocollo SSL/TLS standard del settore ed accoglie un'ampia gamma di configurazioni. OpenVPN supporta client con sistemi operativi Windows, Linux, FreeBSD, OpenBSD, macOS, iOS e Android.
Supporta metodi di autenticazione client flessibili basati su certificati, smart card e/o credenziali nome utente/password e consente a utenti e/o gruppi politiche di controllo degli accessi mediante regole firewall applicate all'interfaccia virtuale VPN.
Di seguito sono esposti i concetti generali con i passaggi per la realizzazione di una connessione VPN utilizzando OpenVPN; al termine sono riportati i link alle guide di esempio per la configurazione/implementazione nel caso di sistema operativo Windows Server 2019 ed Ubuntu 20.04.
La configurazione di una VPN spesso implica il collegamento di sottoreti private da posizioni diverse. L'IANA (
Internet Assigned Numbers Authority) ha riservato i seguenti tre blocchi dello spazio degli indirizzi IP per le Internet private (codificate in RFC 1918):
- 10.0.0.0 – 10.255.255.255 (prefisso 10/8)
- 172.16.0.0 – 172.31.255.255 (prefisso 172.16/12)
- 192.168.0.0 – 192.168.255.255 (prefisso 192.168/16)
É importante selezionare indirizzi che riducano al minimo la probabilità di conflitti di indirizzi IP o di sottorete. Ci sono alcuni aspetti della configurazione di rete del server che devono essere ottimizzati in modo che possano instradare correttamente il traffico attraverso la VPN:
- inoltro degli indirizzi IP - la capacità di un sistema operativo di accettare i pacchetti di rete in entrata su un'interfaccia, riconoscere che non sono pensati per il sistema stesso, ma che dovrebbero essere passati a un'altra rete e quindi inoltrati di conseguenza;
- configurazione del firewall - deve essere eseguita sulla macchina virtuale che funge da server VPN di accesso remoto:
- porta SSH;
- porte utilizzate dalle soluzioni VPN (ad esempio, la porta UDP/1194 predefinita per OpenVPN);
É necessario assicurarsi che le VM nella rete vDC (
virtual Data Center) a cui ci si vuole connettere, utilizzando la VPN, instradino il traffico della rete al server VPN. Una soluzione è implementare un NAT one-to-many per i client connessi.
Il primo passo nella creazione di una configurazione
OpenVPN è stabilire una PKI (infrastruttura a chiave pubblica). La PKI è composta da:
- un certificato separato (noto anche come chiave pubblica) e una chiave privata per il server e ciascun client;
- un certificato e una chiave dell'autorità di certificazione (CA) master utilizzati per firmare ciascuno dei certificati server e client;
OpenVPN supporta l'autenticazione bidirezionale basata sui certificati, il che significa che il client deve autenticare il certificato del server e il server deve autenticare il certificato del client. Per la gestione delle PKI, OpenVPN suggerisce l'uso di
easy-rsa, una CLI (
Command-Line Interface) per creare e gestire una CA PKI. I passaggi che descrivono come configurare la propria autorità di certificazione e generare certificati e chiavi sono disponibili nella
documentazione di OpenVPN.
Implementazione lato Server
Il server OpenVPN utilizza la porta 1194 e il protocollo UDP per impostazione predefinita per accettare le connessioni client. Se è necessario utilizzare una porta diversa a causa di ambienti di rete restrittivi in cui potrebbero trovarsi i client, è possibile modificare le opzioni di porta e protocollo. La porta 1194 è il numero di porta ufficiale assegnato da IANA per OpenVPN, ma qualsiasi numero di porta compreso tra 1 e 65535 funzionerà se non è già utilizzato sul server. La porta 443 è la scelta più comune, poiché di solito è consentita dalle regole del firewall.
La configurazione è archiviata nel file server.conf e contiene informazioni quali l'indirizzo IP e la porta su cui il servizio è in ascolto, l'elenco di crittografia del servizio, il relativo certificato di servizio e così via.
Come punto di partenza per la tua configurazione, si consiglia l'utilizzo dei file di configurazione di esempio di OpenVPN, che possono essere trovati su:
- la directory sample-config-files della distribuzione di origine OpenVPN
- la directory sample-config-files in /usr/share/doc/packages/openvpn o /usr/share/doc/openvpn se installato da un pacchetto RPM o DEB
- Start Menu > All Programs > OpenVPN > OpenVPN Sample Configuration Files su Windows
Utilizzando i file di configurazione di esempio di OpenVPN sarà creata una VPN utilizzando un'interfaccia di rete virtuale TUN (modalità instradata), che ascolterà le connessioni Client sulla porta UDP 1194 e distribuirà indirizzi virtuali ai Client di connessione dalla sottorete 10.8.0.0/24. Modificando i parametri dei file presenti nella directory sopra descritta è possibile cambiare il relativo comportamento.
Prima di utilizzare il file di configurazione di esempio, è necessario modificare i parametri ca, cert, key e dh (Diffie hellman) in modo che puntino ai file che sono stati generati nella sezione PKI. A questo punto, il file di configurazione del server è utilizzabile.
Implementazione lato Client
I passaggi successivi sono relativi alla configurazione del client: generazione del certificato e della coppia di chiavi, e alla creazione del file di configurazione del client.
Il passaggio finale riguarda i file di configurazione del client che rispecchia le direttive predefinite impostate nel file di configurazione del server:
- come per il file di configurazione del server, innanzitutto modificare i parametri ca, cert, key e dh in modo che puntino ai file generati in precedenza. Si noti che ogni client dovrebbe avere la propria coppia certificato/chiave. Solo il file ca è universale sul server OpenVPN e su tutti i client.
- modifica la direttiva remota in modo che punti al nome host/indirizzo IP e al numero di porta del server OpenVPN: usa l'indirizzo IP pubblico che è NAT al server VPN.
Esempi di come realizzare una connessione VPN con OpenVPN: