Come Configurare un Server VPN IKEv2 con StrongSwan su Ubuntu 22.04

Introduzione

A virtual private network, or VPN, allows you to securely encrypt traffic as it travels through untrusted networks, such as those at the coffee shop, a conference, or an airport.

Internet Key Exchange v2, o IKEv2, è un protocollo che consente il tunneling diretto IPSec tra il server e il client. Nelle implementazioni VPN IKEv2, IPSec fornisce la crittografia per il traffico di rete. IKEv2 è supportato nativamente su alcune piattaforme (OS X 10.11+, iOS 9.1+ e Windows 10) senza necessità di applicazioni aggiuntive e gestisce abbastanza agevolmente gli inconvenienti del client.

In questo tutorial, configurerai un server VPN IKEv2 utilizzando StrongSwan su un server Ubuntu 22.04. Successivamente imparerai come connetterti ad esso con client Windows, macOS, Ubuntu, iOS e Android.

Prerequisiti

Per completare questo tutorial, avrai bisogno di:

Passo 1 — Installazione di StrongSwan

Prima di tutto, installerai StrongSwan, un demone IPSec open-source che configurerai come server VPN. Installerai anche il componente dell’infrastruttura a chiave pubblica (PKI) in modo da poter creare un’Authority (CA) per fornire credenziali alla tua infrastruttura.

Inizia aggiornando la cache dei pacchetti locali:

  1. sudo apt update

Poi installa il software digitando:

  1. sudo apt install strongswan strongswan-pki libcharon-extra-plugins libcharon-extauth-plugins libstrongswan-extra-plugins

Il pacchetto aggiuntivo libcharon-extauth-plugins viene utilizzato per garantire che vari client possano autenticarsi al server utilizzando un nome utente e una passphrase condivisi. Il pacchetto libstrongswan-extra-plugins è incluso affinché Strongswan supporti le suite crittografiche a curve ellittiche che utilizzano la crittografia Curve25519.

Ora che tutto è installato, passa alla creazione dei certificati.

Passo 2 — Creazione di un’Authority (CA) per i Certificati

Un server IKEv2 richiede un certificato per identificarsi ai client. Per aiutare a creare il certificato richiesto, il pacchetto strongswan-pki include un’utilità chiamata pki per generare un’Authority (CA) e certificati del server.

Per iniziare, crea alcune directory per archiviare tutti gli asset su cui lavorerai. La struttura delle directory corrisponde a alcune delle directory in /etc/ipsec.d, dove alla fine sposterai tutti gli elementi che crei:

  1. mkdir -p ~/pki/{cacerts,certs,private}

Successivamente blocca i permessi in modo che i nostri file privati non possano essere visualizzati da altri utenti:

  1. chmod 700 ~/pki

Ora che hai una struttura di directory per archiviare tutto, puoi generare una chiave radice. Si tratterà di una chiave RSA da 4096 bit che verrà utilizzata per firmare il certificato della tua autorità di certificazione radice.

Esegui questi comandi per generare la chiave:

  1. pki --gen --type rsa --size 4096 --outform pem > ~/pki/private/ca-key.pem

Dopo di che puoi passare alla creazione della tua autorità di certificazione radice, utilizzando la chiave che hai appena generato per firmare il certificato radice:

  1. pki --self --ca --lifetime 3650 --in ~/pki/private/ca-key.pem \
  2. --type rsa --dn "CN=VPN root CA" --outform pem > ~/pki/cacerts/ca-cert.pem

Il flag --lifetime 3650 viene utilizzato per garantire che il certificato radice dell’autorità sarà valido per 10 anni. Il certificato radice di un’autorità non cambia di solito, poiché dovrebbe essere redistribuito a ogni server e client che ne dipendono, quindi 10 anni è un valore di scadenza predefinito sicuro.

Puoi modificare il valore del nome distinto (DN) se vuoi. Il nome comune (campo CN) qui è solo un indicatore, quindi non è necessario che corrisponda a nulla nella tua infrastruttura.

Ora che hai la tua autorità di certificazione radice in funzione, puoi creare un certificato che il server VPN utilizzerà.

Passo 3 — Generazione di un Certificato per il Server VPN

Ora creerai un certificato e una chiave per il server VPN. Questo certificato consentirà al client di verificare l’autenticità del server utilizzando il certificato CA appena generato.

Per prima cosa, crea una chiave privata per il server VPN con il seguente comando:

  1. pki --gen --type rsa --size 4096 --outform pem > ~/pki/private/server-key.pem

Successivamente, crea e firma il certificato del server VPN con la chiave dell’autorità di certificazione che hai creato nel passaggio precedente. Esegui il seguente comando, ma cambia il Nome Comune (CN) e il Campo dei Nomi Alternativi del Soggetto (SAN) con il nome DNS o l’indirizzo IP del tuo server VPN:

  1. pki --pub --in ~/pki/private/server-key.pem --type rsa \
  2. | pki --issue --lifetime 1825 \
  3. --cacert ~/pki/cacerts/ca-cert.pem \
  4. --cakey ~/pki/private/ca-key.pem \
  5. --dn "CN=server_domain_or_IP" --san server_domain_or_IP \
  6. --flag serverAuth --flag ikeIntermediate --outform pem \
  7. > ~/pki/certs/server-cert.pem

