Comment configurer un VPN IKEv2 en utilisant Strongswan et Let’s encrypt sur CentOS 7

Strongswan est une implémentation IPSec multiplateforme open source. Il s’agit d’une solution VPN basée sur IPSec qui se concentre sur les mécanismes d’authentification forte. 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 sécurisée des utilisateurs IKEv2 EAP.

Dans ce tutoriel, je vais te 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 un serveur CentOS 7.

Conditions préalables

  • Serveur CentOS 7
  • Privilèges de racine

Ce que nous allons faire ?

  1. Installer Strongswan sur CentOS 7
  2. Générer SSL Letsencrypt
  3. Configurer Strongswan
  4. Activer le pare-feu NAT
  5. Active la redirection de port
  6. Test de

Étape 1 – Installer Strongswan sur CentOS 7

Dans cette première étape, nous allons installer le logiciel d’implémentation IPsec Strongswan et tous les paquets nécessaires à partir du référentiel EPEL.

Installe le dépôt EPEL et installe le paquet strongswan à l’aide des commandes yum ci-dessous.

yum -y install epel-release
yum -y install strongswan

Attends que le paquet strongswan soit installé.

Installe Strongswan sur CentOS 7

Étape 2 – Générer le certificat SSL avec Let’s encrypt

Nous allons créer le serveur VPN IKEv2 en utilisant un nom de domaine ‘ikev2.hakase-labs.io’ et utiliser les certificats générés par letsencrypt.

Dans cette étape, nous allons installer l’outil ‘certbot’ de letsencrypt et générer des certificats pour le nom de domaine du serveur ‘ikev2.hakase-labs.io’.

Installe l’outil letsencrypt ‘certbot’.

yum -y install certbot

Après l’installation de certbot, nous devons ouvrir le port HTTP et HTTPS du serveur à l’aide de firewall-cmd.

Ajoute les services HTTP et HTTPS à la liste de services de 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

Génère un certificat SSL avec Let's encrypt

Nous pouvons maintenant générer de nouveaux fichiers de certificat SSL à l’aide de l’outil certbot de letsencrypt.

Exécute la commande certbot ci-dessous.

certbot certonly --rsa-key-size 4096 --standalone --agree-tos --no-eff-email --email [email protected] -d ikev2.hakase-labs.io

Les certificats Letsencrypt pour le nom de domaine vpn ‘ikev2.hakase-labs.io’ ont été générés et se trouvent dans le répertoire ‘/etc/letsencrypt/live’.

Certificat SSL obtenu auprès de Let's encrypt

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/ikev2.hakase-labs.io/fullchain.pem /etc/strongswan/ipsec.d/certs/
cp /etc/letsencrypt/live/ikev2.hakase-labs.io/privkey.pem /etc/strongswan/ipsec.d/private/
cp /etc/letsencrypt/live/ikev2.hakase-labs.io/chain.pem /etc/strongswan/ipsec.d/cacerts/

Tous les certificats letsencrypt pour le VPN Strongswan nommé ‘ikev2.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/

SSL cert files

Étape 3 – Configure Strongswan

Va dans le répertoire ‘/etc/strongswan’ et sauvegarde le fichier de configuration par défaut ‘ipsec.conf’.

cd /etc/strongswan/
mv ipsec.conf ipsec.conf.asli

Crée un nouveau fichier ‘ipsec.conf’ en utilisant l’éditeur vim.

vim ipsec.conf

Et colle la configuration suivante.

#global configuration IPsec
#chron logger
config setup
    charondebug="ike 1, knl 1, cfg 0"
    uniqueids=no

#define new ipsec connection
conn hakase-vpn
    auto=add
    compress=no
    type=tunnel
    keyexchange=ikev2
    ike=aes128-sha1-modp1024,aes128-sha1-modp1536,aes128-sha1-modp2048,aes128-sha256-ecp256,aes128-sha256-modp1024,aes128-sha256-modp1536,aes128-sha256-modp2048,aes256-aes128-sha256-sha1-modp2048-modp4096-modp1024,aes256-sha1-modp1024,aes256-sha256-modp1024,aes256-sha256-modp1536,aes256-sha256-modp2048,aes256-sha256-modp4096,aes256-sha384-ecp384,aes256-sha384-modp1024,aes256-sha384-modp1536,aes256-sha384-modp2048,aes256-sha384-modp4096,aes256gcm16-aes256gcm12-aes128gcm16-aes128gcm12-sha256-sha1-modp2048-modp4096-modp1024,3des-sha1-modp1024!
    esp=aes128-aes256-sha1-sha256-modp2048-modp4096-modp1024,aes128-sha1,aes128-sha1-modp1024,aes128-sha1-modp1536,aes128-sha1-modp2048,aes128-sha256,aes128-sha256-ecp256,aes128-sha256-modp1024,aes128-sha256-modp1536,aes128-sha256-modp2048,aes128gcm12-aes128gcm16-aes256gcm12-aes256gcm16-modp2048-modp4096-modp1024,aes128gcm16,aes128gcm16-ecp256,aes256-sha1,aes256-sha256,aes256-sha256-modp1024,aes256-sha256-modp1536,aes256-sha256-modp2048,aes256-sha256-modp4096,aes256-sha384,aes256-sha384-ecp384,aes256-sha384-modp1024,aes256-sha384-modp1536,aes256-sha384-modp2048,aes256-sha384-modp4096,aes256gcm16,aes256gcm16-ecp384,3des-sha1!
    fragmentation=yes
    forceencaps=yes
    dpdaction=clear
    dpddelay=300s
    rekey=no
    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

