GNU/Linux >> Linux Esercitazione >  >> Panels >> OpenVPN

Come configurare un server VPN IKEv2 con StrongSwan su Ubuntu 22.04

Introduzione

Una rete privata virtuale, o VPN, ti consente di crittografare in modo sicuro il traffico mentre viaggia attraverso reti non affidabili, come quelle del bar, di una conferenza o di un aeroporto.

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

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

Prerequisiti

Per completare questo tutorial, avrai bisogno di:

  • Un server Ubuntu 22.04 configurato seguendo la guida all'installazione iniziale del server Ubuntu 22.04, incluso un sudo utente non root e un firewall.

Fase 1:installazione di StrongSwan

Innanzitutto, 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'autorità di certificazione (CA) per fornire le credenziali per la tua infrastruttura.

Inizia aggiornando la cache del pacchetto locale:

  1. sudo apt update

Quindi installa il software digitando:

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

I libcharon-extauth-plugins aggiuntivi Il pacchetto viene utilizzato per garantire che vari client possano autenticarsi sul server utilizzando un nome utente e una passphrase condivisi. I libstrongswan-extra-plugins il pacchetto è incluso in modo che Strongswan supporti suite di crittografia a curva ellittica che utilizzano Curve25519 suite di crittografia.

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

Passaggio 2:creazione di un'autorità di certificazione

Un server IKEv2 richiede un certificato per identificarsi ai client. Per aiutare a creare il certificato richiesto, il strongswan-pki il pacchetto viene fornito con un'utilità chiamata pki per generare un'autorità di certificazione e certificati del server.

Per iniziare, crea alcune directory in cui archiviare tutte le risorse su cui lavorerai. La struttura delle directory corrisponde ad alcune delle directory in /etc/ipsec.d , dove eventualmente sposterai tutti gli elementi che crei:

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

Quindi blocca le autorizzazioni in modo che i nostri file privati ​​non possano essere visti da altri utenti:

  1. chmod 700 ~/pki

Ora che hai una struttura di directory per archiviare tutto, puoi generare una chiave di root. Questa sarà una chiave RSA a 4096 bit che verrà utilizzata per firmare il tuo certificato di 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

Successivamente 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 --lifetime 3650 flag viene utilizzato per garantire che il certificato radice dell'autorità di certificazione sia valido per 10 anni. Il certificato radice per un'autorità non cambia in genere, poiché dovrebbe essere ridistribuito a tutti i server e client che si basano su di esso, quindi 10 anni è un valore di scadenza predefinito sicuro.

Puoi cambiare il nome distinto (DN) a qualcos'altro, se lo desideri. Il nome comune (campo CN) qui è solo l'indicatore, quindi non deve corrispondere a nulla nella tua infrastruttura.

Ora che la tua autorità di certificazione principale è attiva e funzionante, puoi creare un certificato che verrà utilizzato dal server VPN.

Passaggio 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 che abbiamo appena generato.

Innanzitutto, 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

Ora crea e firma il certificato del server VPN con la chiave dell'autorità di certificazione che hai creato nel passaggio precedente. Esegui il comando seguente, ma modifica il campo Nome comune (CN) e Nome alternativo 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 usando un indirizzo IP invece di un nome DNS, dovrai specificare più --san inserimenti. La riga nel blocco comandi precedente in cui si specifica il nome distinto (--dn ... ) dovrà essere modificato con la voce extra come la seguente riga estratta:

--dn "CN=IP address" --san @IP_address --san IP_address \

Il motivo di questo --san @IP_address la voce è che alcuni client verificheranno se il certificato TLS ha sia una voce DNS che una voce Indirizzo IP per un server quando ne verificano l'identità.

Il --flag serverAuth l'opzione viene utilizzata per indicare che il certificato verrà utilizzato in modo esplicito per l'autenticazione del server, prima che venga stabilito il tunnel crittografato. Il --flag ikeIntermediate viene utilizzata per supportare i client macOS meno recenti.

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

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

In questo passaggio, hai creato una coppia di certificati che verrà utilizzata 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 SrongSwan.

