VPN

Una VPN (Virtual Private Network) consente di instaurare un collegamento sicuro e cifrato fra due o più sistemi utilizzando una rete pubblica come Internet.

Il sistema supporta due tipi di VPN:

  1. roadwarrior: collegamento di un terminale remoto alla rete interna

  2. net2net o tunnel: collegamento di due reti remote

Per impostazione predefinita, il traffico di rete tra le VPN è bloccato dal firewall. Per consentire tale traffico vai all’applicazione: ref: firewall-section e attiva il campo: guilabel: ʻAbilitato` sotto: guilabel:` Impostazioni> Traffico fra OpenVPN roadwarrior, tunnel OpenVPN e tunnel IPSec`.

OpenVPN

OpenVPN consente di creare facilmente collegamenti VPN, porta con sé numerosi vantaggi tra cui:

  • Disponibilità di client per vari sistemi operativi: Windows, Linux, Apple, Android, iOS

  • Attraversamento NAT multipli, ovvero non è necessario un IP statico dedicato al firewall

  • Elevata robustezza

  • Semplicità di configurazione

Roadwarrior

Il server OpenVPN in modalità roadwarrior consente il collegamento di client multipli.

I metodi di autenticazione supportati sono:

  • utente di sistema e password

  • certificato

  • Utente di sistema, password e certificato

  • Utente di sistema, One Time Password (OTP) e certificato

Il server può operare in due modalità: routed o bridged. Si consiglia di scegliere la modalità bridged solo se il tunnel deve trasportare traffico non-IP.

Per consentire ad un client di stabilire una VPN:

  1. Creare un nuovo account: è consigliato creare un account VPN dedicato che utilizzi un certificato. In questo modo non è necessario creare un utente di sistema per garantire l’accesso VPN.

    È invece obbligatorio scegliere un account di sistema se si desidera utilizzare l’autenticazione basata su nome utente e password o one time password (2FA).

  2. Scaricare il file contiene la configurazione e i certificati. In alternativa, il file può essere inviato all’utente via mail (disponibile solo nel nuovo Server Manager).

  3. Importare il file all’interno del client ed avviare la VPN.

Nota

Quando si utilizza l’autenticazione basata su OTP, gli utenti dovranno abilitare la 2FA prima di accedere alla VPN. È necessario inoltre assicurarsi che gli utenti non abilitino l’opzione «Salva password» sui loro client, perché una nuova OTP deve essere inserita ogni volta che viene avviata la VPN. Una password salvata all’interno di un client VPN potrebbe essere rilevata come un errore di accesso da Fail2ban.

Accounting

Ogni volta che un client si connette al server OpenVPN, l’accesso viene registrato in un database di accounting. Le statistiche di accesso sono disponibili nel nuovo Server Manager. Per ogni utente, le statistiche includono:

  • nome client

  • indirizzo IP virtuale

  • indirizzo IP reale

  • orario della connessione

  • orario della disconnessione

  • byte trasmessi

Notifica e-mail

Il server può inviare una notifica e-mail ogni volta che un utente si connette o si disconnette dal server OpenVPN roadwarrior.

Le e-mail di notifica sono solo in inglese. L’indirizzo del mittente può essere configurato da sezione-notifica-e-mail. Questa funzione è disabilitata per impostazione predefinita e può essere abilitata da riga di comando.

Per abilitare l’uso della funzione:

config setprop openvpn@host-to-net NotifyStatus enabled
config setprop openvpn@host-to-net NotifyAddresses user1@nethserver.org,user2@nethserver.org

La prop NotifyAddresses può contenere un elenco di indirizzi di posta separati da virgole. Le notifiche vengono inviate tramite l’installazione locale di Postfix, quindi lo stato di consegna dei messaggi può essere controllato in /var/log/maillog.

Esempio di e-mail in caso di connessione utente:

The user test1 established a VPN connection on Fri Mar  4 18:31:49 2022.

Public IP address:  1.2.3.4
Private IP address: 10.2.3.2

Esempio di e-mail in caso di disconnessione utente:

The user test1 was disconnected from VPN server.

Duration:  17 seconds
Sent:            2410 bytes
Received:  4099 bytes

Tunnel (net2net)

Quando si crea una connessione OpenVPN net2net, un server ricopre il ruolo di master. Tutti gli altri server sono considerati slave (client).

Un client può essere collegato ad un altro NethServer od ad un qualsiasi altro firewall che utilizzi OpenVPN.

Tutti i tunnel utilizzano OpenVPN in modalità routed, ma esistono due tipi di topologie: subnet e p2p (Point to Point)

Topologia: subnet

Questa è la topologia consigliata. Nella topologia subnet, il server accetterà le connessioni e agirà come server DHCP per ogni client connesso.

In questo scenario

  • il server gestisce l’autenticazione dei client utilizzando certificati TLS

  • il server può eseguire il push delle rotte locali verso i client remoti

  • il client si possono autenticare con certificati TLS o tramite nome utente e password

Topologia: P2P

Nella topologia p2p, l’amministratore deve configurare un server per ciascun client.

In questo scenario:

  • l’unico metodo di autenticazione supportato è la PSK (Pre-Shared Key). Si consiglia di utilizzare un canale sicuro (come SSH o HTTPS) per scambiare la PSK

  • l’amministratore deve selezionare un IP per entrambi gli end point

  • le rotte per le reti remote devono essere configurate su ogni end point

Per configurare un tunnel procedere come segue:

  1. Accedere al server del tunnel e aprire la pagina OpenVPN tunnels, spostarsi nella scheda Tunnel servers e cliccare sul bottone Create new

  2. Valorizzare i campi richiesti ponendo attenzione al fatto che:

    • guilabel:Public IPs and/or public FQDN è una lista di IP pubblici o di nomi host che verranno usati dai client per collegarsi al server attraverso Internet

    • Local networks è una lista di reti locali che saranno accessibili dai server remoti. Se la topologia è di tipo p2p, la stessa lista sarà utilizzata per valorizzare il campo Remote networks del client

    • Remote networks è una lista di reti remote che si trovano dietro al server remoto e che saranno accessibili dagli host della rete locale

  3. Dopo aver salvato la configurazione, cliccare sull’azione Download e selezionare Configurazione client

  4. Accedere al client del tunnel, aprire la pagina OpenVPN tunnels, spostarsi sulla scheda Tunnel clients e cliccare sul bottone Upload

Funzionalità avanzate

L’interfaccia web consente di configurare funzionalità avanzate quali:

  • lato client, nel campo Remote hosts possono essere specificati indirizzi multipli per ridondanza; il client OpenVPN tenterà di connettersi a ciascun host rispettando l’ordine di inserimento

  • WAN priority: se il client ha più WAN (interfacce red), l’opzione consente di selezionare l’ordine in cui le WAN saranno utilizzate per connettersi al server remoto.

  • Protocollo: è importante rammentare che OpenVPN è progettata per funzionare in modo ottimale in UDP, ma è possibile utilizzare TCP nelle situazioni in cui non è possibile fare ricorso ad UDP

  • cifratura: l’algoritmo crittografico utilizzato per crittografare tutto il traffico. Se non viene selezionato in modo esplicito, il server e il client cercheranno di negoziare la migliore cifratura disponibile su entrambi i lati

  • compressione LZO: abilitata di default, può essere disabilitata quando si utilizzano server or client legacy

Modalità legacy

I tunnel possono ancora essere creati utilzzando gli account roadwarrior.

I passi da eseguire sul server master sono:

  • Abilitare il server roadwarrior

  • Creare un account solo VPN per ciascun slave che dovrà collegarsi

  • Durante la creazione dell’account ricordarsi di specificare la rete remota configurata dietro allo slave

I passi da eseguire sullo slave sono:

  • Creare un client dalla pagina Client specificando i dati di collegamento al server master

  • Copiare e incollare il contenuto dei certificati scaricati dalla pagina di configurazione del master

IPsec

Il protocollo IPsec (IP Security) è lo standard “de facto” nei tunnel VPN, viene utilizzato tipicamente per creare tunnel di tipo net to net ed è supportato da tutti i produttori. È possibile utilizzare questo protocollo per creare tunnel VPN tra un NethServer ed un dispositivo di un altro produttore nonché tunnel VPN tra 2 NethServer.

Nota

IPSec non è progettato per collegare singoli host ma per la configurazione net2net, questo implica due gateway su entrambe le estremità (almeno un’interfaccia RED e una GREEN).

Tunnel (net2net)

IPsec è estremamente affidabile e compatibile con molti dispositivi. Infatti, è una scelta ovvia quando è necessario creare collegamenti net2net tra firewall di diversi produttori.

A differenza della configurazione OpenVPN, in un tunnel IPsec, i firewall sono considerati nodi pari livello.

Se si sta creando un tunnel tra due NethServer, dati A e B i firewall:

  1. Configurare il server A e specificare l’indirizzo remoto e la LAN del server B. Se il campo Remote IP è valorizzato con % any, il server rimane in attesa della connessione dell’altro endpoint.

  2. Configurare il secondo firewall B replicando la configurazione da A all’interno della sezione remota. Il valore speciale %any è consentito in un solo lato!

Se un endpoint è dietro un NAT, i valori per Local identifier e Remote identifier devono essere impostati con nomi univoci personalizzati preceduti da @. I nomi comuni sono le posizioni geografiche dei server, ad esempio il nome di stato o città.