Comment configurer un serveur VPN IKEv2 avec StrongSwan sur Ubuntu 22.04

Introduction

A virtual private network, or VPN, allows you to securely encrypt traffic as it travels through untrusted networks, such as those at the coffee shop, a conference, or an airport.

Internet Key Exchange v2, ou IKEv2, est un protocole qui permet un tunneling IPSec direct entre le serveur et le client. Dans les implémentations VPN IKEv2, IPSec fournit le chiffrement du trafic réseau. IKEv2 est pris en charge nativement sur certaines plates-formes (OS X 10.11+, iOS 9.1+ et Windows 10) sans nécessiter d’applications supplémentaires, et il gère assez facilement les hoquets des clients.

Dans ce tutoriel, vous configurerez un serveur VPN IKEv2 en utilisant StrongSwan sur un serveur Ubuntu 22.04. Vous apprendrez ensuite comment vous y connecter avec des clients Windows, macOS, Ubuntu, iOS et Android.

Prérequis

Pour réaliser ce tutoriel, vous aurez besoin de :

Étape 1 — Installation de StrongSwan

Tout d’abord, vous installerez StrongSwan, un démon IPSec open source que vous configurerez en tant que serveur VPN. Vous installerez également le composant d’infrastructure à clé publique (PKI) afin de pouvoir créer une autorité de certification (CA) pour fournir des informations d’identification à votre infrastructure.

Commencez par mettre à jour le cache des paquets locaux :

  1. sudo apt update

Ensuite, installez le logiciel en tapant :

  1. sudo apt install strongswan strongswan-pki libcharon-extra-plugins libcharon-extauth-plugins libstrongswan-extra-plugins

Le paquet supplémentaire libcharon-extauth-plugins est utilisé pour garantir que différents clients peuvent s’authentifier sur votre serveur en utilisant un nom d’utilisateur et un mot de passe partagés. Le paquet libstrongswan-extra-plugins est inclus pour que Strongswan prenne en charge les suites de chiffrement à courbe elliptique qui utilisent la suite cryptographique Curve25519.

Maintenant que tout est installé, passez à la création de vos certificats.

Étape 2 — Création d’une autorité de certification

Un serveur IKEv2 nécessite un certificat pour s’identifier auprès des clients. Pour aider à créer le certificat requis, le paquet strongswan-pki est livré avec un utilitaire appelé pki pour générer une autorité de certification et des certificats de serveur.

Pour commencer, créez quelques répertoires pour stocker tous les éléments sur lesquels vous travaillerez. La structure des répertoires correspond à certains des répertoires dans /etc/ipsec.d, où vous déplacerez éventuellement tous les éléments que vous créez:

  1. mkdir -p ~/pki/{cacerts,certs,private}

Ensuite, verrouillez les autorisations pour que nos fichiers privés ne puissent pas être consultés par d’autres utilisateurs:

  1. chmod 700 ~/pki

Maintenant que vous avez une structure de répertoires pour stocker tout, vous pouvez générer une clé racine. Il s’agira d’une clé RSA de 4096 bits qui sera utilisée pour signer votre certificat d’autorité de certification racine:

Exécutez ces commandes pour générer la clé:

  1. pki --gen --type rsa --size 4096 --outform pem > ~/pki/private/ca-key.pem

Ensuite, vous pouvez passer à la création de votre autorité de certification racine, en utilisant la clé que vous venez de générer pour signer le certificat racine:

  1. pki --self --ca --lifetime 3650 --in ~/pki/private/ca-key.pem \
  2. --type rsa --dn "CN=VPN root CA" --outform pem > ~/pki/cacerts/ca-cert.pem

Le drapeau --lifetime 3650 est utilisé pour garantir que le certificat racine de l’autorité de certification sera valide pendant 10 ans. Le certificat racine d’une autorité ne change généralement pas, car il devrait être redistribué à chaque serveur et client qui en dépendent, donc 10 ans est une valeur d’expiration par défaut sûre.

Vous pouvez changer la valeur du nom distingué (DN) pour autre chose si vous le souhaitez. Le nom commun (champ CN) ici est juste un indicateur, il n’a donc pas besoin de correspondre à quoi que ce soit dans votre infrastructure.

Maintenant que votre autorité de certification racine est opérationnelle, vous pouvez créer un certificat que le serveur VPN utilisera.

Étape 3 — Génération d’un certificat pour le serveur VPN

Vous allez maintenant créer un certificat et une clé pour le serveur VPN. Ce certificat permettra au client de vérifier l’authenticité du serveur à l’aide du certificat CA que nous venons de générer.

Tout d’abord, créez une clé privée pour le serveur VPN avec la commande suivante :

  1. pki --gen --type rsa --size 4096 --outform pem > ~/pki/private/server-key.pem

Ensuite, créez et signez le certificat du serveur VPN avec la clé de l’autorité de certification que vous avez créée à l’étape précédente. Exécutez la commande suivante, mais modifiez le Nom commun (CN) et le champ de Nom alternatif du sujet (SAN) avec le nom DNS ou l’adresse IP de votre serveur VPN :

  1. pki --pub --in ~/pki/private/server-key.pem --type rsa \
  2. | pki --issue --lifetime 1825 \
  3. --cacert ~/pki/cacerts/ca-cert.pem \
  4. --cakey ~/pki/private/ca-key.pem \
  5. --dn "CN=server_domain_or_IP" --san server_domain_or_IP \
  6. --flag serverAuth --flag ikeIntermediate --outform pem \
  7. > ~/pki/certs/server-cert.pem