Nota: Se stai utilizzando un indirizzo IP invece di un nome DNS, sarà necessario specificare più voci --san. La riga nel blocco di comando precedente in cui specifica il nome distinto (--dn ...) dovrà essere modificata con l’aggiunta di una voce come la seguente riga esemplificativa:

--dn "CN=indirizzo IP" --san @indirizzo_IP --san indirizzo_IP \

Il motivo di questa voce aggiuntiva --san @indirizzo_IP è che alcuni client controllano se il certificato TLS ha sia una voce DNS che una voce di indirizzo IP per un server quando ne verificano l’identità.

L’opzione --flag serverAuth viene utilizzata per indicare che il certificato sarà utilizzato esplicitamente per l’autenticazione del server, prima che venga stabilito il tunnel crittografato. L’opzione --flag ikeIntermediate viene utilizzata per supportare client macOS più vecchi.

Ora che hai generato tutti i file TLS/SSL necessari per StrongSwan, puoi spostare i file nella directory /etc/ipsec.d digitando:

  1. sudo cp -r ~/pki/* /etc/ipsec.d/

In questo passaggio, hai creato una coppia di certificati che verranno utilizzati per proteggere le comunicazioni tra il client e il server. Hai anche firmato i certificati con la chiave CA, quindi il client sarà in grado di verificare l’autenticità del server VPN utilizzando il certificato CA. Con tutti questi certificati pronti, sei pronto per passare alla configurazione di StrongSwan.

Passaggio 4 — Configurazione di StrongSwan

StrongSwan ha un file di configurazione predefinito con alcuni esempi, ma dovremo fare la maggior parte della configurazione noi stessi. Facciamo un backup del file per riferimento prima di iniziare da zero:

  1. sudo mv /etc/ipsec.conf{,.original}

Crea e apri un nuovo file di configurazione vuoto utilizzando il tuo editor di testo preferito. Qui, userai nano:

  1. sudo nano /etc/ipsec.conf

Nota: Mentre lavori attraverso questa sezione per configurare la parte server della tua VPN, incontrerai impostazioni che si riferiscono ai lati sinistro e destro di una connessione. Quando si lavora con le VPN IPSec, il lato sinistro per convenzione si riferisce al sistema locale che stai configurando, in questo caso il server. Le direttive del lato destro in queste impostazioni si riferiranno a client remoti, come telefoni e altri computer.

Quando passerai alla configurazione dei client più avanti in questo tutorial, i file di configurazione del client faranno riferimento a se stessi utilizzando varie direttive sinistre, e il server sarà indicato utilizzando la terminologia del lato destro.

Prima, diremo a StrongSwan di registrare gli stati del daemon per il debug e consentire connessioni duplicate. Aggiungi queste righe al file:

/etc/ipsec.conf
config setup
    charondebug="ike 1, knl 1, cfg 0"
    uniqueids=no

Successivamente, creeremo una sezione di configurazione per la nostra VPN. Diremo anche a StrongSwan di creare tunnel VPN IKEv2 e di caricare automaticamente questa sezione di configurazione all’avvio. Aggiungi le seguenti righe al file:

/etc/ipsec.conf
. . .
conn ikev2-vpn
    auto=add
    compress=no
    type=tunnel
    keyexchange=ikev2
    fragmentation=yes
    forceencaps=yes

Configureremo anche il rilevamento dei peer inattivi per eliminare eventuali connessioni “pendenti” nel caso in cui il client si disconnetta inaspettatamente. Aggiungi queste righe:

/etc/ipsec.conf
. . .
conn ikev2-vpn
    . . .
    dpdaction=clear
    dpddelay=300s
    rekey=no

Successivamente, configureremo i parametri IPSec del “lato sinistro” del server. Ciascuno dei seguenti parametri garantisce che il server sia configurato per accettare connessioni dai client e per identificarsi correttamente. Aggiungerai ciascuna di queste impostazioni al file /etc/ipsec.conf una volta che ti sarai familiarizzato con cosa sono e perché vengono utilizzate:

  • left=%any Il valore %any garantisce che il server utilizzerà l’interfaccia di rete dove riceve le connessioni in ingresso per la comunicazione successiva con i client. Ad esempio, se si sta connettendo un client attraverso una rete privata, il server utilizzerà l’indirizzo IP privato dove riceve il traffico per il resto della connessione.
  • leftid=@server_domain_or_IP Questa opzione controlla il nome che il server presenta ai client. Quando combinata con l’opzione successiva leftcert, l’opzione leftid garantisce che il nome configurato del server e il Nome Distinto (DN) contenuto nel certificato pubblico corrispondano.
  • leftcert=server-cert.pem Questa opzione è il percorso al certificato pubblico per il server che hai configurato nel Passaggio 3. Senza di essa, il server non sarà in grado di autenticarsi con i client o completare la negoziazione della configurazione di IKEv2.
  • leftsendcert=always Il valore always garantisce che ogni client che si connette al server riceverà sempre una copia del certificato pubblico del server come parte della configurazione iniziale della connessione.
  • leftsubnet=0.0.0.0/0 L’ultima opzione “left” che aggiungerai informa i client sui sottoinsiemi raggiungibili dietro il server. In questo caso, 0.0.0.0/0 viene utilizzato per rappresentare l’intero set di indirizzi IPv4, il che significa che il server indicherà ai client di inviare tutto il loro traffico attraverso la VPN per impostazione predefinita.

Ora che sei familiare con ciascuna delle opzioni pertinenti del lato “left”, aggiungile tutte al file in questo modo:

/etc/ipsec.conf
. . .
conn ikev2-vpn
    . . .
    left=%any
    leftid=@server_domain_or_IP
    leftcert=server-cert.pem
    leftsendcert=always
    leftsubnet=0.0.0.0/0

Nota: Quando si configura l’ID del server (leftid), includere il carattere @ solo se il server VPN verrà identificato da un nome di dominio:

/etc/ipsec.conf
    . . .    leftid=@vpn.example.com
    . . .

Se il server verrà identificato dal suo indirizzo IP, inserire semplicemente l’indirizzo IP in:

/etc/ipsec.conf
    . . .
    leftid=your_server_ip
    . . .

Successivamente, possiamo configurare i parametri IPSec del lato “destro” del client. Ciascuno dei seguenti parametri indica al server come accettare le connessioni dai client, come i client devono autenticarsi al server e i range di indirizzi IP privati e i server DNS che i client utilizzeranno. Aggiungere ciascuna di queste impostazioni al file /etc/ipsec.conf una volta che si è familiarizzati con cosa sono e perché vengono utilizzate:

  • right=%any L’opzione %any per il lato right della connessione istruisce il server ad accettare connessioni in ingresso da qualsiasi client remoto.
  • rightid=%any Questa opzione garantisce che il server non rifiuterà le connessioni dai client che forniscono un’identità prima che il tunnel criptato venga stabilito.
  • rightauth=eap-mschapv2 Questa opzione configura il metodo di autenticazione che i client utilizzeranno per autenticarsi al server. eap-mschapv2 è utilizzato qui per una vasta compatibilità per supportare client come Windows, macOS e dispositivi Android.
  • rightsourceip=10.10.10.0/24 Questa opzione istruisce il server ad assegnare indirizzi IP privati ai client dal pool di IP specificato 10.10.10.0/24.
  • rightdns=8.8.8.8,8.8.4.4 Questi indirizzi IP sono i risolutori DNS pubblici di Google. Possono essere cambiati per utilizzare altri risolutori pubblici, i risolutori del server VPN o qualsiasi altro risolutore a cui i client possono accedere.
  • rightsendcert=never Questa opzione istruisce il server che i client non devono inviare un certificato per autenticarsi.

Ora che sei familiare con le opzioni richieste del lato “right” per la VPN, aggiungi le seguenti linee a /etc/ipsec.conf:

/etc/ipsec.conf
. . .
conn ikev2-vpn
    . . .
    right=%any
    rightid=%any
    rightauth=eap-mschapv2
    rightsourceip=10.10.10.0/24
    rightdns=8.8.8.8,8.8.4.4
    rightsendcert=never

Ora diremo a StrongSwan di chiedere al client le credenziali dell’utente quando si connettono:

/etc/ipsec.conf
. . .
conn ikev2-vpn
    . . .
    eap_identity=%identity

Infine, aggiungi le seguenti linee per supportare client Linux, Windows, macOS, iOS e Android. Queste linee specificano i vari algoritmi di scambio chiave, hashing, autenticazione e crittografia (comunemente denominati Suite di cifratura) che StrongSwan permetterà ai diversi client di utilizzare:

/etc/ipsec.conf
. . .
conn ikev2-vpn
    . . .
    ike=chacha20poly1305-sha512-curve25519-prfsha512,aes256gcm16-sha384-prfsha384-ecp384,aes256-sha1-modp1024,aes128-sha1-modp1024,3des-sha1-modp1024!
    esp=chacha20poly1305-sha512,aes256gcm16-ecp384,aes256-sha256,aes256-sha1,3des-sha1!

Ogni suite di cifratura supportata è delineata dalle altre da una virgola. Ad esempio chacha20poly1305-sha512-curve25519-prfsha512 è una suite e aes256gcm16-sha384-prfsha384-ecp384 è un’altra. Le suite di cifratura elencate qui sono selezionate per garantire la più ampia compatibilità possibile tra client Windows, macOS, iOS, Android e Linux.

Il file di configurazione completo dovrebbe apparire così:

/etc/ipsec.conf
config setup
    charondebug="ike 1, knl 1, cfg 0"
    uniqueids=no

conn ikev2-vpn
    auto=add
    compress=no
    type=tunnel
    keyexchange=ikev2
    fragmentation=yes
    forceencaps=yes
    dpdaction=clear
    dpddelay=300s
    rekey=no
    left=%any
    leftid=@server_domain_or_IP
    leftcert=server-cert.pem
    leftsendcert=always
    leftsubnet=0.0.0.0/0
    right=%any
    rightid=%any
    rightauth=eap-mschapv2
    rightsourceip=10.10.10.0/24
    rightdns=8.8.8.8,8.8.4.4
    rightsendcert=never
    eap_identity=%identity
    ike=chacha20poly1305-sha512-curve25519-prfsha512,aes256gcm16-sha384-prfsha384-ecp384,aes256-sha1-modp1024,aes128-sha1-modp1024,3des-sha1-modp1024!
    esp=chacha20poly1305-sha512,aes256gcm16-ecp384,aes256-sha256,aes256-sha1,3des-sha1!

Salva e chiudi il file una volta verificato di aver aggiunto correttamente ciascuna riga. Se hai usato nano, fallo premendo CTRL + X, Y, quindi ENTER.

Ora che hai configurato i parametri VPN, puoi passare alla creazione di un account in modo che gli utenti possano connettersi al server.

Passaggio 5 — Configurazione dell’Autenticazione VPN

Il tuo server VPN è ora configurato per accettare le connessioni dei client, ma non ci sono ancora credenziali configurate. Dovrai configurare un paio di cose in un file di configurazione speciale chiamato ipsec.secrets:

  • Devi dire a StrongSwan dove trovare la chiave privata per il certificato del nostro server, in modo che il server possa autenticarsi con i client.
  • Devi anche configurare un elenco di utenti che saranno autorizzati a connettersi alla VPN.

Apriamo il file delle segrete per modificarlo:

  1. sudo nano /etc/ipsec.secrets

Prima di tutto, indica a StrongSwan dove trovare la chiave privata e come analizzarla.

/etc/ipsec.secrets
: RSA "server-key.pem"

Assicurati che la riga inizi con il carattere : e che ci sia uno spazio dopo di esso in modo che l’intera riga sia : RSA "server-key.pem".

Quindi, definirai le credenziali dell’utente. Puoi inventare qualsiasi combinazione di nome utente e password che desideri:

/etc/ipsec.secrets
your_username : EAP "your_password"

Salva e chiudi il file. Ora che hai finito di lavorare sui parametri VPN, riavvia il servizio VPN in modo che la nostra configurazione venga applicata:

  1. sudo systemctl restart strongswan-starter

Ora che il server VPN è stato completamente configurato con entrambe le opzioni del server e le credenziali utente, è tempo di passare alla configurazione della parte più importante: il firewall.

Passaggio 6 — Configurazione del Firewall e dell’Inoltro IP del Kernel

Con la configurazione di StrongSwan completata, è necessario configurare il firewall per consentire il traffico VPN e inoltrarlo.

Se hai seguito il tutorial preliminare per la configurazione iniziale del server, dovresti avere attivato un firewall UFW. Se non hai ancora configurato UFW, dovresti iniziare aggiungendo una regola per consentire le connessioni SSH attraverso il firewall in modo che la sessione attuale non si chiuda quando abiliti UFW:

  1. sudo ufw allow OpenSSH

Successivamente, abilita il firewall digitando:

  1. sudo ufw enable

Poi, aggiungi una regola per consentire il traffico UDP alle porte standard IPSec, 500 e 4500:

  1. sudo ufw allow 500,4500/udp

Successivamente, aprirai uno dei file di configurazione di UFW per aggiungere alcune politiche di basso livello per il routing e l’inoltro dei pacchetti IPSec. Tuttavia, prima di fare ciò, devi individuare quale interfaccia di rete sul nostro server viene utilizzata per l’accesso a Internet. Trova questa interfaccia interrogando il dispositivo associato alla route predefinita:

  1. ip route show default

La tua interfaccia pubblica dovrebbe seguire la parola “dev”. Ad esempio, questo risultato mostra l’interfaccia chiamata eth0, che è evidenziata nell’esempio seguente:

Output
default via your_server_ip dev eth0 proto static

Quando hai la tua interfaccia di rete pubblica, apri il file /etc/ufw/before.rules nel tuo editor di testo. Le regole in questo file vengono aggiunte al firewall prima delle altre regole di input e output usuali. Vengono utilizzate per configurare la traduzione degli indirizzi di rete (NAT) in modo che il server possa instradare correttamente le connessioni da e verso i client e Internet.

  1. sudo nano /etc/ufw/before.rules

Vicino all’inizio del file (prima della linea *filter), aggiungi il seguente blocco di configurazione. Modifica ogni istanza di eth0 nella configurazione sopra riportata in modo che corrisponda al nome dell’interfaccia che hai trovato con ip route. Le righe *nat creano regole in modo che il firewall possa instradare e manipolare correttamente il traffico tra i client VPN e Internet. La riga *mangle regola la dimensione massima del segmento del pacchetto per prevenire potenziali problemi con determinati client VPN:

/etc/ufw/before.rules
*nat
-A POSTROUTING -s 10.10.10.0/24 -o eth0 -m policy --pol ipsec --dir out -j ACCEPT
-A POSTROUTING -s 10.10.10.0/24 -o eth0 -j MASQUERADE
COMMIT

*mangle
-A FORWARD --match policy --pol ipsec --dir in -s 10.10.10.0/24 -o eth0 -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1361:1536 -j TCPMSS --set-mss 1360
COMMIT

*filter
:ufw-before-input - [0:0]
:ufw-before-output - [0:0]
:ufw-before-forward - [0:0]
:ufw-not-local - [0:0]
. . .

Successivamente, dopo le linee di definizione *filter e catena, aggiungi un altro blocco di configurazione:

/etc/ufw/before.rules
. . .
*filter
:ufw-before-input - [0:0]
:ufw-before-output - [0:0]
:ufw-before-forward - [0:0]
:ufw-not-local - [0:0]

-A ufw-before-forward --match policy --pol ipsec --dir in --proto esp -s 10.10.10.0/24 -j ACCEPT
-A ufw-before-forward --match policy --pol ipsec --dir out --proto esp -d 10.10.10.0/24 -j ACCEPT

Queste righe dicono al firewall di inoltrare il traffico ESP (Encapsulating Security Payload) in modo che i client VPN possano connettersi. ESP fornisce sicurezza aggiuntiva per i pacchetti VPN mentre attraversano reti non attendibili.

Quando hai finito, salva e chiudi il file una volta verificato di aver aggiunto correttamente ogni riga. Se hai usato nano, fallo premendo CTRL + X, Y, quindi INVIO.

Prima di riavviare il firewall, è necessario modificare alcuni parametri del kernel di rete per consentire il routing da un’interfaccia all’altra. Il file che controlla queste impostazioni si chiama /etc/ufw/sysctl.conf. Dovrai configurare alcune cose nel file.

Prima di tutto, è necessario attivare l’inoltro dei pacchetti IPv4 in modo che il traffico possa muoversi tra le interfacce VPN e la rete pubblica sul server. Successivamente, disabiliterai la scoperta del MTU del percorso per evitare problemi di frammentazione dei pacchetti. Infine, non accetteremo reindirizzamenti ICMP né invieremo reindirizzamenti ICMP per prevenire attacchi man-in-the-middle.

Apri il file di configurazione dei parametri del kernel di UFW utilizzando nano o il tuo editor di testo preferito:

  1. sudo nano /etc/ufw/sysctl.conf

Ora aggiungi il seguente parametro net/ipv4/ip_forward=1 alla fine del file per abilitare l’inoltro dei pacchetti tra le interfacce:

/etc/ufw/sysctl.conf
. . .
net/ipv4/ip_forward=1

Successivamente, blocca l’invio e la ricezione di pacchetti di reindirizzamento ICMP aggiungendo le seguenti righe alla fine del file:

/etc/ufw/sysctl.conf
. . .
net/ipv4/conf/all/accept_redirects=0
net/ipv4/conf/all/send_redirects=0

Infine, disabilita la scoperta del MTU del percorso aggiungendo questa riga alla fine del file:

/etc/ufw/sysctl.conf
. . .
net/ipv4/ip_no_pmtu_disc=1

Salva il file quando hai finito. Ora puoi abilitare tutte le modifiche disabilitando e riabilitando il firewall, poiché UFW applica queste impostazioni ogni volta che si riavvia:

  1. sudo ufw disable
  2. sudo ufw enable

Ti verrà chiesto di confermare il processo. Digita Y per abilitare nuovamente UFW con le nuove impostazioni.

Passaggio 7 — Testare la Connessione VPN su Windows, macOS, Ubuntu, iOS e Android

Ora che hai tutto impostato, è tempo di provarlo. Prima di tutto, dovrai copiare il certificato CA che hai creato e installarlo sul/i dispositivo/i client che si connetteranno alla VPN. Il modo più semplice per farlo è accedere al tuo server e visualizzare i contenuti del file del certificato:

  1. cat /etc/ipsec.d/cacerts/ca-cert.pem

Vedrai un output simile a questo:

Output
-----BEGIN CERTIFICATE----- MIIFNDCCAxygAwIBAgIIHCsidG5mXzgwDQYJKoZIhvcNAQEMBQAwODELMAkGA1UE . . . H2YUdz8XNHrJHvMQKWFpi0rlEcMs+MSXPFWE3Q7UbaZJ/h8wpSldSUbQRUlphExJ dJ4PX+MUJO/vjG1/ie6Kh25xbBAc3qNq8siiJZDwrg6vjEK7eiZ1rA== -----END CERTIFICATE-----

Copia questo output sul tuo computer, inclusi i tag -----BEGIN CERTIFICATE----- e -----END CERTIFICATE-----, e salvalo in un file con un nome riconoscibile, come ca-cert.pem. Assicurati che il file che crei abbia l’estensione .pem.

In alternativa, usa SFTP per trasferire il file sul tuo computer.

Una volta scaricato il file ca-cert.pem sul tuo computer, puoi configurare la connessione alla VPN.

Connessione da Windows

Ci sono diversi modi per importare il certificato radice e configurare Windows per connettersi a una VPN. Il primo metodo utilizza strumenti grafici per ogni passaggio. Il secondo metodo utilizza comandi PowerShell, che possono essere scriptati e modificati per adattarsi alla configurazione della tua VPN.

Nota: Queste istruzioni sono state testate su installazioni di Windows 10 con le versioni 1903 e 1909.

Configurazione di Windows con Strumenti Grafici

Per prima cosa, importa il certificato radice seguendo questi passaggi:

  1. Premi WINDOWS+R per aprire la finestra di dialogo Esegui, e inserisci mmc.exe per avviare la Console di Gestione di Windows.

  2. Dal menu File, vai su Aggiungi o Rimuovi Snap-in, seleziona Certificati dalla lista degli snap-in disponibili, e clicca su Aggiungi.

  3. Vogliamo che la VPN funzioni con qualsiasi utente, quindi seleziona Account Computer e clicca su Avanti.

  4. Stiamo configurando le cose sul computer locale, quindi seleziona Computer Locale, poi clicca su Termina.

  5. Sotto il nodo Radice Console, espandi la voce Certificati (Computer Locale), espandi Autorità di Certificazione Radice Attendibili, e seleziona la voce Certificati:

  6. Dal menu Azione, seleziona Tutte le Attività e clicca su Importa per visualizzare la procedura guidata di importazione del certificato. Clicca su Avanti per passare all’introduzione.

  7. Schermata File da Importare, premi il pulsante Sfoglia, assicurati di cambiare il tipo di file da “Certificato X.509 (.cer;.crt)” a “Tutti i File (.)”, e seleziona il file ca-cert.pem che hai salvato. Quindi clicca su Avanti.

  8. Assicurati che il Archivio certificati sia impostato su Autorità di certificazione radice attendibili, e clicca su Avanti.

  9. Clicca su Fine per importare il certificato.

Quindi configura la VPN con questi passaggi:

  1. Avvia Pannello di controllo, quindi vai al Centro connessioni di rete e condivisione.
  2. Clicca su Configura una nuova connessione o rete, quindi seleziona Connetti a un luogo di lavoro.
  3. Seleziona Utilizza la mia connessione Internet (VPN).
  4. Inserisci i dettagli del server VPN. Inserisci il nome di dominio o l’indirizzo IP del server nel campo Indirizzo Internet, quindi compila il campo Nome destinazione con qualcosa che descriva la tua connessione VPN. Quindi clicca su Fatto.

Configurazione di Windows usando PowerShell

Per importare il certificato radice CA usando PowerShell, prima apri un prompt di PowerShell con privilegi di amministratore. Per farlo, fai clic con il pulsante destro sull’icona del menu Start e seleziona Windows PowerShell (Admin). Puoi anche aprire un prompt dei comandi come amministratore e digitare powershell.

Successivamente importeremo il certificato usando il cmdlet PowerShell Import-Certificate. Nel comando seguente, il primo argomento -CertStoreLocation garantirà che il certificato venga importato nel negozio delle Autorità di Certificazione Radice Attendibili del computer in modo che tutti i programmi e gli utenti possano verificare il certificato del server VPN. L’argomento -FilePath dovrebbe puntare alla posizione in cui hai copiato il certificato. Nell’esempio seguente il percorso è C:\Users\sammy\Documents\ca-cert.pem. Assicurati di modificare il comando per corrispondere alla posizione che hai usato.

  1. Import-Certificate `
  2. -CertStoreLocation cert:\LocalMachine\Root\ `
  3. -FilePath C:\users\sammy\Documents\ca-cert.pem

Il comando produrrà un output simile al seguente:

Output
PSParentPath: Microsoft.PowerShell.Security\Certificate::LocalMachine\Root Thumbprint Subject ---------- ------- DB00813B4087E9367861E8463A60CEA0ADC5F002 CN=VPN root CA

Ora per configurare la VPN usando PowerShell, esegui il seguente comando. Sostituisci il nome DNS o l’indirizzo IP del tuo server sulla linea -ServerAddress. I vari flag garantiranno che Windows sia configurato correttamente con i parametri di sicurezza appropriati che corrispondono alle opzioni che hai impostato in /etc/ipsec.conf.

  1. Add-VpnConnection -Name "VPN Connection" `
  2. -ServerAddress "server_domain_or_IP" `
  3. -TunnelType "IKEv2" `
  4. -AuthenticationMethod "EAP" `
  5. -EncryptionLevel "Maximum" `
  6. -RememberCredential `

Se il comando ha successo, non verrà visualizzato alcun output. Per confermare che la VPN sia configurata correttamente, usa il cmdlet Get-VPNConnection:

  1. Get-VpnConnection -Name "VPN Connection"

Riceverai un output simile al seguente:

Output
Name : VPN Connection ServerAddress : your_server_ip AllUserConnection : False Guid : {B055A1AB-175C-4028-B4A8-D34309A2B20E} TunnelType : Ikev2 AuthenticationMethod : {Eap} EncryptionLevel : Maximum L2tpIPsecAuth : UseWinlogonCredential : False EapConfigXmlStream : #document ConnectionStatus : Disconnected RememberCredential : True SplitTunneling : False DnsSuffix : IdleDisconnectSeconds : 0

Per impostazione predefinita, Windows sceglie algoritmi più vecchi e più lenti. Esegui il cmdlet Set-VpnConnectionIPsecConfiguration per aggiornare i parametri di crittografia che Windows utilizzerà per lo scambio delle chiavi IKEv2 e per crittografare i pacchetti:

  1. Set-VpnConnectionIPsecConfiguration -Name "VPN Connection" `
  2. -AuthenticationTransformConstants GCMAES256 `
  3. -CipherTransformConstants GCMAES256 `
  4. -DHGroup ECP384 `
  5. -IntegrityCheckMethod SHA384 `
  6. -PfsGroup ECP384 `
  7. -EncryptionMethod GCMAES256

Nota: Se desideri eliminare la connessione VPN e riconfigurarla con opzioni diverse, puoi eseguire il cmdlet Remove-VpnConnection.

  1. Remove-VpnConnection -Name "VPN Connection" -Force

Il flag -Force salterà la richiesta di conferma per l’eliminazione. Devi essere disconnesso dalla VPN se tenti di rimuoverla utilizzando questo comando.

Connessione alla VPN

Dopo aver importato il certificato e configurato la VPN utilizzando uno dei due metodi, la nuova connessione VPN sarà visibile nell’elenco delle reti. Seleziona la VPN e clicca su Connetti. Ti verrà richiesto di inserire nome utente e password. Inseriscili, clicca su OK, e sarai connesso.

Connessione da macOS

Segui questi passaggi per importare il certificato:

  1. Fai doppio clic sul file del certificato. Keychain Access apparirà con un dialogo che dice “Keychain Access sta cercando di modificare il portachiavi di sistema. Inserisci la tua password per consentire ciò.”
  2. Inserisci la tua password, quindi clicca su Modifica Portachiavi
  3. Fare doppio clic sul certificato VPN appena importato. Questo aprirà una piccola finestra delle proprietà dove è possibile specificare i livelli di fiducia. Impostare IP Security (IPSec) su Sempre Affidabile e verrà richiesta nuovamente la password. Questa impostazione si salva automaticamente dopo aver inserito la password.

Ora che il certificato è stato importato e considerato attendibile, configurare la connessione VPN con questi passaggi:

  1. Andare su Preferenze di Sistema e scegliere Rete.
  2. Fare clic sul piccolo pulsante “più” in basso a sinistra nell’elenco delle reti.
  3. Nella finestra che appare, impostare Interfaccia su VPN, impostare il Tipo VPN su IKEv2, e dare un nome alla connessione.
  4. Nel campo Server e ID Remoto, inserire il nome di dominio o l’indirizzo IP del server. Lasciare vuoto il campo ID Locale.
  5. Fare clic su Impostazioni Autenticazione, selezionare Nome Utente, e inserire il nome utente e la password configurati per l’utente VPN. Quindi fare clic su OK.

Infine, fare clic su Connetti per connettersi alla VPN. Ora dovresti essere connesso alla VPN.

Connessione da Ubuntu

Per connetterti da una macchina Ubuntu, puoi configurare e gestire StrongSwan come servizio oppure utilizzare un comando occasionale ogni volta che desideri connetterti. Le istruzioni sono fornite per entrambi.

Gestione di StrongSwan come servizio

Per gestire StrongSwan come servizio, dovrai eseguire i seguenti passaggi di configurazione.

Innanzitutto, aggiorna la cache dei pacchetti locali usando apt

  1. sudo apt update

Successivamente, installa StrongSwan e i plugin richiesti per l’autenticazione:

  1. sudo apt install strongswan libcharon-extra-plugins

Ora avrai bisogno di una copia del certificato CA nella directory /etc/ipsec.d/cacerts in modo che il tuo client possa verificare l’identità del server. Esegui il seguente comando per copiare il file ca-cert.pem nel posto giusto:

  1. sudo cp /tmp/ca-cert.pem /etc/ipsec.d/cacerts

Per garantire che la VPN venga eseguita solo su richiesta, utilizza systemctl per disabilitare StrongSwan dall’avvio automatico:

  1. sudo systemctl disable --now strongswan-starter

Successivamente, configura il nome utente e la password che utilizzerai per autenticarti al server VPN. Modifica /etc/ipsec.secrets utilizzando nano o il tuo editor preferito:

  1. sudo nano /etc/ipsec.secrets

Aggiungi la seguente riga, modificando i valori del nome utente e della password evidenziati per corrispondere a quelli configurati sul server:

/etc/ipsec.secrets
your_username : EAP "your_password"

Infine, modifica il file /etc/ipsec.conf per configurare il tuo client in modo da corrispondere alla configurazione del server:

/etc/ipsec.conf
config setup

conn ikev2-rw
    right=server_domain_or_IP
    # Questo dovrebbe corrispondere al valore `leftid` sulla configurazione del tuo server
    rightid=server_domain_or_IP
    rightsubnet=0.0.0.0/0
    rightauth=pubkey
    leftsourceip=%config
    leftid=username
    leftauth=eap-mschapv2
    eap_identity=%identity
    auto=start

Per connetterti alla VPN, digita:

  1. sudo systemctl start strongswan-starter

Per disconnetterti nuovamente, digita:

  1. sudo systemctl stop strongswan-starter

Utilizzo del client charon-cmd per connessioni occasionali.

Per gestire StrongSwan come servizio, dovrai eseguire i seguenti passaggi di configurazione.

Innanzitutto, aggiorna la cache dei pacchetti locali usando apt

  1. sudo apt update

Successivamente, installa StrongSwan e i plugin necessari per l’autenticazione:

  1. sudo apt install strongswan libcharon-extra-plugins

Ora avrai bisogno di una copia del certificato CA nella directory /etc/ipsec.d/cacerts in modo che il tuo client possa verificare l’identità del server. Esegui il seguente comando per copiare il file ca-cert.pem nel posto giusto:

  1. sudo cp /tmp/ca-cert.pem /etc/ipsec.d/cacerts

A questo punto puoi connetterti al server VPN con charon-cmd utilizzando il certificato CA del server, l’indirizzo IP del server VPN e il nome utente che hai configurato.

Esegui il seguente comando ogni volta che desideri connetterti alla VPN:

  1. sudo charon-cmd --cert ca-cert.pem --host vpn_domain_or_IP --identity your_username

Quando richiesto, fornisci la password dell’utente VPN e sarai connesso alla VPN. Per disconnetterti, premi CTRL+C nel terminale e attendi che la connessione si chiuda.

Connessione da iOS

Per configurare la connessione VPN su un dispositivo iOS, segui questi passaggi:

  1. Invia te stesso una email con il certificato radice allegato.
  2. Apri l’email sul tuo dispositivo iOS e tocca sul file del certificato allegato, quindi tocca Installa e inserisci il tuo codice di accesso. Una volta installato, tocca Fatto.
  3. Vai su Impostazioni, Generale, VPN e tocca Aggiungi Configurazione VPN. Questo porterà alla schermata di configurazione della connessione VPN.
  4. Tocca su Tipo e seleziona IKEv2.
  5. Nel campo Descrizione, inserisci un nome breve per la connessione VPN. Può essere qualsiasi cosa tu voglia.
  6. Nei campi Server e ID Remoto, inserisci il nome di dominio o l’indirizzo IP del server. Il campo ID Locale può essere lasciato vuoto.
  7. Inserisci il tuo nome utente e password nella sezione Autenticazione, poi tocca Fatto.
  8. Seleziona la connessione VPN appena creata, tocca l’interruttore nella parte superiore della pagina e sarai connesso.

Connessione da Android

Segui questi passaggi per importare il certificato:

  1. Invia te stesso una email con il certificato CA allegato. Salva il certificato CA nella cartella dei download.
  2. Scarica il client VPN StrongSwan dal Play Store.
  3. Apri l’app. Tocca l’icona “altro” (. . .) nell’angolo in alto a destra e seleziona Certificati CA.
  4. Tocca nuovamente l’icona “altro” (. . .) nell’angolo in alto a destra. Seleziona Importa certificato.
  5. Naviga fino al file del certificato CA nella cartella dei download e selezionalo per importarlo nell’applicazione.

Ora che il certificato è stato importato nell’app StrongSwan, puoi configurare la connessione VPN con questi passaggi:

  1. Nell’app, tocca AGGIUNGI PROFILO VPN nella parte superiore.
  2. Compila il campo Server con il nome di dominio del tuo server VPN o l’indirizzo IP pubblico.
  3. Assicurati che IKEv2 EAP (Username/Password) sia selezionato come Tipo VPN.
  4. Compila i campi Nome utente e Password con le credenziali che hai definito sul server.
  5. Deseleziona Seleziona automaticamente nella sezione Certificato CA e clicca su Seleziona certificato CA.
  6. Tocca la scheda IMPORTATO nella parte superiore dello schermo e scegli il CA che hai importato (sarà denominato “CA radice VPN” se non hai modificato il “DN” in precedenza).
  7. Se desideri, compila il campo Nome profilo (opzionale) con un nome più descrittivo.

Quando desideri connetterti alla VPN, clicca sul profilo che hai appena creato nell’applicazione StrongSwan.

Risoluzione dei problemi delle connessioni

Se non riesci ad importare il certificato, assicurati che il file abbia l’estensione .pem e non .pem.txt.

Se non riesci a connetterti alla VPN, controlla il nome del server o l’indirizzo IP che hai utilizzato. Il nome di dominio del server o l’indirizzo IP devono corrispondere a quanto configurato come nome comune (CN) durante la creazione del certificato. Se non corrispondono, la connessione VPN non funzionerà. Ad esempio, se hai configurato un certificato con il CN di vpn.example.com, devi utilizzare vpn.example.com quando inserisci i dettagli del server VPN. Verifica nuovamente il comando utilizzato per generare il certificato e i valori utilizzati durante la creazione della connessione VPN.

Infine, verifica nuovamente la configurazione della VPN per assicurarti che il valore leftid sia configurato con il simbolo @ se stai utilizzando un nome di dominio:

/etc/ipsec.conf
    leftid=@vpn.example.com

Se stai utilizzando un indirizzo IP, assicurati che il simbolo @ sia omesso. Assicurati inoltre che quando hai generato il file server-cert.pem, tu abbia incluso entrambi i flag --san @indirizzo_IP e --san indirizzo_IP.

Conclusione

In questo tutorial, hai configurato un server VPN che utilizza il protocollo IKEv2. Hai appreso le direttive che controllano i lati left e right di una connessione sia sul server che sui client. Hai inoltre configurato un client Windows, macOS, iOS, Android o Linux per connettersi alla VPN.

Per aggiungere o rimuovere utenti, passare nuovamente al Passo 5. Ogni riga in /etc/ipsec.secrets è per un utente, quindi aggiungere o rimuovere utenti, o cambiare password richiede semplicemente di modificare il file.

Ora puoi essere sicuro che le tue attività online rimarranno sicure ovunque tu vada e con qualsiasi dispositivo tu utilizzi per accedere a Internet.

Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-an-ikev2-vpn-server-with-strongswan-on-ubuntu-22-04