Sauvegarde et quitte.

Détails de la configuration :

  • Crée une nouvelle connexion de tunnel VPN IPSec nommée ‘hakase-vpn’.
  • Spécifie les suites de chiffrement IKEv2 et ESP pour l’authentification.
  • La configuration du serveur ‘gauche’ utilise un nom de domaine ‘ikev2.hakase-labs.io’ et utilise le certificat letsencrypt ‘fullchain.pem’ situé dans le répertoire ‘/etc/strongswan/ipsec.d/certs’.
  • La ‘bonne’ configuration clients/à distance avec la méthode d’authentification EAP ‘eap-mschapv2’, l’attribution de la plage d’adresses IP virtuelles ‘10.15.1.0/24’ à tous les clients connectés et l’utilisation des DNS publics Cloudflare et google.

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.

Modifie le fichier ‘ipsec.secrets’.

vim ipsec.secrets

Colle la configuration ci-dessous.

: RSA "privkey.pem"
hakase : EAP "[email protected]"
tensai : EAP "[email protected]"

Sauvegarde et quitte.

Détails de la configuration :

  • Indique la clé privée du serveur RSA en utilisant le certificat letsencrypt ‘privkey.pem’ situé dans le répertoire ‘/etc/strongswan/ipsec.d/private’.
  • Définis les informations d’identification de l’utilisateur EAP au format ‘user : EAP « password »‘.

Configuration de Strongswan

La configuration IPSec de strongswan est terminée. Démarre le service strongswan et active-le pour qu’il se lance chaque fois au démarrage du système.

systemctl start strongswan
systemctl enable strongswan

Étape 4 – Activer le 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’.

Ajoute ‘AH’ et ‘ESP’ pour les protocoles d’authentification et de cryptage à Firewalld.

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'

Ajoute les ports UDP et le service 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"

Active maintenant le mode NAT masquerade et recharge les règles de configuration de firewalld.

firewall-cmd --zone=public --permanent --add-masquerade
firewall-cmd --reload

Configuration de Firewalld NAT

Le mode NAT sur firewalld a été activé, vérifie en utilisant la commande ci-dessous.

firewall-cmd --list-all

Voici le résultat.

Configuration du pare-feu

Étape 5 – Activer la redirection de port

Pour activer la redirection de port, nous devons modifier le fichier ‘sysctl.conf’.

Modifie le fichier ‘/etc/sysctl.conf’ à l’aide de l’éditeur vim.

vim /etc/sysctl.conf

Colle-y la configuration suivante.

net.ipv4.ip_forward = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0

Enregistre et quitte, puis recharge en utilisant la commande sysctl ci-dessous.

sysctl -p

Le transfert de port a été activé. Redémarre maintenant le service Strongswan.

systemctl restart strongswan

Configurer le transfert de port dans sysctl.conf

Étape 6 – Test du VPN IPSec de Strongswan

Dans ce cas, nous allons faire le test sur le MacOS X et le téléphone android.

Sur MacOS

– Ouvre les ‘Préférences système’ et clique sur le menu ‘Réseau’.

Clique sur le bouton ‘+’ pour créer une nouvelle connexion VPN.

    • Interface : ‘VPN’.
    • Type de VPN : IKEv2
    • Nom du service : ‘IKEv2-vpn

Configure VPN on MacOS

– Dans les champs ‘Server Address’ et ‘Remote ID’, saisis le nom de domaine VPN ‘ikev2.hakase-labs.io’.
– Clique sur ‘Authentication Settings’.
– Authentification à l’aide d’un ‘Username’.
– Saisis le nom d’utilisateur ‘tensai’ et le mot de passe ‘[email protected]
– Clique sur ‘OK’ et sur ‘Apply’.

Paramètres d'authentification MacOS VPN

Une nouvelle connexion VPN IKEv2 a été créée sur le client. Clique maintenant sur le bouton « Connecter ».

Une nouvelle connexion VPN IKEv2 a été créée.

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écharge et installe l’application native strongswan android sur Google-Play.
– Ajoute un nouveau profil VPN
– Tape le nom de domaine du serveur ‘ikev2.hakase-labs.io’ et utilise l’authentification IKEv2 EAP Username and Password.

Voici le résultat lorsque nous nous connectons au serveur VPN.

Configurer le VPN sur Android

Le serveur VPN basé sur IKEv2 IPSec a été créé en utilisant Strongswan et Letsencrypt sur le serveur CentOS 7.

Référence

Vous aimerez aussi...