Fase 4 — Configurazione di StrongSwan

StrongSwan ha un file di configurazione predefinito con alcuni esempi, ma dovremo fare la maggior parte della configurazione da soli. Eseguiamo il backup del file come 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 utilizzerai nano :

  1. sudo nano /etc/ipsec.conf

Nota :mentre elabori questa sezione per configurare la parte server della tua VPN, incontrerai impostazioni che fanno riferimento a sinistra e destra lati di una connessione. Quando si lavora con VPN IPSec, il sinistra side by convention si riferisce al sistema locale che si sta configurando, in questo caso il server. Le direttive sul lato destro in queste impostazioni faranno riferimento a client remoti, come telefoni e altri computer.

Quando si passa alla configurazione dei client più avanti in questo tutorial, i file di configurazione del client faranno riferimento a se stessi utilizzando vari sinistra le direttive e il server verrà richiamato utilizzando right terminologia laterale.

Innanzitutto, diremo a StrongSwan di registrare gli stati del demone 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

Quindi, 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 dead-peer per cancellare eventuali connessioni "pendenti" nel caso in cui il client si disconnette inaspettatamente. Aggiungi queste righe:

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

Successivamente, configureremo i parametri IPSec sul 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 a /etc/ipsec.conf file una volta che hai familiarità con cosa sono e perché vengono utilizzati:

  • left=%any Il %any value assicura che il server utilizzerà l'interfaccia di rete da cui riceve le connessioni in ingresso per le successive comunicazioni con i client. Ad esempio, se stai connettendo un client su una rete privata, il server utilizzerà l'indirizzo IP privato da cui riceve il traffico per il resto della connessione.
  • leftid=@server_domain_or_IP Questa opzione controlla il nome che il server presenta ai client. Se combinato con l'opzione successiva leftcert , il leftid l'opzione garantisce che il nome configurato del server e il Distinguished Name (DN) contenuto nel certificato pubblico corrispondano.
  • leftcert=server-cert.pem Questa opzione è il percorso del 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 di completare la negoziazione della configurazione di IKEv2.
  • leftsendcert=always Il always value assicura che qualsiasi 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 sul lato "sinistra" che aggiungerai comunica ai client le sottoreti 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 dirà ai client di inviare tutto il loro traffico tramite la VPN per impostazione predefinita.

Ora che hai familiarità con ciascuna delle opzioni del lato "sinistra" pertinenti, 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 ), includi solo il @ carattere se il tuo server VPN sarà identificato da un nome di dominio:

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

Se il server verrà identificato dal suo indirizzo IP, inserisci l'indirizzo IP in:

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

Successivamente, possiamo configurare i parametri IPSec del lato "destra" del client. Ciascuno dei seguenti parametri indica al server come accettare le connessioni dai client, come i client devono autenticarsi al server e gli intervalli di indirizzi IP privati ​​e i server DNS che i client utilizzeranno. Aggiungi ciascuna di queste impostazioni a /etc/ipsec.conf file una volta che hai familiarità con cosa sono e perché vengono utilizzati:

  • right=%any Il %any opzione per il right lato della connessione indica al server di accettare le connessioni in entrata da qualsiasi client remoto.
  • rightid=%any Questa opzione garantisce che il server non rifiuti le connessioni dai client che forniscono un'identità prima che venga stabilito il tunnel crittografato.
  • rightauth=eap-mschapv2 Questa opzione configura il metodo di autenticazione che i client utilizzeranno per autenticarsi sul server. eap-mschapv2 viene utilizzato qui per un'ampia compatibilità per supportare client come dispositivi Windows, macOS e Android.
  • rightsourceip=10.10.10.0/24 Questa opzione indica al server di assegnare indirizzi IP privati ​​ai client dal 10.10.10.0/24 specificato pool di IP.
  • rightdns=8.8.8.8,8.8.4.4 Questi indirizzi IP sono i resolver DNS pubblici di Google. Possono essere modificati per utilizzare altri resolver pubblici, i resolver del server VPN o qualsiasi altro resolver che i client possono raggiungere.
  • rightsendcert=never Questa opzione indica al server che i client non devono inviare un certificato per autenticarsi.