Note : Si vous utilisez une adresse IP au lieu d’un nom DNS, vous devrez spécifier plusieurs entrées --san. La ligne dans le bloc de commande précédent où vous spécifiez le nom distingué (--dn ...) devra être modifiée avec l’entrée supplémentaire comme dans l’extrait suivant :

--dn "CN=adresse IP" --san @adresse_IP --san adresse_IP \

La raison de cette entrée supplémentaire --san @adresse_IP est que certains clients vérifieront si le certificat TLS comporte à la fois une entrée DNS et une entrée d’adresse IP pour un serveur lorsqu’ils vérifient son identité.

L’option --flag serverAuth est utilisée pour indiquer que le certificat sera utilisé explicitement pour l’authentification du serveur, avant l’établissement du tunnel chiffré. L’option --flag ikeIntermediate est utilisée pour prendre en charge les anciens clients macOS.

Maintenant que vous avez généré tous les fichiers TLS/SSL dont StrongSwan a besoin, vous pouvez déplacer les fichiers à leur emplacement dans le répertoire /etc/ipsec.d en tapant :

  1. sudo cp -r ~/pki/* /etc/ipsec.d/

Dans cette étape, vous avez créé une paire de certificats qui seront utilisés pour sécuriser les communications entre le client et le serveur. Vous avez également signé les certificats avec la clé CA, de sorte que le client pourra vérifier l’authenticité du serveur VPN à l’aide du certificat CA. Avec tous ces certificats prêts, vous êtes prêt à passer à la configuration de StrongSwan.

Étape 4 — Configuration de StrongSwan

StrongSwan dispose d’un fichier de configuration par défaut avec quelques exemples, mais nous devrons faire la plupart de la configuration nous-mêmes. Sauvegardons le fichier pour référence avant de commencer à partir de zéro :

  1. sudo mv /etc/ipsec.conf{,.original}

Créez et ouvrez un nouveau fichier de configuration vierge à l’aide de votre éditeur de texte préféré. Ici, vous utiliserez nano :

  1. sudo nano /etc/ipsec.conf

Remarque : En travaillant à travers cette section pour configurer la partie serveur de votre VPN, vous rencontrerez des paramètres qui font référence aux côtés gauche et droit d’une connexion. Lorsque vous travaillez avec des VPN IPSec, le côté gauche par convention fait référence au système local que vous configurez, dans ce cas le serveur. Les directives du côté droit dans ces paramètres feront référence aux clients distants, comme les téléphones et autres ordinateurs.

Lorsque vous passerez à la configuration des clients plus tard dans ce tutoriel, les fichiers de configuration des clients se référeront à eux-mêmes en utilisant diverses directives gauche, et le serveur sera désigné en utilisant la terminologie du côté droit.

Tout d’abord, nous indiquerons à StrongSwan de journaliser les statuts des démons pour le débogage et d’autoriser les connexions dupliquées. Ajoutez ces lignes au fichier :

/etc/ipsec.conf
config setup
    charondebug="ike 1, knl 1, cfg 0"
    uniqueids=no

Ensuite, nous créerons une section de configuration pour notre VPN. Nous dirons également à StrongSwan de créer des tunnels VPN IKEv2 et de charger automatiquement cette section de configuration lorsqu’il démarre. Ajoutez les lignes suivantes au fichier :

/etc/ipsec.conf
. . .
conn ikev2-vpn
    auto=add
    compress=no
    type=tunnel
    keyexchange=ikev2
    fragmentation=yes
    forceencaps=yes

Nous configurerons également la détection de pairs morts pour effacer toute connexion « pendante » en cas de déconnexion inattendue du client. Ajoutez ces lignes :

/etc/ipsec.conf
. . .
conn ikev2-vpn
    . . .
    dpdaction=clear
    dpddelay=300s
    rekey=no

Ensuite, nous configurerons les paramètres IPSec du côté « gauche » du serveur. Chacun des paramètres suivants garantit que le serveur est configuré pour accepter les connexions des clients et s’identifier correctement. Vous ajouterez chacun de ces réglages au fichier /etc/ipsec.conf une fois que vous aurez compris ce qu’ils sont et pourquoi ils sont utilisés :

  • left=%any La valeur %any garantit que le serveur utilisera l’interface réseau où il reçoit les connexions entrantes pour la communication ultérieure avec les clients. Par exemple, si vous connectez un client via un réseau privé, le serveur utilisera l’adresse IP privée où il reçoit le trafic pour le reste de la connexion.
  • leftid=@server_domain_or_IP Cette option contrôle le nom que le serveur présente aux clients. Lorsqu’elle est combinée avec l’option suivante leftcert, l’option leftid garantit que le nom configuré du serveur et le nom distinctif (DN) contenu dans le certificat public correspondent.
  • leftcert=server-cert.pem Cette option est le chemin vers le certificat public du serveur que vous avez configuré à l’étape 3. Sans cela, le serveur ne pourra pas s’authentifier auprès des clients, ni terminer la négociation de la configuration IKEv2.
  • leftsendcert=always La valeur always garantit qu’un client se connectant au serveur recevra toujours une copie du certificat public du serveur lors de la configuration initiale de la connexion.
  • leftsubnet=0.0.0.0/0 La dernière option du côté « left » que vous ajouterez indique aux clients les sous-réseaux accessibles derrière le serveur. Dans ce cas, 0.0.0.0/0 est utilisé pour représenter l’ensemble des adresses IPv4, ce qui signifie que le serveur indiquera aux clients d’envoyer tout leur trafic via le VPN par défaut.

Maintenant que vous êtes familiarisé avec chacune des options pertinentes du côté « left », ajoutez-les toutes au fichier de cette manière:

/etc/ipsec.conf
. . .
conn ikev2-vpn
    . . .
    left=%any
    leftid=@server_domain_or_IP
    leftcert=server-cert.pem
    leftsendcert=always
    leftsubnet=0.0.0.0/0

Remarque: Lors de la configuration de l’ID du serveur (leftid), incluez uniquement le caractère @ si votre serveur VPN sera identifié par un nom de domaine:

/etc/ipsec.conf
    . . .    leftid=@vpn.example.com
    . . .

Si le serveur est identifié par son adresse IP, mettez simplement l’adresse IP:

/etc/ipsec.conf
    . . .
    leftid=your_server_ip
    . . .

Ensuite, nous pouvons configurer les paramètres IPSec « droits » du client. Chacun des paramètres suivants indique au serveur comment accepter les connexions des clients, comment les clients doivent s’authentifier auprès du serveur, et les plages d’adresses IP privées et les serveurs DNS que les clients utiliseront. Ajoutez chacun de ces paramètres au fichier /etc/ipsec.conf une fois que vous êtes familiarisé avec ce qu’ils sont et pourquoi ils sont utilisés:

  • right=%any L’option %any pour le côté right de la connexion indique au serveur d’accepter les connexions entrantes de n’importe quel client distant.
  • rightid=%any Cette option garantit que le serveur ne rejettera pas les connexions des clients qui fournissent une identité avant l’établissement du tunnel crypté.
  • rightauth=eap-mschapv2 Cette option configure la méthode d’authentification que les clients utiliseront pour s’authentifier auprès du serveur. eap-mschapv2 est utilisé ici pour une compatibilité étendue afin de prendre en charge des clients tels que Windows, macOS et les appareils Android.
  • rightsourceip=10.10.10.0/24 Cette option indique au serveur d’attribuer des adresses IP privées aux clients à partir de la plage d’adresses 10.10.10.0/24 spécifiée.
  • rightdns=8.8.8.8,8.8.4.4 Ces adresses IP sont les résolveurs DNS publics de Google. Ils peuvent être modifiés pour utiliser d’autres résolveurs publics, les résolveurs du serveur VPN ou tout autre résolveur accessible par les clients.
  • rightsendcert=never Cette option indique au serveur que les clients n’ont pas besoin d’envoyer un certificat pour s’authentifier eux-mêmes.

Maintenant que vous êtes familier avec les options requises du côté « right » pour le VPN, ajoutez les lignes suivantes à /etc/ipsec.conf:

/etc/ipsec.conf
. . .
conn ikev2-vpn
    . . .
    right=%any
    rightid=%any
    rightauth=eap-mschapv2
    rightsourceip=10.10.10.0/24
    rightdns=8.8.8.8,8.8.4.4
    rightsendcert=never

Maintenant, nous allons dire à StrongSwan de demander les informations d’identification de l’utilisateur lorsque celui-ci se connecte:

/etc/ipsec.conf
. . .
conn ikev2-vpn
    . . .
    eap_identity=%identity

Enfin, ajoutez les lignes suivantes pour prendre en charge les clients Linux, Windows, macOS, iOS et Android. Ces lignes spécifient les différents algorithmes d’échange de clés, de hachage, d’authentification et de chiffrement (communément appelés Suites de chiffrement) que StrongSwan permettra à différents clients d’utiliser:

/etc/ipsec.conf
. . .
conn ikev2-vpn
    . . .
    ike=chacha20poly1305-sha512-curve25519-prfsha512,aes256gcm16-sha384-prfsha384-ecp384,aes256-sha1-modp1024,aes128-sha1-modp1024,3des-sha1-modp1024!
    esp=chacha20poly1305-sha512,aes256gcm16-ecp384,aes256-sha256,aes256-sha1,3des-sha1!

Chaque suite de chiffrement prise en charge est délimitée des autres par une virgule. Par exemple, chacha20poly1305-sha512-curve25519-prfsha512 est une suite, et aes256gcm16-sha384-prfsha384-ecp384 en est une autre. Les suites de chiffrement répertoriées ici sont sélectionnées pour garantir la plus large compatibilité possible avec les clients Windows, macOS, iOS, Android et Linux.

Le fichier de configuration complet devrait ressembler à ceci:

/etc/ipsec.conf
config setup
    charondebug="ike 1, knl 1, cfg 0"
    uniqueids=no

conn ikev2-vpn
    auto=add
    compress=no
    type=tunnel
    keyexchange=ikev2
    fragmentation=yes
    forceencaps=yes
    dpdaction=clear
    dpddelay=300s
    rekey=no
    left=%any
    leftid=@server_domain_or_IP
    leftcert=server-cert.pem
    leftsendcert=always
    leftsubnet=0.0.0.0/0
    right=%any
    rightid=%any
    rightauth=eap-mschapv2
    rightsourceip=10.10.10.0/24
    rightdns=8.8.8.8,8.8.4.4
    rightsendcert=never
    eap_identity=%identity
    ike=chacha20poly1305-sha512-curve25519-prfsha512,aes256gcm16-sha384-prfsha384-ecp384,aes256-sha1-modp1024,aes128-sha1-modp1024,3des-sha1-modp1024!
    esp=chacha20poly1305-sha512,aes256gcm16-ecp384,aes256-sha256,aes256-sha1,3des-sha1!

Enregistrez et fermez le fichier une fois que vous avez vérifié que vous avez ajouté chaque ligne correctement. Si vous avez utilisé nano, faites-le en appuyant sur CTRL + X, puis sur Y, et enfin sur ENTRÉE.

Maintenant que vous avez configuré les paramètres VPN, vous pouvez passer à la création d’un compte afin que les utilisateurs puissent se connecter au serveur.

Étape 5 — Configuration de l’authentification VPN

Votre serveur VPN est maintenant configuré pour accepter les connexions des clients, mais il n’y a pas encore de crédentials configurés. Vous devrez configurer quelques choses dans un fichier de configuration spécial appelé ipsec.secrets:

  • Vous devez indiquer à StrongSwan où trouver la clé privée de notre certificat de serveur, afin que le serveur puisse s’authentifier auprès des clients.
  • Vous devez également configurer une liste d’utilisateurs autorisés à se connecter au VPN.

Ouvrons le fichier des secrets pour le modifier:

  1. sudo nano /etc/ipsec.secrets

Tout d’abord, indiquez à StrongSwan où trouver la clé privée et comment la parser.

/etc/ipsec.secrets
: RSA "server-key.pem"

Assurez-vous que la ligne commence par le caractère : et qu’il y a un espace après pour que toute la ligne soit : RSA "server-key.pem".

Ensuite, vous définirez les identifiants de l’utilisateur. Vous pouvez inventer n’importe quelle combinaison de nom d’utilisateur et de mot de passe que vous souhaitez:

/etc/ipsec.secrets
your_username : EAP "your_password"

Enregistrez et fermez le fichier. Maintenant que vous avez terminé de travailler avec les paramètres VPN, redémarrez le service VPN afin que notre configuration soit appliquée:

  1. sudo systemctl restart strongswan-starter

Maintenant que le serveur VPN a été entièrement configuré avec les options du serveur et les informations d’identification des utilisateurs, il est temps de passer à la configuration de la partie la plus importante : le pare-feu.

Étape 6 — Configuration du pare-feu & du transfert IP du noyau

Avec la configuration de StrongSwan terminée, vous devez configurer le pare-feu pour autoriser le trafic VPN et le transférer.

Si vous avez suivi le didacticiel de configuration initiale du serveur prérequis, vous devriez avoir un pare-feu UFW activé. Si vous n’avez pas encore configuré UFW, vous devriez commencer par ajouter une règle pour autoriser les connexions SSH à travers le pare-feu afin que votre session actuelle ne se ferme pas lorsque vous activez UFW:

  1. sudo ufw allow OpenSSH

Ensuite, activez le pare-feu en tapant :

  1. sudo ufw enable

Ensuite, ajoutez une règle pour autoriser le trafic UDP sur les ports IPSec standard, 500 et 4500:

  1. sudo ufw allow 500,4500/udp

Ensuite, vous ouvrirez l’un des fichiers de configuration d’UFW pour ajouter quelques politiques de bas niveau pour le routage et le transfert des paquets IPSec. Cependant, avant de faire cela, vous devez trouver quelle interface réseau sur notre serveur est utilisée pour l’accès à Internet. Trouvez cette interface en interrogeant le périphérique associé à la route par défaut:

  1. ip route show default

Votre interface publique devrait suivre le mot « dev ». Par exemple, ce résultat montre l’interface nommée eth0, qui est mise en évidence dans l’exemple suivant:

Output
default via your_server_ip dev eth0 proto static

Lorsque vous avez votre interface réseau publique, ouvrez le fichier /etc/ufw/before.rules dans votre éditeur de texte. Les règles dans ce fichier sont ajoutées au pare-feu avant le reste des règles d’entrée et de sortie habituelles. Elles sont utilisées pour configurer la translation d’adresse réseau (NAT) afin que le serveur puisse correctement router les connexions vers et depuis les clients et l’Internet.

  1. sudo nano /etc/ufw/before.rules

Près du début du fichier (avant la ligne *filter), ajoutez le bloc de configuration suivant. Changez chaque instance de eth0 dans la configuration ci-dessus pour correspondre au nom de l’interface que vous avez trouvé avec ip route. Les lignes *nat créent des règles afin que le pare-feu puisse correctement router et manipuler le trafic entre les clients VPN et l’Internet. La ligne *mangle ajuste la taille maximale des segments de paquets pour éviter d’éventuels problèmes avec certains clients VPN:

/etc/ufw/before.rules
*nat
-A POSTROUTING -s 10.10.10.0/24 -o eth0 -m policy --pol ipsec --dir out -j ACCEPT
-A POSTROUTING -s 10.10.10.0/24 -o eth0 -j MASQUERADE
COMMIT

*mangle
-A FORWARD --match policy --pol ipsec --dir in -s 10.10.10.0/24 -o eth0 -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1361:1536 -j TCPMSS --set-mss 1360
COMMIT

*filter
:ufw-before-input - [0:0]
:ufw-before-output - [0:0]
:ufw-before-forward - [0:0]
:ufw-not-local - [0:0]
. . .

Ensuite, après les lignes de définition de la chaîne et de *filter, ajoutez un bloc de configuration supplémentaire:

/etc/ufw/before.rules
. . .
*filter
:ufw-before-input - [0:0]
:ufw-before-output - [0:0]
:ufw-before-forward - [0:0]
:ufw-not-local - [0:0]

-A ufw-before-forward --match policy --pol ipsec --dir in --proto esp -s 10.10.10.0/24 -j ACCEPT
-A ufw-before-forward --match policy --pol ipsec --dir out --proto esp -d 10.10.10.0/24 -j ACCEPT

Ces lignes indiquent au pare-feu de transférer le trafic ESP (Encapsulating Security Payload) afin que les clients VPN puissent se connecter. ESP offre une sécurité supplémentaire pour nos paquets VPN lorsqu’ils traversent des réseaux non fiables.

Lorsque vous avez terminé, enregistrez et fermez le fichier une fois que vous avez vérifié que vous avez ajouté chaque ligne correctement. Si vous avez utilisé nano, faites-le en appuyant sur CTRL + X, puis Y, et enfin ENTER.

Avant de redémarrer le pare-feu, vous devez également modifier certains paramètres du noyau réseau pour permettre le routage d’une interface à une autre. Le fichier qui contrôle ces paramètres s’appelle /etc/ufw/sysctl.conf. Vous devrez configurer quelques éléments dans le fichier.

Tout d’abord, le transfert de paquets IPv4 doit être activé afin que le trafic puisse circuler entre les interfaces VPN et les interfaces réseau publiques sur le serveur. Ensuite, vous désactiverez la découverte du MTU du chemin pour éviter les problèmes de fragmentation de paquets. Enfin, nous ne accepterons pas les redirections ICMP ni n’enverrons de redirections ICMP pour prévenir les attaques de l’homme du milieu.

Ouvrez le fichier de configuration des paramètres du noyau UFW en utilisant nano ou votre éditeur de texte préféré:

  1. sudo nano /etc/ufw/sysctl.conf

Ajoutez maintenant le paramètre suivant net/ipv4/ip_forward=1 à la fin du fichier pour activer le transfert de paquets entre les interfaces:

/etc/ufw/sysctl.conf
. . .
net/ipv4/ip_forward=1

Bloquez ensuite l’envoi et la réception de paquets de redirection ICMP en ajoutant les lignes suivantes à la fin du fichier:

/etc/ufw/sysctl.conf
. . .
net/ipv4/conf/all/accept_redirects=0
net/ipv4/conf/all/send_redirects=0

Enfin, désactivez la découverte du MTU du chemin en ajoutant cette ligne à la fin du fichier:

/etc/ufw/sysctl.conf
. . .
net/ipv4/ip_no_pmtu_disc=1

Enregistrez le fichier lorsque vous avez terminé. Maintenant, vous pouvez activer toutes vos modifications en désactivant et en réactivant le pare-feu, car UFW applique ces paramètres chaque fois qu’il redémarre:

  1. sudo ufw disable
  2. sudo ufw enable

Vous serez invité à confirmer le processus. Tapez Y pour réactiver UFW avec les nouveaux paramètres.

Étape 7 — Tester la connexion VPN sur Windows, macOS, Ubuntu, iOS et Android

Maintenant que tout est configuré, il est temps de l’essayer. Tout d’abord, vous devrez copier le certificat CA que vous avez créé et l’installer sur votre/vos appareil(s) client(s) qui se connecteront au VPN. La manière la plus simple de le faire est de vous connecter à votre serveur et de générer le contenu du fichier de certificat :

  1. cat /etc/ipsec.d/cacerts/ca-cert.pem

Vous verrez une sortie similaire à ceci :

Output
-----BEGIN CERTIFICATE----- MIIFNDCCAxygAwIBAgIIHCsidG5mXzgwDQYJKoZIhvcNAQEMBQAwODELMAkGA1UE . . . H2YUdz8XNHrJHvMQKWFpi0rlEcMs+MSXPFWE3Q7UbaZJ/h8wpSldSUbQRUlphExJ dJ4PX+MUJO/vjG1/ie6Kh25xbBAc3qNq8siiJZDwrg6vjEK7eiZ1rA== -----FIN DU CERTIFICAT-----

Copiez cette sortie sur votre ordinateur, y compris les lignes -----BEGIN CERTIFICATE----- et -----END CERTIFICATE-----, et enregistrez-la dans un fichier avec un nom reconnaissable, tel que ca-cert.pem. Assurez-vous que le fichier que vous créez a l’extension .pem.

Alternativement, utilisez SFTP pour transférer le fichier vers votre ordinateur.

Une fois que vous avez téléchargé le fichier ca-cert.pem sur votre ordinateur, vous pouvez configurer la connexion au VPN.

Connexion depuis Windows

Il existe plusieurs façons d’importer le certificat racine et de configurer Windows pour se connecter à un VPN. La première méthode utilise des outils graphiques pour chaque étape. La deuxième méthode utilise des commandes PowerShell, qui peuvent être scriptées et modifiées pour correspondre à votre configuration VPN.

Remarque : Ces instructions ont été testées sur des installations de Windows 10 exécutant les versions 1903 et 1909.

Configuration de Windows avec des outils graphiques

Tout d’abord, importez le certificat racine en suivant ces étapes :

  1. Appuyez sur WINDOWS+R pour ouvrir la boîte de dialogue Exécuter, puis saisissez mmc.exe pour lancer la Console de gestion Windows.

  2. Dans le menu Fichier, accédez à Ajouter ou supprimer un composant logiciel enfichable, sélectionnez Certificats dans la liste des composants logiciels enfichables disponibles, puis cliquez sur Ajouter.

  3. Nous voulons que le VPN fonctionne avec n’importe quel utilisateur, donc sélectionnez Compte de l’ordinateur et cliquez sur Suivant.

  4. Nous configurons les choses sur l’ordinateur local, donc sélectionnez Ordinateur local, puis cliquez sur Terminer.

  5. Sous le nœud Racine de la console, développez l’entrée Certificats (Ordinateur local), développez Autorités de certification racine de confiance, puis sélectionnez l’entrée Certificats:

  6. Dans le menu Action, sélectionnez Toutes les tâches et cliquez sur Importer pour afficher l’Assistant Importation de certificat. Cliquez sur Suivant pour passer l’introduction.

  7. Sur l’écran Fichier à importer, appuyez sur le bouton Parcourir, assurez-vous de changer le type de fichier de « Certificat X.509 (.cer;.crt) » à « Tous les fichiers (.) », et sélectionnez le fichier ca-cert.pem que vous avez enregistré. Ensuite, cliquez sur Suivant.

  8. Assurez-vous que le Magasin de certificats est défini sur Autorités de certification racine de confiance, et cliquez sur Suivant.

  9. Cliquez sur Terminer pour importer le certificat.

Ensuite, configurez le VPN avec ces étapes :

  1. Ouvrez Panneau de configuration, puis accédez au Centre Réseau et partage.
  2. Cliquez sur Configurer une nouvelle connexion ou un nouveau réseau, puis sélectionnez Se connecter à un lieu de travail.
  3. Sélectionnez Utiliser ma connexion Internet (VPN).
  4. Entrez les détails du serveur VPN. Entrez le nom de domaine ou l’adresse IP du serveur dans le champ Adresse Internet, puis remplissez Nom de destination avec quelque chose qui décrit votre connexion VPN. Ensuite, cliquez sur Terminé.

Configuration de Windows à l’aide de PowerShell

Pour importer le certificat CA racine en utilisant PowerShell, ouvrez d’abord une invite de commandes PowerShell avec des privilèges d’administrateur. Pour ce faire, faites un clic droit sur l’icône du menu Démarrer et sélectionnez Windows PowerShell (Admin). Vous pouvez également ouvrir une invite de commandes en tant qu’administrateur et taper powershell.

Ensuite, nous importerons le certificat en utilisant la commande Import-Certificate de PowerShell. Dans la commande suivante, le premier argument -CertStoreLocation garantira que le certificat est importé dans le magasin Autorités de certification racines de confiance de l’ordinateur afin que tous les programmes et utilisateurs puissent vérifier le certificat du serveur VPN. L’argument -FilePath devrait pointer vers l’emplacement où vous avez copié le certificat. Dans l’exemple suivant, le chemin est C:\Users\sammy\Documents\ca-cert.pem. Assurez-vous de modifier la commande pour correspondre à l’emplacement que vous avez utilisé.

  1. Import-Certificate `
  2. -CertStoreLocation cert:\LocalMachine\Root\ `
  3. -FilePath C:\users\sammy\Documents\ca-cert.pem

La commande produira quelque chose comme ce qui suit:

Output
PSParentPath: Microsoft.PowerShell.Security\Certificate::LocalMachine\Root Thumbprint Subject ---------- ------- DB00813B4087E9367861E8463A60CEA0ADC5F002 CN=VPN root CA

Maintenant, pour configurer le VPN en utilisant PowerShell, exécutez la commande suivante. Remplacez le nom DNS ou l’adresse IP de votre serveur sur la ligne -ServerAddress. Les différents indicateurs garantiront que Windows est correctement configuré avec les paramètres de sécurité appropriés qui correspondent aux options que vous avez définies dans /etc/ipsec.conf.

  1. Add-VpnConnection -Name "VPN Connection" `
  2. -ServerAddress "server_domain_or_IP" `
  3. -TunnelType "IKEv2" `
  4. -AuthenticationMethod "EAP" `
  5. -EncryptionLevel "Maximum" `
  6. -RememberCredential `

Si la commande réussit, il n’y aura aucune sortie. Pour confirmer que le VPN est correctement configuré, utilisez la cmdlet Get-VPNConnection:

  1. Get-VpnConnection -Name "VPN Connection"

Vous recevrez une sortie comme celle-ci:

Output
Name : VPN Connection ServerAddress : your_server_ip AllUserConnection : False Guid : {B055A1AB-175C-4028-B4A8-D34309A2B20E} TunnelType : Ikev2 AuthenticationMethod : {Eap} EncryptionLevel : Maximum L2tpIPsecAuth : UseWinlogonCredential : False EapConfigXmlStream : #document ConnectionStatus : Disconnected RememberCredential : True SplitTunneling : False DnsSuffix : IdleDisconnectSeconds : 0

Par défaut, Windows choisit des algorithmes plus anciens et plus lents. Exécutez la cmdlet Set-VpnConnectionIPsecConfiguration pour mettre à niveau les paramètres de chiffrement que Windows utilisera pour l’échange de clés IKEv2, et pour chiffrer les paquets :

  1. Set-VpnConnectionIPsecConfiguration -Name "VPN Connection" `
  2. -AuthenticationTransformConstants GCMAES256 `
  3. -CipherTransformConstants GCMAES256 `
  4. -DHGroup ECP384 `
  5. -IntegrityCheckMethod SHA384 `
  6. -PfsGroup ECP384 `
  7. -EncryptionMethod GCMAES256

Remarque : Si vous souhaitez supprimer la connexion VPN et la reconfigurer avec différentes options, vous pouvez exécuter la cmdlet Remove-VpnConnection.

  1. Remove-VpnConnection -Name "VPN Connection" -Force

Le drapeau -Force ignorera la demande de confirmation de suppression. Vous devez être déconnecté du VPN si vous tentez de le supprimer en utilisant cette commande.

Connexion au VPN

Une fois que vous avez importé le certificat et configuré le VPN en utilisant l’une ou l’autre méthode, votre nouvelle connexion VPN sera visible dans la liste des réseaux. Sélectionnez le VPN et cliquez sur Connecter. Vous serez invité à saisir votre nom d’utilisateur et votre mot de passe. Saisissez-les, cliquez sur OK, et vous serez connecté.

Connexion depuis macOS

Suivez ces étapes pour importer le certificat :

  1. Double-cliquez sur le fichier de certificat. Accès aux trousseaux s’ouvrira avec une boîte de dialogue indiquant : « Accès aux trousseaux essaie de modifier le trousseau système. Entrez votre mot de passe pour autoriser cela. »
  2. Entrez votre mot de passe, puis cliquez sur Modifier le trousseau.
  3. Double-cliquez sur le certificat VPN nouvellement importé. Cela ouvre une petite fenêtre de propriétés où vous pouvez spécifier les niveaux de confiance. Définissez la sécurité IP (IPSec) sur Toujours faire confiance et vous serez invité à saisir à nouveau votre mot de passe. Ce paramètre est enregistré automatiquement après avoir saisi le mot de passe.

Maintenant que le certificat est importé et approuvé, configurez la connexion VPN avec ces étapes :

  1. Allez dans Préférences Système et choisissez Réseau.
  2. Cliquez sur le petit bouton « + » en bas à gauche de la liste des réseaux.
  3. Dans la fenêtre contextuelle qui apparaît, définissez Interface sur VPN, définissez le Type de VPN sur IKEv2, et donnez un nom à la connexion.
  4. Dans les champs Serveur et ID distant, entrez le nom de domaine ou l’adresse IP du serveur. Laissez le champ ID local vide.
  5. Cliquez sur Paramètres d’authentification, sélectionnez Nom d’utilisateur, et saisissez votre nom d’utilisateur et votre mot de passe configurés pour votre utilisateur VPN. Ensuite, cliquez sur OK.

Enfin, cliquez sur Connecter pour vous connecter au VPN. Vous devriez maintenant être connecté au VPN.

Connexion depuis Ubuntu

Pour vous connecter depuis une machine Ubuntu, vous pouvez configurer et gérer StrongSwan en tant que service ou utiliser une commande ponctuelle à chaque fois que vous souhaitez vous connecter. Des instructions sont fournies pour les deux.

Gestion de StrongSwan en tant que service

Pour gérer StrongSwan en tant que service, vous devrez effectuer les étapes de configuration suivantes.

Tout d’abord, mettez à jour le cache de vos paquets locaux en utilisant apt

  1. sudo apt update

Ensuite, installez StrongSwan et les plugins requis pour l’authentification:

  1. sudo apt install strongswan libcharon-extra-plugins

Maintenant, vous aurez besoin d’une copie du certificat CA dans le répertoire /etc/ipsec.d/cacerts afin que votre client puisse vérifier l’identité du serveur. Exécutez la commande suivante pour copier le fichier ca-cert.pem à sa place:

  1. sudo cp /tmp/ca-cert.pem /etc/ipsec.d/cacerts

Pour vous assurer que le VPN ne s’exécute que sur demande, utilisez systemctl pour désactiver StrongSwan de l’exécution automatique:

  1. sudo systemctl disable --now strongswan-starter

Ensuite, configurez le nom d’utilisateur et le mot de passe que vous utiliserez pour vous authentifier auprès du serveur VPN. Modifiez /etc/ipsec.secrets en utilisant nano ou votre éditeur préféré:

  1. sudo nano /etc/ipsec.secrets

Ajoutez la ligne suivante, en modifiant les valeurs de nom d’utilisateur et de mot de passe surlignées pour correspondre à celles que vous avez configurées sur le serveur:

/etc/ipsec.secrets
your_username : EAP "your_password"

Enfin, modifiez le fichier /etc/ipsec.conf pour configurer votre client afin qu’il corresponde à la configuration du serveur:

/etc/ipsec.conf
config setup

conn ikev2-rw
    right=server_domain_or_IP
    # Cela doit correspondre à la valeur `leftid` de la configuration de votre serveur
    rightid=server_domain_or_IP
    rightsubnet=0.0.0.0/0
    rightauth=pubkey
    leftsourceip=%config
    leftid=username
    leftauth=eap-mschapv2
    eap_identity=%identity
    auto=start

Pour vous connecter au VPN, tapez:

  1. sudo systemctl start strongswan-starter

Pour vous déconnecter, tapez à nouveau:

  1. sudo systemctl stop strongswan-starter

Utilisation du client charon-cmd pour des connexions ponctuelles

Pour gérer StrongSwan en tant que service, vous devrez effectuer les étapes de configuration suivantes.

Tout d’abord, mettez à jour votre cache de paquets local en utilisant apt.

  1. sudo apt update

Ensuite, installez StrongSwan et les plugins requis pour l’authentification :

  1. sudo apt install strongswan libcharon-extra-plugins

Maintenant, vous aurez besoin d’une copie du certificat CA dans le répertoire /etc/ipsec.d/cacerts afin que votre client puisse vérifier l’identité du serveur. Exécutez la commande suivante pour copier le fichier ca-cert.pem à sa place :

  1. sudo cp /tmp/ca-cert.pem /etc/ipsec.d/cacerts

À ce stade, vous pouvez vous connecter au serveur VPN avec charon-cmd en utilisant le certificat CA du serveur, l’adresse IP du serveur VPN et le nom d’utilisateur que vous avez configuré.

Exécutez la commande suivante chaque fois que vous souhaitez vous connecter au VPN :

  1. sudo charon-cmd --cert ca-cert.pem --host vpn_domain_or_IP --identity your_username

Lorsque vous y êtes invité, fournissez le mot de passe de l’utilisateur VPN et vous serez connecté au VPN. Pour vous déconnecter, appuyez sur CTRL+C dans le terminal et attendez que la connexion se ferme.

Connexion depuis iOS

Pour configurer la connexion VPN sur un appareil iOS, suivez ces étapes :

  1. Envoyez-vous un e-mail avec le certificat racine en pièce jointe.
  2. Ouvrez l’e-mail sur votre appareil iOS et appuyez sur le fichier de certificat joint, puis appuyez sur Installer et entrez votre code secret. Une fois qu’il est installé, appuyez sur Terminé.
  3. Allez dans Paramètres, Général, VPN et appuyez sur Ajouter une configuration VPN. Cela affichera l’écran de configuration de la connexion VPN.
  4. Appuyez sur Type et sélectionnez IKEv2.
  5. Dans le champ Description, saisissez un nom court pour la connexion VPN. Cela pourrait être n’importe quoi que vous aimez.
  6. Dans les champs Serveur et ID distant, saisissez le nom de domaine ou l’adresse IP du serveur. Le champ ID local peut être laissé vide.
  7. Saisissez votre nom d’utilisateur et votre mot de passe dans la section Authentification, puis appuyez sur Terminé.
  8. Sélectionnez la connexion VPN que vous venez de créer, appuyez sur l’interrupteur en haut de la page et vous serez connecté.

Connexion depuis Android

Suivez ces étapes pour importer le certificat :

  1. Envoyez-vous un e-mail avec le certificat CA en pièce jointe. Enregistrez le certificat CA dans votre dossier de téléchargement.
  2. Téléchargez le client VPN StrongSwan depuis le Play Store.
  3. Ouvrez l’application. Appuyez sur l’icône « plus » (. . .) dans le coin supérieur droit et sélectionnez Certificats CA.
  4. Appuyez à nouveau sur l’icône « plus » (. . .) dans le coin supérieur droit. Sélectionnez Importer un certificat.
  5. Parcourez le fichier de certificat CA dans votre dossier de téléchargement et sélectionnez-le pour l’importer dans l’application.

Maintenant que le certificat est importé dans l’application StrongSwan, vous pouvez configurer la connexion VPN avec ces étapes :

  1. Dans l’application, appuyez sur AJOUTER UN PROFIL VPN en haut.
  2. Remplissez le champ Serveur avec le nom de domaine de votre serveur VPN ou son adresse IP publique.
  3. Assurez-vous que IKEv2 EAP (Nom d’utilisateur/Mot de passe) est sélectionné comme type de VPN.
  4. Remplissez les champs Nom d’utilisateur et Mot de passe avec les informations d’identification que vous avez définies sur le serveur.
  5. Désélectionnez Sélectionner automatiquement dans la section Certificat CA et cliquez sur Sélectionner le certificat CA.
  6. Appuyez sur l’onglet IMPORTÉ en haut de l’écran et choisissez le certificat CA que vous avez importé (il sera nommé « VPN root CA » si vous n’avez pas modifié le « DN » plus tôt).
  7. Si vous le souhaitez, remplissez le champ Nom du profil (optionnel) avec un nom plus descriptif.

Quand vous souhaitez vous connecter au VPN, cliquez sur le profil que vous venez de créer dans l’application StrongSwan.

Résolution des problèmes de connexion

Si vous ne parvenez pas à importer le certificat, assurez-vous que le fichier a l’extension .pem et non .pem.txt.

Si vous ne parvenez pas à vous connecter au VPN, vérifiez le nom du serveur ou l’adresse IP que vous avez utilisé. Le nom de domaine ou l’adresse IP du serveur doit correspondre à ce que vous avez configuré comme nom commun (CN) lors de la création du certificat. S’ils ne correspondent pas, la connexion VPN ne fonctionnera pas. Par exemple, si vous avez configuré un certificat avec le CN vpn.example.com, vous devez utiliser vpn.example.com lorsque vous saisissez les détails du serveur VPN. Vérifiez également la commande que vous avez utilisée pour générer le certificat et les valeurs que vous avez utilisées lors de la création de votre connexion VPN.

Enfin, vérifiez la configuration VPN pour vous assurer que la valeur leftid est configurée avec le symbole @ si vous utilisez un nom de domaine :

/etc/ipsec.conf
    leftid=@vpn.example.com

Si vous utilisez une adresse IP, assurez-vous que le symbole @ est omis. Assurez-vous également que lorsque vous avez généré le fichier server-cert.pem, vous avez inclus à la fois les indicateurs --san @adresse_IP et --san adresse_IP.

Conclusion

Dans ce tutoriel, vous avez configuré un serveur VPN qui utilise le protocole IKEv2. Vous avez appris les directives qui contrôlent les côtés left et right d’une connexion à la fois sur le serveur et les clients. Vous avez également configuré un client Windows, macOS, iOS, Android ou Linux pour se connecter au VPN.

Pour ajouter ou supprimer des utilisateurs, passez à nouveau à l’étape 5. Chaque ligne dans /etc/ipsec.secrets est destinée à un utilisateur, donc ajouter ou supprimer des utilisateurs, ou changer les mots de passe nécessite simplement de modifier le fichier.

Maintenant, vous pouvez être assuré que vos activités en ligne resteront sécurisées où que vous alliez et avec n’importe quel appareil que vous utilisez pour accéder à Internet.

Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-an-ikev2-vpn-server-with-strongswan-on-ubuntu-22-04