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

Configura il server VPN IPSec con Libreswan su CentOS 8

Benvenuti nella nostra guida di oggi su come configurare il server VPN IPSec con Libreswan su CentOS 8. Libreswan è un'implementazione gratuita di IKE/IPsec per Linux. IPsec è l'Internet Protocol Security che utilizza una crittografia avanzata per fornire servizi di autenticazione e crittografia e consente di creare tunnel sicuri attraverso reti non affidabili. Tutto ciò che passa attraverso la rete non attendibile viene crittografato dalla macchina gateway ipsec e decrittografato dal gateway all'altra estremità del tunnel. Il tunnel risultante è una rete privata virtuale o VPN.

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 leftright 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

OpenVPN
  1. Configurazione iniziale del server con Ubuntu 14.04

  2. Come configurare un server SFTP su CentOS

  3. Configura il server SysLog su CentOS 6 / RHEL 6

  4. Come configurare il server SysLog su CentOS 7 / RHEL 7

  5. Configura il server OpenVPN su CentOS 8

Come configurare il server di backup centralizzato con Amanda su CentOS 7

Come configurare Kubernetes 1.5 con kubeadm su CentOS

Come proteggere il server di posta elettronica dall'hacking con VPN (CentOS/RHEL)

CentOS 8 – Configurazione iniziale del server

Configurazione di un server OpenVPN con CentOS e Viscosity

Come configurare HAProxy su CentOS 8