IKE gestisce l'autenticazione tra due endpoint comunicanti. Consente inoltre agli endpoint di negoziare sugli algoritmi da utilizzare per configurare un tunnel IPsec.
Nella nostra guida precedente, abbiamo spiegato come installare e configurare IPSec VPN utilizzando StrongSwan su Ubuntu 18.04. Vedi il link qui sotto;
Configura IPSEC VPN utilizzando StrongSwan su Ubuntu 18.04
Configura il server VPN IPSec con Libreswan su CentOS 8
Esistono diverse implementazioni VPN Server-client di Libreswan. In questa guida, impareremo come configurare il server VPN IPSec per i client mobili (client con IP assegnati in modo dinamico come i laptop) qui noti come road warriors
, in modo che possano connettersi alla LAN locale da qualsiasi luogo. I client mobili vengono autenticati tramite certificati e quindi utilizzano il protocollo IKEv2.
IKEv2 (Internet Key Exchange versione 2) è un protocollo di crittografia VPN che gestisce le azioni di richiesta e risposta. IKE esegue l'autenticazione reciproca tra due parti e stabilisce un'associazione di sicurezza (SA) IKE che include informazioni segrete condivise che possono essere utilizzate per stabilire in modo efficiente SA per Encapsulating Security Payload (ESP) o Authentication Header (AH) e una serie di algoritmi crittografici da utilizzato dalle SA per proteggere il traffico che trasportano.
Esegui aggiornamento del sistema
Aggiorna i pacchetti di sistema sul server da utilizzare come server VPN di Libreswan.
dnf update
Installa Libreswan su CentOS 8
Al termine dell'aggiornamento, installa Libreswan. Libreswan è disponibile sui repository AppStream CentOS 8 e, quindi, puoi semplicemente installarlo utilizzando il gestore pacchetti come segue;
dnf install libreswan
Libreswan in corsa
Una volta completata l'installazione, avvia e abilita Libreswan ipsec
servizio da eseguire all'avvio del sistema.
systemctl enable --now ipsec
Inizializza il database IPSec NSS
Successivamente, è necessario inizializzare il database dei servizi di sicurezza di rete (NSS). Il database NSS viene utilizzato per memorizzare chiavi di autenticazione e certificati di identità.
ipsec initnss
Se esiste un database precedente, puoi rimuoverlo in modo da poterne avere un nuovo database. Il database NSS è archiviato in /etc/ipsec.d
.
Per rimuovere eventuali vecchi database, interrompere IPsec, se in esecuzione e rimuovere i database NSS eseguendo i comandi seguenti;
systemctl stop ipsec
rm -rf /etc/ipsec.d/*db
È quindi possibile reinizializzare il database NSS;
ipsec initnss
Quindi avvia IPSec;
systemctl start ipsec
Apri porte e protocolli Libreswan su Firewall
Il IKE
il protocollo utilizza UDP port 500
e 4500
mentre i protocolli IPsec, Encapsulated Security Payload
(ESP) e Authenticated Header
(AH) utilizza protocol number 50 and 51
rispettivamente.
Quindi, apri queste porte e protocolli sulla tua zona firewall attiva sul tuo server VPN (Left Endpoint) in questa guida.
firewall-cmd --get-active-zone
Per aprire le porte e il firewall nella zona firewalld predefinita;
firewall-cmd --add-port={4500,500}/udp --permanent
firewall-cmd --add-protocol={50,51} --permanent
Oppure puoi semplicemente utilizzare il servizio IPSec;
firewall-cmd --add-service=ipsec --permanent
Ricarica FirewallD
firewall-cmd --reload
Configura il server VPN IPSec con Libreswan
Libreswan non utilizza il modello client-server. Tuttavia, utilizza i termini left
e right
per fare riferimento agli endpoint coinvolti in una determinata connessione. I termini sinistra/destra possono essere usati arbitrariamente per fare riferimento a ciascun sistema purché si mantenga la coerenza nell'uso dei termini durante la configurazione delle connessioni.
Abilita l'inoltro IP
Su entrambi i VPN server
, è necessario abilitare l'inoltro IP.
Esegui il comando seguente per verificare se l'inoltro IP è abilitato;
sysctl net.ipv4.ip_forward
Se l'output è net.ipv4.ip_forward = 0
, quindi l'inoltro IP è disabilitato ed è necessario abilitarlo eseguendo uno dei comandi seguenti;
L'inoltro IP può essere abilitato semplicemente abilitando il mascheramento IP su firewalld.
firewall-cmd --add-masquerade --permanent firewall-cmd --reload
Puoi verificare l'inoltro IP;
cat /proc/sys/net/ipv4/ip_forward 1
Un valore di 1 significa che l'inoltro IP è abilitato.
Allo stesso modo. puoi abilitare l'inoltro IP eseguendo i comandi seguenti;
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
Aggiorna con sysctl.conf con una nuova configurazione.
sysctl -p
Inoltre, assicurati che i reindirizzamenti siano disabilitati.
less /etc/sysctl.d/50-libreswan.conf
# We disable redirects for XFRM/IPsec net.ipv6.conf.default.accept_redirects = 0 net.ipv6.conf.all.accept_redirects = 0 net.ipv4.conf.default.send_redirects = 0 net.ipv4.conf.default.accept_redirects = 0 net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.all.rp_filter = 0
Genera server VPN e certificati client
Successivamente, è necessario generare il server VPN e i certificati client da utilizzare nell'autenticazione.
Crea database di generazione certificati
Eseguire il comando seguente per creare un database che può essere utilizzato per generare un archivio di una chiave privata e un certificato CA da utilizzare nella generazione di certificati host. Useremo certutil
comando per generare i certificati.
mkdir /etc/ipsec.d/certsdb
certutil -N -d sql:/etc/ipsec.d/certsdb
Il comando richiede di inserire la password per crittografare le chiavi.
Enter a password which will be used to encrypt your keys. The password should be at least 8 characters long, and should contain at least one non-alphabetic character. Enter new password: StRONgPassw0Rd Re-enter password: StRONgPassw0Rd
Genera certificato CA
Usiamo certificati autofirmati in questo tutorial e, quindi, è così che possiamo generare il nostro certificato CA locale.
certutil -S -x -n "Kifarunix-demo CA" -s "O=Kifarunix-demo,CN=Kifarunix-demo CA" -k rsa -g 4096 -v 12 -d sql:/etc/ipsec.d/certsdb -t "CT,," -2
Fai riferimento a man certutil
per conoscere le opzioni utilizzate.
Quando il comando viene eseguito, ti verrà prima richiesto di inserire la password per crittografare le chiavi che hai impostato sopra. Inserisci la password per procedere.
Successivamente, è necessario generare un seme casuale da utilizzare nella creazione delle chiavi digitando qualsiasi tasto sulla tastiera fino a quando l'indicatore di avanzamento non è pieno. Quando è pieno, premi invio per continuare.
... Continue typing until the progress meter is full: |************************************************************| Finished. Press enter to continue: ENTER
- Successivamente, digita y per specificare che si tratta di un certificato CA in fase di generazione.
- Premere INVIO per la lunghezza del percorso
- Inserisci n per specificare che questa non è un'estensione critica.
Generating key. This may take a few moments... Is this a CA certificate [y/N]? y Enter the path length constraint, enter to skip [<0 for unlimited path]: > ENTER Is this a critical extension [y/N]? n
Genera il certificato del server VPN
Quindi, genera il certificato del server firmato utilizzando la CA creata sopra e assegnagli le estensioni.
certutil -S -c "Kifarunix-demo CA" -n "vpn.kifarunix-demo.com" -s "O=Kifarunix-demo,CN=vpn.kifarunix-demo.com" -k rsa -g 4096 -v 12 -d sql:/etc/ipsec.d/certsdb -t ",," -1 -6 -8 "vpn.kifarunix-demo.com"
Allo stesso modo, inserisci la password di crittografia delle chiavi, genera il seme dalla tastiera e premi INVIO per continuare.
Definire la chiave e l'utilizzo dell'estensione della chiave.
Generating key. This may take a few moments... 0 - Digital Signature 1 - Non-repudiation 2 - Key encipherment 3 - Data encipherment 4 - Key agreement 5 - Cert signing key 6 - CRL signing key Other to finish > 0 0 - Digital Signature 1 - Non-repudiation 2 - Key encipherment 3 - Data encipherment 4 - Key agreement 5 - Cert signing key 6 - CRL signing key Other to finish > 2 0 - Digital Signature 1 - Non-repudiation 2 - Key encipherment 3 - Data encipherment 4 - Key agreement 5 - Cert signing key 6 - CRL signing key Other to finish > 8
Is this a critical extension [y/N]? n 0 - Server Auth 1 - Client Auth 2 - Code Signing 3 - Email Protection 4 - Timestamp 5 - OCSP Responder 6 - Step-up 7 - Microsoft Trust List Signing Other to finish > 0 0 - Server Auth 1 - Client Auth 2 - Code Signing 3 - Email Protection 4 - Timestamp 5 - OCSP Responder 6 - Step-up 7 - Microsoft Trust List Signing Other to finish > 8 Is this a critical extension [y/N]? N
Genera il certificato client VPN
Esegui il comando seguente per generare un certificato client VPN. Sostituisci il nome del certificato (nome host utilizzato qui) con il nome dell'host per cui stai generando il certificato client;
certutil -S -c "Kifarunix-demo CA" -n "janedoe.kifarunix-demo.com" -s "O=Kifarunix-demo,CN=janedoe.kifarunix-demo.com" -k rsa -g 4096 -v 12 -d sql:/etc/ipsec.d/certsdb -t ",," -1 -6 -8 "janedoe.kifarunix-demo.com"
Allo stesso modo, inserisci le stesse opzioni di cui sopra.
Elenco dei certificati disponibili nel database
certutil -L -d sql:/etc/ipsec.d/certsdb
Certificate Nickname Trust Attributes SSL,S/MIME,JAR/XPI Kifarunix-demo CA CTu,u,u vpn.kifarunix-demo.com u,u,u janedoe.kifarunix-demo.com u,u,u johndoe.kifarunix-demo.com u,u,u
Esporta e importa il certificato del gateway nel DB pluto.
pk12util -o vpn.kifarunix-demo.com.p12 -n "vpn.kifarunix-demo.com" -d sql:/etc/ipsec.d/certsdb
Puoi saltare la password PKCS12.
ls
vpn.kifarunix-demo.com.p12
Una volta esportato, importa il certificato del server VPN su DB.
ipsec import vpn.kifarunix-demo.com.p12
Esporta i certificati dell'host client, la chiave privata e il certificato CA. Tutti questi verranno archiviati in un file .p12 come file di output specificato nel comando seguente.
pk12util -o janedoe.kifarunix-demo.com.p12 -n "janedoe.kifarunix-demo.com" -d sql:/etc/ipsec.d/certsdb
Allo stesso modo, salta la password PKCS12.
ls
janedoe.kifarunix-demo.com.p12 vpn.kifarunix-demo.com.p12
Se hai generato certificati per altri host client, puoi anche esportarli.
Crea file di configurazione dell'endpoint VPN IPSec
Sul tuo host VPN IPSec, crea un file di configurazione su /etc/ipsec.d
directory per i tuoi client mobili. /etc/ipsec.conf
è il file di configurazione predefinito per Libreswan e ha una direttiva per includere altre configurazioni definite su /etc/ipsec.d
directory.
vim /etc/ipsec.d/mobile-clients.conf
Inserisci le seguenti configurazioni nel file sopra.
conn roadwarriors left=vpn.kifarunix-demo.com leftsubnet=0.0.0.0/0 leftcert=vpn.kifarunix-demo.com leftid=%fromcert leftrsasigkey=%cert leftsendcert=always right=%any rightaddresspool=10.0.8.10-10.0.8.254 rightca=%same rightrsasigkey=%cert modecfgdns="8.8.8.8,10.0.8.1" authby=rsasig auto=start dpddelay=60 dpdtimeout=300 dpdaction=clear mobike=yes ikev2=insist fragmentation=yes type=tunnel
Fare riferimento a man ipsec.conf
per una descrizione completa delle opzioni utilizzate sopra.
Verifica il file di configurazione per eventuali errori;
/usr/libexec/ipsec/addconn --config /etc/ipsec.conf --checkconfig
Se non ci sono errori, comando exit con stato 0.
echo $?
In caso contrario, qualsiasi errore viene visualizzato sullo standard output. Correggi gli errori prima di poter procedere.
Abilita la registrazione IPsec decommentando la riga, #logfile=/var/log/pluto.log
, nel /etc/ipsec.conf
configuration.
config setup # Normally, pluto logs via syslog. logfile=/var/log/pluto.log ...
Riavvia IPsec;
systemctl restart ipsec
Controlla lo stato;
systemctl status ipsec
Se ipsec non si avvia, deve esserci un errore di sintassi di configurazione. Esegui il comando seguente per individuare l'errore.
journalctl -xe
Disabilita rp_filter per Libreswan e ricarica tutte le configurazioni del kernel.
echo "net.ipv4.conf.all.rp_filter = 0" >> /etc/sysctl.d/50-libreswan.conf
sysctl --system
Verifica configurazione IPsec
Per confermare che la configurazione IPsec è corretta, esegui semplicemente il comando seguente;
ipsec verify
Verifying installed system and configuration files Version check and ipsec on-path [OK] Libreswan 3.29 (netkey) on 4.18.0-193.6.3.el8_2.x86_64 Checking for IPsec support in kernel [OK] NETKEY: Testing XFRM related proc values ICMP default/send_redirects [OK] ICMP default/accept_redirects [OK] XFRM larval drop [OK] Pluto ipsec.conf syntax [OK] Checking rp_filter [OK] Checking that pluto is running [OK] Pluto listening for IKE on udp 500 [OK] Pluto listening for IKE/NAT-T on udp 4500 [OK] Pluto ipsec.secret syntax [OK] Checking 'ip' command [OK] Checking 'iptables' command [OK] Checking 'prelink' command does not interfere with FIPS [OK] Checking for obsolete ipsec.conf options [OK]
Copia i certificati client VPN sui tuoi client mobili
Ora puoi copiare i certificati client sui tuoi client remoti e connettiti al server VPN.
In questo tutorial, utilizziamo i sistemi Ubuntu 20.04 e Ubuntu 18.04 come nostri client remoti.
Abbiamo generato certificati per due host, janedoe.kifarunix-demo.com
e johndoe.kifarunix-demo.com
rispettivamente per gli host client Ubuntu 20.04 e Ubuntu 18.04.
Configurazione del client Libreswan
Sul tuo sistema Ubuntu, installa il pacchetto libreswan.
apt update
apt install libreswan
Crea il file di configurazione della connessione VPN del client Libreswan
vim /etc/ipsec.d/johndoe.conf
Inserisci il contenuto di seguito;
conn vpn.kifarunix-demo.com left=%defaultroute leftcert=johndoe.kifarunix-demo.com leftid=%fromcert leftrsasigkey=%cert leftsubnet=0.0.0.0/0 leftmodecfgclient=yes right=vpn.kifarunix-demo.com rightsubnet=0.0.0.0/0 [email protected] rightrsasigkey=%cert narrowing=yes ikev2=insist rekey=yes fragmentation=yes mobike=no auto=start
Se utilizzi nomi host, assicurati che siano risolvibili.
Allo stesso modo, sul tuo secondo host;
vim /etc/ipsec.d/janedoe.conf
conn vpn.kifarunix-demo.com left=%defaultroute leftcert=janedoe.kifarunix-demo.com leftid=%fromcert leftrsasigkey=%cert leftsubnet=0.0.0.0/0 leftmodecfgclient=yes right=vpn.kifarunix-demo.com rightsubnet=0.0.0.0/0 [email protected] rightrsasigkey=%cert narrowing=yes ikev2=insist rekey=yes fragmentation=yes mobike=no auto=start
Verifica la sintassi di configurazione;
/usr/lib/ipsec/addconn --config /etc/ipsec.conf --checkconfig
Inizializza il database NSS;
sudo ipsec checknss
Importa i file del certificato PKCS#12 X.509 nel database NSS;
sudo ipsec import janedoe.kifarunix-demo.com.p12
Fai lo stesso sull'altro host client. Premi INVIO per saltare la password PCKS12.
Enter password for PKCS12 file: ENTER pk12util: PKCS12 IMPORT SUCCESSFUL correcting trust bits for Kifarunix-demo CA
Puoi elencare i certificati disponibili sull'host client;
certutil -L -d sql:/var/lib/ipsec/nss
Avvia IPsec e abilitalo all'esecuzione all'avvio del sistema.
sudo ipsec setup start
Controlla lo stato;
systemctl status ipsec
● ipsec.service - Internet Key Exchange (IKE) Protocol Daemon for IPsec Loaded: loaded (/lib/systemd/system/ipsec.service; enabled; vendor preset: disabled) Active: active (running) since Sun 2020-06-21 12:28:02 EAT; 7min ago Docs: man:ipsec(8) man:pluto(8) man:ipsec.conf(5) Process: 11251 ExecStartPre=/usr/lib/ipsec/addconn --config /etc/ipsec.conf --checkconfig (code=exited, status=0/SUCCESS) Process: 11266 ExecStartPre=/usr/lib/ipsec/_stackmanager start (code=exited, status=0/SUCCESS) Process: 11742 ExecStartPre=/usr/sbin/ipsec --checknss (code=exited, status=0/SUCCESS) Process: 11743 ExecStartPre=/usr/sbin/ipsec --checknflog (code=exited, status=0/SUCCESS) Main PID: 11757 (pluto) Status: "Startup completed." Tasks: 2 (limit: 2319) Memory: 10.3M CGroup: /system.slice/ipsec.service └─11757 /usr/lib/ipsec/pluto --leak-detective --config /etc/ipsec.conf --nofork Jun 21 12:28:02 koromicha pluto[11757]: "vpn.kifarunix-demo.com"[1] 192.168.56.133 #2: certificate verified OK: O=Kifarunix-demo,CN=vpn.kifarunix-demo> Jun 21 12:28:02 koromicha pluto[11757]: "vpn.kifarunix-demo.com"[1] 192.168.56.133 #2: IKEv2 mode peer ID is ID_DER_ASN1_DN: 'CN=vpn.kifarunix-demo.co> Jun 21 12:28:02 koromicha pluto[11757]: "vpn.kifarunix-demo.com"[1] 192.168.56.133 #2: Authenticated using RSA Jun 21 12:28:02 koromicha pluto[11757]: "vpn.kifarunix-demo.com"[1] 192.168.56.133 #2: received INTERNAL_IP4_ADDRESS 10.0.8.10 Jun 21 12:28:02 koromicha pluto[11757]: "vpn.kifarunix-demo.com"[1] 192.168.56.133 #2: received INTERNAL_IP4_DNS 8.8.8.8 Jun 21 12:28:02 koromicha pluto[11757]: "vpn.kifarunix-demo.com"[1] 192.168.56.133 #2: received INTERNAL_IP4_DNS 10.0.8.1 Jun 21 12:28:02 koromicha pluto[11757]: "vpn.kifarunix-demo.com"[1] 192.168.56.133 #2: up-client output: updating resolvconf Jun 21 12:28:02 koromicha pluto[11757]: "vpn.kifarunix-demo.com"[1] 192.168.56.133 #2: negotiated connection [10.0.8.10-10.0.8.10:0-65535 0] -> [0.0.0> Jun 21 12:28:02 koromicha pluto[11757]: "vpn.kifarunix-demo.com"[1] 192.168.56.133 #2: STATE_V2_IPSEC_I: IPsec SA established tunnel mode {ESP/NAT=
Controlla lo stato sull'altro host remoto.
Dall'output dello stato, puoi controllare l'indirizzo IP assegnato, INTERNAL_IP4_ADDRESS 10.0.8.10 . Sull'altro host del mio client, INTERNAL_IP4_ADDRESS 10.0.8.11 .
Carica la connessione su ciascun host client;
sudo ipsec auto --add vpn.kifarunix-demo.com
Stabilisci il tunnel aprendo la connessione su ciascun host;
sudo ipsec auto --up vpn.kifarunix-demo.com
Da ciascun host, esegui il ping dell'indirizzo IP assegnato dalla VPN dell'altro.
ping 10.0.8.11 -c 4
PING 10.0.8.11 (10.0.8.11) 56(84) bytes of data. 64 bytes from 10.0.8.11: icmp_seq=1 ttl=63 time=2.82 ms 64 bytes from 10.0.8.11: icmp_seq=2 ttl=63 time=2.84 ms 64 bytes from 10.0.8.11: icmp_seq=3 ttl=63 time=3.06 ms 64 bytes from 10.0.8.11: icmp_seq=4 ttl=63 time=2.83 ms --- 10.0.8.11 ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3010ms rtt min/avg/max/mdev = 2.820/2.888/3.060/0.099 ms
Sull'altro host;
ping 10.0.8.10 -c 4
PING 10.0.8.10 (10.0.8.10) 56(84) bytes of data. 64 bytes from 10.0.8.10: icmp_seq=1 ttl=63 time=1.63 ms 64 bytes from 10.0.8.10: icmp_seq=2 ttl=63 time=2.38 ms 64 bytes from 10.0.8.10: icmp_seq=3 ttl=63 time=3.18 ms 64 bytes from 10.0.8.10: icmp_seq=4 ttl=63 time=2.86 ms --- 10.0.8.10 ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3005ms rtt min/avg/max/mdev = 1.631/2.516/3.187/0.588 ms
I due host remoti possono ora comunicare tramite il server VPN IPsec. Questo ci porta alla fine del nostro tutorial su come configurare il server VPN IPSec con Libreswan su CentOS 8.
Ulteriori letture/riferimenti
Esempi di configurazione di Libreswan
Esercitazioni correlate
Installa e configura il server OpenVPN su Ubuntu 20.04
Configura l'autenticazione basata su LDAP OpenVPN
Configura il client VPN strongSwan su Ubuntu 18.04/CentOS 8
Configura la VPN IPSEC usando StrongSwan su Debian 10
Connettiti a Cisco VPN utilizzando il file PCF su Ubuntu