IKE gère l'authentification entre deux terminaux communicants. Il permet également aux terminaux de négocier les algorithmes à utiliser pour configurer un tunnel IPsec.
Dans notre guide précédent, nous avons expliqué comment installer et configurer un VPN IPSec à l'aide de StrongSwan sur Ubuntu 18.04. Voir le lien ci-dessous ;
Configurer le VPN IPSEC à l'aide de StrongSwan sur Ubuntu 18.04
Configurer le serveur VPN IPSec avec Libreswan sur CentOS 8
Il existe différentes implémentations VPN Server-client de Libreswan. Dans ce guide, nous allons apprendre comment configurer le serveur VPN IPSec pour les clients mobiles (clients avec des IP attribuées dynamiquement tels que les ordinateurs portables) ici connus sous le nom de road warriors
, afin qu'ils puissent se connecter au LAN local de n'importe où. Les clients mobiles sont authentifiés à l'aide de certificats et utilisent donc le protocole IKEv2.
IKEv2 (Internet Key Exchange version 2) est un protocole de cryptage VPN qui gère les actions de demande et de réponse. IKE effectue une authentification mutuelle entre deux parties et établit une association de sécurité IKE (SA) qui comprend des informations secrètes partagées qui peuvent être utilisées pour établir efficacement des SA pour Encapsulating Security Payload (ESP) ou Authentication Header (AH) et un ensemble d'algorithmes cryptographiques à utilisées par les SA pour protéger le trafic qu'elles acheminent.
Exécuter la mise à jour du système
Mettez à jour vos packages système sur le serveur à utiliser comme serveur VPN Libreswan.
dnf update
Installer Libreswan sur CentOS 8
Une fois la mise à jour effectuée, installez Libreswan. Libreswan est disponible sur les référentiels CentOS 8 AppStream et, par conséquent, vous pouvez simplement installer à l'aide du gestionnaire de packages comme suit :
dnf install libreswan
Courir Libreswan
Une fois l'installation terminée, démarrez et activez Libreswan ipsec
service à exécuter au démarrage du système.
systemctl enable --now ipsec
Initialiser la base de données IPSec NSS
Ensuite, vous devez initialiser la base de données Network Security Services (NSS). La base de données NSS est utilisée pour stocker les clés d'authentification et les certificats d'identité.
ipsec initnss
S'il existe une base de données précédente, vous pouvez la supprimer afin d'avoir une nouvelle base de données. La base de données NSS est stockée sous /etc/ipsec.d
.
Pour supprimer toutes les anciennes bases de données, arrêtez IPsec, s'il est en cours d'exécution et supprimez les bases de données NSS en exécutant les commandes ci-dessous ;
systemctl stop ipsec
rm -rf /etc/ipsec.d/*db
Vous pouvez ensuite réinitialiser la base de données NSS ;
ipsec initnss
Puis démarrez IPSec ;
systemctl start ipsec
Ouvrir les ports et protocoles Libreswan sur le pare-feu
Le IKE
le protocole utilise le UDP port 500
et 4500
tandis que les protocoles IPsec, Encapsulated Security Payload
(ESP) et Authenticated Header
(AH) utilise le protocol number 50 and 51
respectivement.
Par conséquent, ouvrez ces ports et protocoles sur votre zone de pare-feu active sur votre serveur VPN (Left Endpoint) dans ce guide.
firewall-cmd --get-active-zone
Pour ouvrir les ports et le pare-feu sur la zone de pare-feu par défaut :
firewall-cmd --add-port={4500,500}/udp --permanent
firewall-cmd --add-protocol={50,51} --permanent
Ou vous pouvez simplement utiliser le service IPSec ;
firewall-cmd --add-service=ipsec --permanent
Recharger FirewallD
firewall-cmd --reload
Configurer le serveur VPN IPSec avec Libreswan
Libreswan n'utilise pas le modèle client-serveur. Il utilise cependant les termes left
et right
pour faire référence aux points de terminaison impliqués dans une connexion donnée. Les termes gauche/droite peuvent être utilisés arbitrairement pour faire référence à chaque système tant que vous maintenez la cohérence dans l'utilisation des termes lors de la configuration de vos connexions.
Activer le transfert IP
Sur le VPN server
, vous devez activer le transfert IP.
Exécutez la commande ci-dessous pour vérifier si le transfert IP est activé :
sysctl net.ipv4.ip_forward
Si la sortie est net.ipv4.ip_forward = 0
, le transfert IP est désactivé et vous devez l'activer en exécutant l'une des commandes ci-dessous ;
Le transfert IP peut être activé en activant simplement le masquage IP sur firewalld.
firewall-cmd --add-masquerade --permanentfirewall-cmd --reload
Vous pouvez vérifier le transfert IP :
cat /proc/sys/net/ipv4/ip_forward 1
Une valeur de 1 signifie que le transfert IP est activé.
De la même manière. vous pouvez activer le transfert IP en exécutant les commandes ci-dessous :
echo "net.ipv4.ip_forward =1">> /etc/sysctl.conf
Actualisez avec sysctl.conf avec la nouvelle configuration.
sysctl -p
Assurez-vous également que les redirections sont désactivées.
less /etc/sysctl.d/50-libreswan.conf
# Nous désactivons les redirections pour XFRM/IPsecnet.ipv6.conf.default.accept_redirects =0net.ipv6.conf.all.accept_redirects =0net.ipv4.conf.default.send_redirects =0net.ipv4.conf.default.accept_redirects =0net.ipv4.conf.all.send_redirects =0net.ipv4.conf.all.accept_redirects =0net.ipv4.conf.all.rp_filter =0
Générer des certificats de serveur VPN et de client
Ensuite, vous devez générer les certificats du serveur VPN et des clients à utiliser pour l'authentification.
Créer une base de données de génération de certificats
Exécutez la commande ci-dessous pour créer une base de données qui peut être utilisée pour générer une clé privée et un certificat CA à utiliser pour générer des certificats hôtes. Nous utiliserons certutil
commande pour générer les certificats.
mkdir /etc/ipsec.d/certsdb
certutil -N -d sql:/etc/ipsec.d/certsdb
La commande vous invite à entrer le mot de passe pour chiffrer vos clés.
Entrez un mot de passe qui sera utilisé pour chiffrer vos clés.Le mot de passe doit comporter au moins 8 caractères et doit contenir au moins un caractère non alphabétique.Entrez nouveau mot de passe :StRONgPassw0Rd Saisissez à nouveau le mot de passe :StRONgPassw0Rd
Générer un certificat CA
Nous utilisons des certificats auto-signés dans ce tutoriel et c'est ainsi que nous pouvons générer notre certificat CA local.
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
Consultez man certutil
pour en savoir plus sur les options utilisées.
Lorsque la commande s'exécute, vous serez d'abord invité à entrer le mot de passe pour les clés de chiffrement que vous avez définies ci-dessus. Entrez le mot de passe pour continuer.
Ensuite, vous devez générer une graine aléatoire à utiliser dans la création de vos clés en tapant n'importe quelle touche sur le clavier jusqu'à ce que la barre de progression soit pleine. Une fois qu'il est plein, appuyez sur Entrée pour continuer.
...Continuez à taper jusqu'à ce que la jauge de progression soit pleine :|*********************************** **************************|Terminé. Appuyez sur Entrée pour continuer :ENTER
- Ensuite, tapez y pour spécifier qu'il s'agit d'un certificat CA en cours de génération.
- Appuyez sur ENTER pour la longueur du chemin
- Entrez n pour préciser qu'il ne s'agit pas d'une extension critique.
Clé de génération. Cela peut prendre quelques instants... S'agit-il d'un certificat CA [o/N] ?o Entrez la contrainte de longueur de chemin, entrez pour ignorer [<0 pour un chemin illimité] :> ENTRER S'agit-il d'une extension critique [o/N] ?n
Générer le certificat du serveur VPN
Ensuite, générez le certificat de serveur signé à l'aide de l'autorité de certification créée ci-dessus et attribuez-lui des extensions.
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"
De même, entrez le mot de passe de cryptage des clés, générez la graine à partir du clavier et appuyez sur ENTREE pour continuer.
Définissez la clé et l'utilisation de l'extension de clé.
Clé de génération. Cela peut prendre quelques instants... 0 - Signature numérique 1 - Non-répudiation 2 - Chiffrement de la clé 3 - Chiffrement des données 4 - Accord de la clé 5 - Clé de signature du certificat 6 - Clé de signature CRL Autre pour terminer> 0 0 - Signature numérique 1 - Non-répudiation 2 - Chiffrement de clé 3 - Chiffrement de données 4 - Accord de clé 5 - Clé de signature de certificat 6 - Clé de signature CRL Autre à finir> 2 0 - Signature numérique 1 - Non-répudiation 2 - Chiffrement de clé 3 - Chiffrement de données 4 - Accord clé 5 - Clé de signature Cert 6 - Clé de signature CRL Autre à terminer> 8
Est-ce une extension critique [y/N] ?n 0 - Authentification du serveur 1 - Authentification du client 2 - Signature du code 3 - Protection de la messagerie 4 - Horodatage 5 - Répondeur OCSP 6 - Step-up 7 - Signature de la liste de confiance Microsoft Autre à terminer> 0 0 - Authentification du serveur 1 - Authentification du client 2 - Signature de code 3 - Protection des e-mails 4 - Horodatage 5 - Répondeur OCSP 6 - Step-up 7 - Signature de la liste de confiance Microsoft Autre à terminer> 8Est-ce une extension critique [y/ N]?N
Générer le certificat client VPN
Exécutez la commande ci-dessous pour générer un certificat client VPN. Remplacez le nom du certificat (nom d'hôte utilisé ici) par le nom de l'hôte pour lequel vous générez le certificat 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"
De même, entrez les mêmes options que ci-dessus.
Liste des certificats disponibles dans la base de données
certutil -L -d sql:/etc/ipsec.d/certsdb
Pseudo du certificat Attributs de confiance SSL,S/MIME,JAR/XPIKifarunix-demo CA CTu,u,uvpn.kifarunix-demo.com u,u,ujanedoe.kifarunix-demo.com u,u,ujohndoe.kifarunix-demo .com tu, tu, tu
Exportez et importez le certificat de passerelle dans la base de données pluto.
pk12util -o vpn.kifarunix-demo.com.p12 -n "vpn.kifarunix-demo.com" -d sql:/etc/ipsec.d/certsdbVous pouvez ignorer le mot de passe PKCS12.
lsvpn.kifarunix-demo.com.p12Une fois exporté, importez le certificat du serveur VPN dans la base de données.
ipsec import vpn.kifarunix-demo.com.p12Exportez les certificats de l'hôte client, la clé privée et le certificat CA. Tous ceux-ci seront stockés dans un fichier .p12 en tant que fichier de sortie spécifié dans la commande ci-dessous.
pk12util -o janedoe.kifarunix-demo.com.p12 -n "janedoe.kifarunix-demo.com" -d sql:/etc/ipsec.d/certsdbDe même, ignorez le mot de passe PKCS12.
lsjanedoe.kifarunix-demo.com.p12 vpn.kifarunix-demo.com.p12Si vous avez généré des certificats pour d'autres hôtes clients, vous pouvez également les exporter.
Créer un fichier de configuration de point de terminaison VPN IPSec
Sur votre hôte VPN IPSec, créez un fichier de configuration sur
/etc/ipsec.d
répertoire pour vos clients mobiles./etc/ipsec.conf
est le fichier de configuration par défaut pour Libreswan et il a une directive pour inclure d'autres configurations définies sur/etc/ipsec.d
répertoire.vim /etc/ipsec.d/mobile-clients.confMettez les configurations suivantes sur le fichier ci-dessus.
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=tunnelConsultez
man ipsec.conf
pour une description complète des options utilisées ci-dessus.Vérifiez le fichier de configuration pour toute erreur ;
/usr/libexec/ipsec/addconn --config /etc/ipsec.conf --checkconfigS'il n'y a pas d'erreur, la commande sort avec le statut 0.
echo $?Sinon, toute erreur est affichée sur la sortie standard. Corrigez les erreurs avant de continuer.
Activez la journalisation IPsec en décommentant la ligne,
#logfile=/var/log/pluto.log
, sur le/etc/ipsec.conf
configuration.config setup # Normalement, Pluto se connecte via syslog. logfile=/var/log/pluto.log ...Redémarrez IPsec ;
systemctl redémarrer ipsecVérifier l'état ;
statut systemctl ipsecSi ipsec ne démarre pas, il doit y avoir une erreur de syntaxe de configuration. Exécutez la commande ci-dessous pour identifier l'erreur.
journalctl -xeDésactivez rp_filter pour Libreswan et rechargez toutes les configurations du noyau.
echo "net.ipv4.conf.all.rp_filter =0">> /etc/sysctl.d/50-libreswan.confsysctl --systemVérifier la configuration IPsec
Pour confirmer que la configuration IPsec est correcte, exécutez simplement la commande ci-dessous :
ipsec verifyVérification des fichiers système et de configuration installésVérification de la version et ipsec sur le chemin [OK]Libreswan 3.29 (netkey) sur 4.18.0-193.6.3.el8_2.x86_64Vérification de la prise en charge d'IPsec dans le noyau [OK] NETKEY :test des valeurs proc liées à XFRM ICMP default/send_redirects [OK] ICMP default/accept_redirects [OK] XFRM larval drop [OK]Syntaxe Pluto ipsec.conf [OK]Vérification de rp_filter [OK]Vérification que pluto est en cours d'exécution [OK] Pluto écoute IKE sur udp 500 [OK ] Pluto écoute IKE/NAT-T sur udp 4500 [OK] Syntaxe Pluto ipsec.secret [OK]Vérification de la commande 'ip' [OK]Vérification de la commande 'iptables' [OK]Vérification de la commande 'prelink' n'interfère pas avec FIPS [ OK]Vérification des options ipsec.conf obsolètes [OK]Copier les certificats client VPN sur vos clients mobiles
Vous pouvez désormais copier les certificats clients sur vos clients distants et connectez-vous au serveur VPN.
Dans ce didacticiel, nous utilisons les systèmes Ubuntu 20.04 et Ubuntu 18.04 comme clients distants.
Nous avons généré des certificats pour deux hôtes,
janedoe.kifarunix-demo.com
etjohndoe.kifarunix-demo.com
pour les hôtes clients Ubuntu 20.04 et Ubuntu 18.04 respectivement.Configuration du client Libreswan
Sur votre système Ubuntu, installez le package libreswan.
apt updateapt install libreswanCréer un fichier de configuration de connexion VPN Client Libreswan
vim /etc/ipsec.d/johndoe.confEntrez le contenu ci-dessous ;
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 example@unixlinux.online rightrsasigkey=%cert rétrécissement=oui ikev2=insister rekey=oui fragmentation=oui mobike=non auto=démarrerSi vous utilisez des noms d'hôte, assurez-vous qu'ils peuvent être résolus.
De même, sur votre deuxième hébergeur ;
vim /etc/ipsec.d/janedoe.confconn 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 example@unixlinux.online rightrsasigkey=%cert rétrécissement=oui ikev2=insister rekey=oui fragmentation=oui mobike=non auto=démarrerVérifiez la syntaxe de configuration ;
/usr/lib/ipsec/addconn --config /etc/ipsec.conf --checkconfigInitialiser la base de données NSS ;
sudo ipsec checknssImportez les fichiers de certificat PKCS#12 X.509 dans la base de données NSS ;
sudo ipsec import janedoe.kifarunix-demo.com.p12Faites de même sur l'autre hôte client. Appuyez sur ENTER pour ignorer le mot de passe PCKS12.
Entrez le mot de passe pour le fichier PKCS12 :ENTER pk12util :PKCS12 IMPORT SUCCESSFULcorrecting trust bits for Kifarunix-demo CAVous pouvez répertorier les certificats disponibles sur l'hôte client ;
certutil -L -d sql:/var/lib/ipsec/nssDémarrez IPsec et activez-le pour qu'il s'exécute au démarrage du système.
démarrage de la configuration de sudo ipsecVérifiez l'état ;
statut systemctl ipsec● ipsec.service - Démon de protocole d'échange de clés Internet (IKE) pour IPsec Chargé :chargé (/lib/systemd/system/ipsec.service ; activé ; préréglage du fournisseur :désactivé) Actif :actif (en cours d'exécution) depuis Sun 2020- 06-21 12:28:02 MANGER ; il y a 7 minutes Docs :man:ipsec(8) man:pluto(8) man:ipsec.conf(5) Processus :11251 ExecStartPre=/usr/lib/ipsec/addconn --config /etc/ipsec.conf --checkconfig ( code=exited, status=0/SUCCESS) Processus :11266 ExecStartPre=/usr/lib/ipsec/_stackmanager start (code=exited, status=0/SUCCESS) Processus :11742 ExecStartPre=/usr/sbin/ipsec --checknss ( code=exited, status=0/SUCCESS) Processus :11743 ExecStartPre=/usr/sbin/ipsec --checknflog (code=exited, status=0/SUCCESS) PID principal :11757 (pluto) Status :"Démarrage terminé." Tâches :2 (limite :2 319) Mémoire :10,3 Mo CGroup :/system.slice/ipsec.service └─11757 /usr/lib/ipsec/pluto --leak-detective --config /etc/ipsec.conf --noforkJun 21 12:28:02 koromicha pluto[11757] :"vpn.kifarunix-demo.com"[1] 192.168.56.133 #2 :certificat vérifié OK :O=Kifarunix-demo,CN=vpn.kifarunix-demo>Juin 21 12:28:02 koromicha pluto[11757] :"vpn.kifarunix-demo.com"[1] 192.168.56.133 #2 :l'ID de pair en mode IKEv2 est 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 :authentifié avec RSA21 juin 12:28:02 koromicha pluto[11757] :"vpn. kifarunix-demo.com"[1] 192.168.56.133 #2 :reçu INTERNAL_IP4_ADDRESS 10.0.8.10 21 juin 12:28:02 koromicha pluto[11757] :"vpn.kifarunix-demo.com"[1] 192.168.56.133 #2 :reçu INTERNAL_IP4_DNS 8.8.8.8Juin 21 12:28:02 koromicha pluto[11757] :" vpn.kifarunix-demo.com"[1] 192.168.56.133 #2 :reçu INTERNAL_IP4_DNS 10.0.8.1Jun 21 12:28:02 koromicha pluto[11757] :"vpn.kifarunix-demo.com"[1] 192.168.56.133 #2 :sortie up-client :mise à jour resolvconfJun 21 12:28:02 koromicha pluto[11757] :"vpn.kifarunix-demo.com"[1] 192.168.56.133 #2 :connexion négociée [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 :tunnel IPsec SA établi mode {ESP/NAT=Vérifiez l'état sur l'autre hôte distant.
À partir de la sortie d'état, vous pouvez vérifier l'adresse IP attribuée, INTERNAL_IP4_ADDRESS 10.0.8.10 . Sur mon autre hôte client, INTERNAL_IP4_ADDRESS 10.0.8.11 .
Charger la connexion sur chaque hôte client ;
sudo ipsec auto --add vpn.kifarunix-demo.comÉtablissez le tunnel en établissant la connexion sur chaque hôte ;
sudo ipsec auto --up vpn.kifarunix-demo.comDepuis chaque hôte, envoyez un ping à l'adresse IP assignée au VPN de l'autre.
ping 10.0.8.11 -c 4PING 10.0.8.11 (10.0.8.11) 56(84) octets de données.64 octets depuis 10.0.8.11 :icmp_seq=1 ttl=63 temps=2,82 ms64 octets depuis 10.0.8.11 :icmp_seq=2 ttl=63 temps =2.84 ms64 octets depuis 10.0.8.11 :icmp_seq=3 ttl=63 time=3.06 ms64 octets depuis 10.0.8.11 :icmp_seq=4 ttl=63 time=2.83 ms--- 10.0.8.11 statistiques ping ---4 paquets transmis, 4 reçus, 0 % de perte de paquets, temps 3 010 msrtt min/avg/max/mdev =2,820/2,888/3,060/0,099 msSur l'autre hôte ;
ping 10.0.8.10 -c 4PING 10.0.8.10 (10.0.8.10) 56(84) octets de données.64 octets depuis 10.0.8.10 :icmp_seq=1 ttl=63 temps=1,63 ms64 octets depuis 10.0.8.10 :icmp_seq=2 ttl=63 temps =2.38 ms64 octets depuis 10.0.8.10 :icmp_seq=3 ttl=63 time=3.18 ms64 octets depuis 10.0.8.10 :icmp_seq=4 ttl=63 time=2.86 ms--- 10.0.8.10 statistiques ping ---4 paquets transmis, 4 reçus, 0 % de perte de paquets, temps 3 005 msrtt min/avg/max/mdev =1,631/2,516/3,187/0,588 msLes deux hôtes distants peuvent désormais communiquer via un serveur VPN IPsec. Cela nous amène à la fin de notre tutoriel sur la configuration du serveur VPN IPSec avec Libreswan sur CentOS 8.
Autres lectures/références
Exemples de configuration Libreswan
Tutoriels associés
Installer et configurer le serveur OpenVPN sur Ubuntu 20.04
Configurer l'authentification basée sur OpenVPN LDAP
Configurer le client VPN strongSwan sur Ubuntu 18.04/CentOS 8
Configurer le VPN IPSEC à l'aide de StrongSwan sur Debian 10
Connectez-vous à Cisco VPN à l'aide du fichier PCF sur Ubuntu