Strongswan est une implémentation IPSec multiplateforme open source. Il s'agit d'une solution VPN basée sur IPSec qui se concentre sur des mécanismes d'authentification forts. Strongswan prend en charge les protocoles d'échange de clés IKEv1 et IKEv2, l'authentification basée sur des certificats X.509 ou des clés pré-partagées, et l'authentification utilisateur sécurisée IKEv2 EAP.
Dans ce tutoriel, je vais vous montrer comment installer un serveur VPN IPSec en utilisant Strongswan. Nous allons créer un serveur VPN IKEv2 avec l'authentification "EAP-MSCHAPv2" et utiliser des certificats Letsencrypt sur le serveur CentOS 8.
Prérequis
- Serveur CentOS 8
- Privilèges root
Qu'allons-nous faire ?
- Installer Strongswan sur CentOS 8
- Générer SSL Letsencrypt
- Configurer Strongswan
- Activer le pare-feu NAT
- Activer le transfert de port
- Test
Étape 1 - Installer Strongswan sur CentOS 8
Dans cette première étape, nous allons installer le logiciel d'implémentation strongswan IPsec et tous les packages nécessaires à partir du référentiel EPEL.
Avant d'installer le package strongswan, vous devez ajouter le référentiel EPEL au système CentOS 8.
Ajoutez le référentiel EPEL pour le serveur CentOS 8.
sudo dnf install epel-release
Après cela, installez le package strongswan à partir du référentiel EPEL à l'aide de la commande dnf ci-dessous.
sudo dnf install strongswan
Attendez que le package strongswan soit installé.
Étape 2 - Générer un certificat SSL avec Let's encrypt
Pour ce guide, nous allons créer le serveur VPN IKEv2 en utilisant un nom de domaine "vpn.hakase-labs.io" et utiliser des certificats générés à partir de letsencrypt.
Dans cette étape, nous allons installer manuellement l'outil letencrypt "certbot" et générer des certificats pour le nom de domaine du serveur "vpn.hakase-labs.io".
Téléchargez le fichier binaire certbot depuis GitHub à l'aide de la commande wget ci-dessous.
wget https://dl.eff.org/certbot-auto -O /usr/local/bin/certbot-auto
Après cela, faites-en un exécutable en modifiant l'autorisation du fichier.
chmod +x /usr/local/bin/certbot-auto
Et l'outil certbot pour générer des certificats Letsencrypt a été installé.
Avant de générer les certificats Letsencrypt, nous devons ouvrir les ports HTTP et HTTPS du serveur à l'aide de firewall-cmd.
Ajoutez les services HTTP et HTTPS à la liste des services firewalld en exécutant les commandes firewall-cmd ci-dessous.
firewall-cmd --add-service=http --permanent
firewall-cmd --add-service=https --permanent
firewall-cmd --reload
Nous pouvons maintenant générer de nouveaux fichiers de certificat SSL à l'aide de l'outil Letsencrypt certbot-auto.
Remplacez l'adresse e-mail et le nom de domaine par les vôtres et exécutez la commande "certbot-auto" ci-dessous.
certbot-auto certonly --rsa-key-size 2048 --standalone --agree-tos --no-eff-email --email [email protected] -d vpn.hakase-labs.io
Une fois terminé, vous obtiendrez le résultat ci-dessous.
Tous les certificats de votre nom de domaine sont générés dans le répertoire '/etc/letsencrypt/live/domain.com'.
Ensuite, nous devons copier les fichiers de certificat 'fullchain.pem', 'privkey.pem' et 'chain.pem' dans le répertoire '/etc/strongswan/ipsec.d/'.
cp /etc/letsencrypt/live/vpn.hakase-labs.io/fullchain.pem /etc/strongswan/ipsec.d/certs/
cp /etc/letsencrypt/live/vpn.hakase-labs.io/privkey.pem /etc/strongswan/ipsec.d/private/
cp /etc/letsencrypt/live/vpn.hakase-labs.io/chain.pem /etc/strongswan/ipsec.d/cacerts/
Tous les certificats Letsencrypt pour le VPN Strongswan nommés 'vpn.hakase-labs.io' ont été générés et copiés dans le répertoire '/etc/strongswan/ipsec.d'.
tree /etc/strongswan/ipsec.d/
Étape 3 - Configurer Strongswan
Allez dans le répertoire '/etc/strongswan' et sauvegardez le fichier de configuration par défaut 'ipsec.conf'.
cd /etc/strongswan/
mv ipsec.conf ipsec.conf.asli
Créez-en un nouveau 'ipsec.conf' à l'aide de l'éditeur vim.
vim ipsec.conf
Et collez la configuration suivante.
config setup
uniqueids=never # allow multiple connections per user
charondebug="ike 2, knl 2, cfg 2, net 2, esp 2, dmn 2, mgr 2"
conn %default
fragmentation=yes
closeaction=restart
rekey=no
dpdaction=clear
keyexchange=ikev2
compress=yes
dpddelay=35s
lifetime=3h
ikelifetime=12h
ike=aes256gcm16-prfsha512-ecp384!
esp=aes256gcm16-ecp384!
left=%any
[email protected]
leftcert=fullchain.pem
leftsendcert=always
leftsubnet=0.0.0.0/0
right=%any
rightid=%any
rightauth=eap-mschapv2
rightsourceip=10.15.1.0/24
rightdns=1.1.1.1,8.8.8.8
rightsendcert=never
eap_identity=%identity
conn ikev2-pubkey
auto=add
Enregistrez et quittez.
Ensuite, nous devons modifier le fichier 'ipsec.secrets' pour définir la clé privée du serveur RSA et les informations d'identification du mot de passe de l'utilisateur EAP.
Modifiez le fichier 'ipsec.secrets'.
vim ipsec.secrets
Collez la configuration ci-dessous.
: RSA "privkey.pem"
hakase : EAP "[email protected]"
tensai : EAP "[email protected]"
Enregistrez et quittez.
Et la configuration Strongswan IPSec est terminée. Ajoutez le service strongswan au démarrage du démarrage, puis démarrez le service.
systemctl enable strongswan
systemctl start strongswan
Le service strongswan est opérationnel sur le serveur CentOS 8, vérifiez-le à l'aide de la commande suivante.
systemctl status strongswan
netstat -plntu
Et vous verrez le résultat comme ci-dessous.
Étape 4 - Activer NAT dans Firewalld
Dans cette étape, nous allons activer le masquage NAT et ajouter les protocoles IPSec Authentication Header (AH) et Encapsulating Security Payload (ESP) sur Firewalld en utilisant la configuration 'rich-rule'.
Ajoutez 'AH' et 'ESP' pour les protocoles d'authentification et de chiffrement au pare-feu.
firewall-cmd --zone=public --permanent --add-rich-rule='rule protocol value="esp" accept'
firewall-cmd --zone=public --permanent --add-rich-rule='rule protocol value="ah" accept'
Ajoutez les ports et le service UDP ipsec.
firewall-cmd --zone=public --permanent --add-port=500/udp
firewall-cmd --zone=public --permanent --add-port=4500/udp
firewall-cmd --zone=public --permanent --add-service="ipsec"
Activez maintenant le masquage du mode NAT et rechargez les règles de configuration du pare-feu.
firewall-cmd --zone=public --permanent --add-masquerade
firewall-cmd --reload
Le mode NAT sur firewalld a été activé, vérifiez à l'aide de la commande ci-dessous.
firewall-cmd --list-all
Voici le résultat.
Étape 5 - Activer le transfert de port
Pour activer la redirection de port, nous devons modifier le fichier 'sysctl.conf'.
Modifiez le fichier '/etc/sysctl.conf' à l'aide de l'éditeur vim.
vim /etc/sysctl.conf
Collez-y la configuration suivante.
net.ipv4.ip_forward = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
Enregistrez et quittez, rechargez maintenant à l'aide de la commande sysctl ci-dessous.
sysctl -p
La redirection de port a été activée. Redémarrez maintenant le service strongswan.
systemctl restart strongswan
Étape 6 - Tester le VPN IPSec Strongswan
Dans ce cas, nous ferons le test sur le téléphone MacOS X et Android.
Sur MacOS
- Ouvrez les "Préférences système" et cliquez sur le menu "Réseau".
Cliquez sur le bouton "+" pour créer une nouvelle connexion VPN.
- Interface :"VPN"
- Type de VPN :'IKEv2'
- Nom du service :'IKEv2-vpn
- Dans 'Adresse du serveur' et 'ID distant', saisissez le nom de domaine VPN 'ikev2.hakase-labs.io'.
- Cliquez sur 'Paramètres d'authentification'.
- Authentification à l'aide d'un 'Nom d'utilisateur' .
- Tapez le nom d'utilisateur 'tensai' avec le mot de passe '[email protected]'
- Cliquez sur 'OK' et cliquez sur 'Appliquer'.
Une nouvelle connexion VPN IKEv2 a été créée sur le client. Cliquez maintenant sur le bouton de connexion.
Et le client a été connecté au serveur VPN strongswan et a une adresse IP interne/privée 10.15.1.1.
Sur Android
- Téléchargez et installez l'application android native strongswan depuis Google-Play.
- Ajoutez un nouveau profil VPN
- Tapez le nom de domaine du serveur 'ikev2.hakase-labs.io' et utilisez le nom d'utilisateur et le mot de passe IKEv2 EAP authentification.
Voici le résultat lorsque nous nous connectons au serveur VPN.
Le serveur VPN basé sur IPSec IKEv2 a été créé à l'aide de Strongswan et Letsencrypt sur le serveur CentOS 8.