Ora che hai familiarità con le opzioni del lato "destra" richieste per la VPN, aggiungi le seguenti righe 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 connette:

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

Infine, aggiungi le seguenti righe per supportare i client Linux, Windows, macOS, iOS e Android. Queste righe specificano i vari algoritmi di scambio di chiavi, hash, autenticazione e crittografia (comunemente denominati Cipher Suites ) che StrongSwan consentirà a 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!

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

Il file di configurazione completo dovrebbe assomigliare a questo:

/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 dopo aver verificato di aver aggiunto correttamente ogni 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 connessioni client, ma non ci sono ancora credenziali configurate. Dovrai configurare un paio di cose in un file di configurazione speciale chiamato ipsec.secrets :

  • Devi indicare 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 impostare un elenco di utenti che potranno connettersi alla VPN.

Apriamo il file dei segreti per la modifica:

  1. sudo nano /etc/ipsec.secrets

Per prima cosa, indica a StrongSwan dove trovare la chiave privata e come analizzarla.

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

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

Quindi, definirai le credenziali dell'utente. Puoi creare qualsiasi combinazione di nome utente o password che ti piace:

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

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

  1. sudo systemctl restart strongswan-starter

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

Passaggio 6:configurazione del firewall e dell'inoltro IP del kernel

Una volta completata la configurazione di StrongSwan, è necessario configurare il firewall per consentire il passaggio del traffico VPN e inoltrarlo.

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

  1. sudo ufw allow OpenSSH

Quindi abilita il firewall digitando:

  1. sudo ufw enable

Quindi, aggiungi una regola per consentire il traffico UDP alle porte IPSec standard, 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 l'instradamento e l'inoltro dei pacchetti IPSec. Tuttavia, prima di fare ciò è necessario trovare quale interfaccia di rete sul nostro server viene utilizzata per l'accesso a Internet. Trova questa interfaccia eseguendo una query per il dispositivo associato al percorso predefinito:

  1. ip route show default

La tua interfaccia pubblica dovrebbe seguire la parola "dev". Ad esempio, questo risultato mostra l'interfaccia denominata eth0 , che è evidenziato nell'esempio seguente:

Outputdefault via your_server_ip dev eth0 proto static

Quando hai la tua interfaccia di rete pubblica, apri il /etc/ufw/before.rules file nel tuo editor di testo. Le regole in questo file vengono aggiunte al firewall prima del resto delle normali regole di input e output. Vengono utilizzati 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 alla parte superiore del file (prima del *filter riga), aggiungere il seguente blocco di configurazione. Modifica ogni istanza di eth0 nella configurazione sopra in modo che corrisponda al nome dell'interfaccia che hai trovato con ip route . Il *nat le linee creano regole in modo che il firewall possa instradare e manipolare correttamente il traffico tra i client VPN e Internet. Il *mangle line regola la dimensione massima del segmento del pacchetto per prevenire potenziali problemi con alcuni 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 il *filter e linee di definizione della 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 linee indicano al firewall di inoltrare il traffico ESP (Encapsulating Security Payload) in modo che i client VPN possano connettersi. ESP fornisce ulteriore sicurezza per i nostri pacchetti VPN mentre attraversano reti non affidabili.

Al termine, salva e chiudi il file dopo aver verificato di aver aggiunto correttamente ogni riga. Se hai usato nano , fallo premendo CTRL + X , Y , quindi ENTER .

Prima di riavviare il firewall, è inoltre 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.

Il primo inoltro di pacchetti IPv4 deve essere attivato in modo che il traffico possa spostarsi tra la VPN e le interfacce di rete pubbliche sul server. Successivamente disabiliterai il rilevamento MTU del percorso per prevenire 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 usando nano o il tuo editor di testo preferito:

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

Ora aggiungi il seguente net/ipv4/ip_forward=1 impostazione alla fine del file per abilitare l'inoltro di pacchetti tra interfacce:

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

Blocco successivo che invia e riceve 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, disattiva Path MTU discovery 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 riattivando 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:test della connessione VPN su Windows, macOS, Ubuntu, iOS e Android

Ora che hai impostato tutto, è il momento di provarlo. Innanzitutto, dovrai copiare il certificato CA che hai creato e installarlo sui tuoi dispositivi client che si collegheranno alla VPN. Il modo più semplice per farlo è accedere al tuo server e generare il contenuto 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, incluso il -----BEGIN CERTIFICATE----- e -----END CERTIFICATE----- righe e salvarlo in un file con un nome riconoscibile, ad esempio ca-cert.pem . Assicurati che il file che crei abbia il .pem estensione.

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

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

Connessione da Windows

Esistono diversi modi per importare il certificato radice e configurare Windows per la connessione a una VPN. Il primo metodo utilizza strumenti grafici per ogni passaggio. Il secondo metodo utilizza i comandi di PowerShell, che possono essere sottoposti a script e modificati per adattarsi alla configurazione della VPN.

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

Configurazione di Windows con strumenti grafici

Innanzitutto, importa il certificato radice seguendo questi passaggi:

  1. Premi WINDOWS+R per visualizzare la Corsa finestra di dialogo e inserisci mmc.exe per avviare la Console di gestione di Windows.

  2. Dal File menu, vai a Aggiungi o rimuovi snap-in , seleziona Certificati dall'elenco degli snap-in disponibili e fai clic su Aggiungi .

  3. Vogliamo che la VPN funzioni con qualsiasi utente, quindi seleziona Account computer e fai clic su Avanti .

  4. Stiamo configurando le cose sul computer locale, quindi seleziona Computer locale , quindi fai clic su Fine .

  5. Sotto la Root della console nodo, espandi i Certificati (computer locale) voce, espandi Autorità di certificazione radice attendibili , quindi seleziona i Certificati iscrizione:

  6. Dall'Azione menu, seleziona Tutte le attività e fai clic su Importa per visualizzare l'Importazione guidata certificati. Fai clic su Avanti per andare oltre l'introduzione.

  7. Nel File da importare schermo, premi il pulsante Sfoglia , assicurati di modificare il tipo di file da "Certificato X.509 (.cer; .crt)" in "Tutti i file (. )”, e selezionare il ca-cert.pem file che hai salvato. Quindi fai clic su Avanti .

  8. Assicurati che il Negozio di certificati è impostato su Autorità di certificazione radice attendibili e fai clic su Avanti .

  9. Fai clic 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. Fai clic 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 nell'Indirizzo Internet campo, quindi inserisci Nome destinazione con qualcosa che descriva la tua connessione VPN. Quindi fai clic su Fine .

Configurazione di Windows tramite PowerShell

Per importare il certificato CA radice tramite PowerShell, aprire prima un prompt di PowerShell con privilegi di amministratore. Per farlo, fai clic con il pulsante destro del mouse 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 utilizzando il Import-Certificate cmdlet di PowerShell. Nel comando seguente, il primo -CertStoreLocation argomento assicurerà che il certificato venga importato nelle Autorità di certificazione radice attendibili del computer archiviare in modo che tutti i programmi e gli utenti possano verificare il certificato del server VPN. Il -FilePath argomento dovrebbe puntare al percorso in cui è stato copiato il certificato. Nell'esempio seguente il percorso è C:\Users\sammy\Documents\ca-cert.pem . Assicurati di modificare il comando in modo che corrisponda alla posizione che hai utilizzato.

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

Il comando produrrà qualcosa di 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 comando seguente. Sostituisci il nome DNS o l'indirizzo IP del tuo server su -ServerAddress linea. I vari flag garantiranno che Windows sia configurato correttamente con i parametri di sicurezza appropriati che corrispondono alle opzioni impostate 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 esito positivo non ci sarà alcun output. Per confermare che la VPN sia configurata correttamente, usa il Get-VPNConnection cmdlet:

  1. Get-VpnConnection -Name "VPN Connection"

Riceverai un output come il seguente:

OutputName                  : 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 Set-VpnConnectionIPsecConfiguration cmdlet to upgrade the encryption parameters that Windows will use for the IKEv2 key exchange, and to encrypt packets:

  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 :If you would like to delete the VPN connection and reconfigure it with different options, you can run the Remove-VpnConnection cmdlet.

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

The -Force flag will skip prompting you to confirm the removal. You must be disconnected from the VPN if you attempt to remove it using this command.

Connecting to the VPN

Once you have the certificate imported and the VPN configured using either method, your new VPN connection will be visible under the list of networks. Select the VPN and click Connect . You’ll be prompted for your username and password. Type them in, click OK , and you’ll be connected.

Connecting from macOS

Follow these steps to import the certificate:

  1. Double-click the certificate file. Keychain Access will pop up with a dialog that says “Keychain Access is trying to modify the system keychain. Enter your password to allow this.”
  2. Enter your password, then click on Modify Keychain
  3. Double-click the newly imported VPN certificate. This brings up a small properties window where you can specify the trust levels. Set IP Security (IPSec) to Always Trust and you’ll be prompted for your password again. This setting saves automatically after entering the password.

Now that the certificate is imported and trusted, configure the VPN connection with these steps:

  1. Go to System Preferences and choose Network .
  2. Click on the small “plus” button on the lower-left of the list of networks.
  3. In the popup that appears, set Interface to VPN , set the VPN Type to IKEv2 , and give the connection a name.
  4. In the Server and Remote ID field, enter the server’s domain name or IP address. Leave the Local ID blank.
  5. Click on Authentication Settings , select Username , and enter your username and password you configured for your VPN user. Quindi fai clic su OK .

Finally, click on Connect to connect to the VPN. You should now be connected to the VPN.

Connecting from Ubuntu

To connect from an Ubuntu machine, you can set up and manage StrongSwan as a service or use a one-off command every time you wish to connect. Instructions are provided for both.

Managing StrongSwan as a Service

To manage StrongSwan as a service, you will need to perform the following configuration steps.

First, update your local package cache using apt

  1. sudo apt update

Next, install StrongSwan and the required plugins for authentication:

  1. sudo apt install strongswan libcharon-extra-plugins

Now you’ll need a copy of the CA certificate in the /etc/ipsec.d/cacerts directory so that your client can verify the server’s identity. Run the following command to copy the ca-cert.pem file into place:

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

To ensure the VPN only runs on demand, use systemctl to disable StrongSwan from running automatically:

  1. sudo systemctl disable --now strongswan-starter

Next configure the username and password that you will use to authenticate to the VPN server. Edit /etc/ipsec.secrets using nano or your preferred editor:

  1. sudo nano /etc/ipsec.secrets

Add the following line, editing the highlighted username and password values to match the ones that you configured on the server:

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

Finally, edit the /etc/ipsec.conf file to configure your client to match the server’s configuration:

/etc/ipsec.conf
config setup

conn ikev2-rw
    right=server_domain_or_IP
    # This should match the `leftid` value on your server's configuration
    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

To connect to the VPN, type:

  1. sudo systemctl start strongswan-starter

To disconnect again, type:

  1. sudo systemctl stop strongswan-starter

Using the charon-cmd Client for One-Off Connections

To manage StrongSwan as a service, you will need to perform the following configuration steps.

First, update your local package cache using apt

  1. sudo apt update

Next, install StrongSwan and the required plugins for authentication:

  1. sudo apt install strongswan libcharon-extra-plugins

Now you’ll need a copy of the CA certificate in the /etc/ipsec.d/cacerts directory so that your client can verify the server’s identity. Run the following command to copy the ca-cert.pem file into place:

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

At this point you can connect to the VPN server with charon-cmd using the server’s CA certificate, the VPN server’s IP address, and the username you configured.

Run the following command whenever you want to connect to the VPN:

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

When prompted, provide the VPN user’s password and you will be connected to the VPN. To disconnect, press CTRL+C in the terminal and wait for the connection to close.

Connecting from iOS

To configure the VPN connection on an iOS device, follow these steps:

  1. Send yourself an email with the root certificate attached.
  2. Open the email on your iOS device and tap on the attached certificate file, then tap Install and enter your passcode. Once it installs, tap Done .
  3. Go to Settings , General , VPN and tap Add VPN Configuration . This will bring up the VPN connection configuration screen.
  4. Tap on Type and select IKEv2 .
  5. In the Description field, enter a short name for the VPN connection. This could be anything you like.
  6. In the Server and Remote ID field, enter the server’s domain name or IP address. The Local ID field can be left blank.
  7. Enter your username and password in the Authentication section, then tap Done .
  8. Select the VPN connection that you just created, tap the switch on the top of the page, and you’ll be connected.

Connecting from Android

Follow these steps to import the certificate:

  1. Send yourself an email with the CA certificate attached. Save the CA certificate to your downloads folder.
  2. Download the StrongSwan VPN client from the Play Store.
  3. Open the app. Tap the “more” icon (. . . ) in the upper-right corner and select CA certificates .
  4. Tap the “more” icon (. . . ) in the upper-right corner again. Select Import certificate .
  5. Browse to the CA certificate file in your downloads folder and select it to import it into the app.

Now that the certificate is imported into the StrongSwan app, you can configure the VPN connection with these steps:

  1. In the app, tap ADD VPN PROFILE at the top.
  2. Fill out the Server with your VPN server’s domain name or public IP address.
  3. Make sure IKEv2 EAP (Username/Password) is selected as the VPN Type.
  4. Fill out the Username and Password with the credentials you defined on the server.
  5. Deselect Select automatically in the CA certificate section and click Select CA certificate .
  6. Tap the IMPORTED tab at the top of the screen and choose the CA you imported (it will be named “VPN root CA” if you didn’t change the “DN” earlier).
  7. If you’d like, fill out Profile name (optional) with a more descriptive name.

When you wish to connect to the VPN, click on the profile you just created in the StrongSwan application.

Troubleshooting Connections

If you are unable to import the certificate, ensure the file has the .pem extension, and not .pem.txt .

If you’re unable to connect to the VPN, check the server name or IP address you used. The server’s domain name or IP address must match what you’ve configured as the common name (CN) while creating the certificate. If they don’t match, the VPN connection won’t work. For example, if you set up a certificate with the CN of vpn.example.com , you must use vpn.example.com when you enter the VPN server details. Double-check the command you used to generate the certificate, and the values you used when creating your VPN connection.

Finally, double-check the VPN configuration to ensure the leftid value is configured with the @ symbol if you’re using a domain name:

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

If you’re using an IP address, ensure that the @ symbol is omitted. Also make sure that when you generated the server-cert.pem file that you included both --san @IP_address and --san IP_address flags.

Conclusione

In this tutorial, you’ve built a VPN server that uses the IKEv2 protocol. You learned about the directives that control the left and right sides of a connection on both server and clients. You also configured a Windows, macOS, iOS, Android, or Linux client to connect to the VPN.

To add or remove users, skip to Step 5 again. Each line in /etc/ipsec.secrets is for one user, so adding or removing users, or changing passwords just requires editing the file.

Now you can be assured that your online activities will remain secure wherever you go and with any device that you use to access the internet.


OpenVPN
  1. Come configurare un server OpenVPN su Ubuntu 18.04

  2. Come configurare WireGuard VPN su Ubuntu (una guida passo passo)

  3. Come impostare e configurare un'autorità di certificazione su Ubuntu 22.04

  4. Come configurare WireGuard su Ubuntu 22.04

  5. Come configurare un server TeamSpeak su Ubuntu 16.04

Come configurare un VPN Pptp sul proprio server Ubuntu?

Come impostare la sincronizzazione dell'ora con NTP su Ubuntu 18.04

Come configurare un server Seafile con Nginx su Ubuntu 18.04

Come configurare un server FTP con ProFTPD in Ubuntu 18.04

Come configurare un server di posta con Modoboa su Ubuntu 20.04

Come impostare e configurare una VPN con OpenVPN su Ubuntu 18.04