Introduction
Un réseau privé virtuel, ou VPN, vous permet de crypter en toute sécurité le trafic lorsqu'il transite par des réseaux non fiables, tels que ceux d'un café, d'une conférence ou d'un aéroport.
Internet Key Exchange v2, ou IKEv2, est un protocole qui permet un tunnel IPSec direct entre le serveur et le client. Dans les implémentations VPN IKEv2, IPSec assure le chiffrement du trafic réseau. IKEv2 est pris en charge de manière native sur certaines plates-formes (OS X 10.11+, iOS 9.1+ et Windows 10) sans aucune application supplémentaire nécessaire, et il gère les problèmes du client assez facilement.
Dans ce didacticiel, vous allez configurer un serveur VPN IKEv2 à l'aide de StrongSwan sur un serveur Ubuntu 22.04. Vous apprendrez ensuite à vous y connecter avec les clients Windows, macOS, Ubuntu, iOS et Android.
Prérequis
Pour terminer ce tutoriel, vous aurez besoin de :
- Un serveur Ubuntu 22.04 configuré en suivant le guide de configuration initiale du serveur Ubuntu 22.04, y compris un
sudo
utilisateur non root et un pare-feu.
Étape 1 - Installation de StrongSwan
Tout d'abord, vous installerez StrongSwan, un démon IPSec open-source que vous configurerez comme votre 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 pour votre infrastructure.
Commencez par mettre à jour le cache de packages local :
- sudo apt update
Installez ensuite le logiciel en tapant :
- sudo apt install strongswan strongswan-pki libcharon-extra-plugins libcharon-extauth-plugins libstrongswan-extra-plugins
Les libcharon-extauth-plugins
supplémentaires package est utilisé pour s'assurer que divers clients peuvent s'authentifier auprès de votre serveur à l'aide d'un nom d'utilisateur et d'une phrase de passe partagés. Les libstrongswan-extra-plugins
Le package est inclus afin que Strongswan prenne en charge les suites de chiffrement à courbe elliptique qui utilisent le Curve25519
suite de cryptographie.
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 strongswan-pki
le paquet 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 allez travailler. 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 :
- mkdir -p ~/pki/{cacerts,certs,private}
Ensuite, verrouillez les autorisations afin que nos fichiers privés ne puissent pas être vus par d'autres utilisateurs :
- chmod 700 ~/pki
Maintenant que vous avez une structure de répertoires pour tout stocker, vous pouvez générer une clé racine. Il s'agira d'une clé RSA de 4 096 bits qui sera utilisée pour signer votre certificat d'autorité de certification racine.
Exécutez ces commandes pour générer la clé :
- 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 :
- pki --self --ca --lifetime 3650 --in ~/pki/private/ca-key.pem \
- --type rsa --dn "CN=VPN root CA" --outform pem > ~/pki/cacerts/ca-cert.pem
Le --lifetime 3650
flag est utilisé pour s'assurer 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épend, donc 10 ans est une valeur d'expiration par défaut sûre.
Vous pouvez modifier le nom distinctif (DN) à autre chose si vous le souhaitez. Le nom commun (champ CN) n'est ici qu'un indicateur, il n'a donc pas à 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.
Commencez par créer une clé privée pour le serveur VPN avec la commande suivante :
- pki --gen --type rsa --size 4096 --outform pem > ~/pki/private/server-key.pem
Maintenant, 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 remplacez les champs Common Name (CN) et Subject Alternate Name (SAN) par le nom DNS ou l'adresse IP de votre serveur VPN :
- pki --pub --in ~/pki/private/server-key.pem --type rsa \
- | pki --issue --lifetime 1825 \
- --cacert ~/pki/cacerts/ca-cert.pem \
- --cakey ~/pki/private/ca-key.pem \
- --dn "CN=server_domain_or_IP" --san server_domain_or_IP \
- --flag serverAuth --flag ikeIntermediate --outform pem \
- > ~/pki/certs/server-cert.pem
Remarque :Si vous utilisez une adresse IP au lieu d'un nom DNS, vous devrez spécifier plusieurs --san
entrées. La ligne dans le bloc de commande précédent où vous spécifiez le nom distinctif (--dn ...
) devra être modifié avec l'entrée supplémentaire comme la ligne extraite suivante :
--dn "CN=IP address" --san @IP_address --san IP_address \
La raison de ce --san @IP_address
est que certains clients vérifieront si le certificat TLS a à la fois une entrée DNS et une entrée d'adresse IP pour un serveur lorsqu'ils vérifieront son identité.
Le --flag serverAuth
L'option est utilisée pour indiquer que le certificat sera utilisé explicitement pour l'authentification du serveur, avant que le tunnel chiffré ne soit établi. Le --flag ikeIntermediate
L'option 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 en place dans /etc/ipsec.d
répertoire en tapant :
- sudo cp -r ~/pki/* /etc/ipsec.d/
Dans cette étape, vous avez créé une paire de certificats qui sera utilisée pour sécuriser les communications entre le client et le serveur. Vous avez également signé les certificats avec la clé CA, afin que le client puisse 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 SrongSwan.
Étape 4 - Configuration de StrongSwan
StrongSwan a un fichier de configuration par défaut avec quelques exemples, mais nous devrons faire la plupart de la configuration nous-mêmes. Sauvegardez le fichier pour référence avant de repartir de zéro :
- 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
:
- sudo nano /etc/ipsec.conf
Remarque :Au fur et à mesure que vous parcourez cette section pour configurer la partie serveur de votre VPN, vous rencontrerez des paramètres faisant référence à gauche et juste côtés d'une connexion. Lorsque vous travaillez avec des VPN IPSec, le gauche side par convention fait référence au système local que vous configurez, dans ce cas le serveur. Les directives de droite 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 didacticiel, les fichiers de configuration du client se référeront à eux-mêmes en utilisant divers gauche directives, et le serveur sera référencé en utilisant right terminologie annexe.
Tout d'abord, nous dirons à StrongSwan de consigner les statuts des démons pour le débogage et d'autoriser les connexions en double. Ajoutez ces lignes au fichier :
/etc/ipsec.confconfig 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 au démarrage. 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 des pairs morts pour effacer toutes les connexions « pendantes » au cas où le client se déconnecterait de manière inattendue. Ajoutez ces lignes :
/etc/ipsec.conf. . .
conn ikev2-vpn
. . .
dpdaction=clear
dpddelay=300s
rekey=no
Ensuite, nous allons configurer 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 pour s'identifier correctement. Vous ajouterez chacun de ces paramètres au /etc/ipsec.conf
fichier une fois que vous savez ce qu'ils sont et pourquoi ils sont utilisés :
left=%any
Le%any
garantit que le serveur utilisera l'interface réseau où il reçoit les connexions entrantes pour une communication ultérieure avec les clients. Par exemple, si vous connectez un client sur 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'il est combiné avec l'option suivanteleftcert
, leleftid
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 d'accès au certificat public pour le serveur que vous avez configuré à l'étape 3. Sans elle, le serveur ne pourra pas s'authentifier auprès des clients ni terminer la négociation de la configuration IKEv2.leftsendcert=always
Lealways
garantit que tout client qui se connecte au serveur recevra toujours une copie du certificat public du serveur dans le cadre de la configuration initiale de la connexion.leftsubnet=0.0.0.0/0
La dernière option du côté "gauche" 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 complet des adresses IPv4, ce qui signifie que le serveur demandera 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é "gauche", ajoutez-les toutes au fichier comme ceci :
/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
), n'incluez que le @
caractère si votre serveur VPN sera identifié par un nom de domaine :
. . . leftid=@vpn.example.com
. . .
Si le serveur sera identifié par son adresse IP, mettez simplement l'adresse IP dans :
/etc/ipsec.conf . . .
leftid=your_server_ip
. . .
Ensuite, nous pouvons configurer les paramètres IPSec du côté "droit" 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, ainsi que les plages d'adresses IP privées et les serveurs DNS que les clients utiliseront. Ajoutez chacun de ces paramètres au /etc/ipsec.conf
fichier une fois que vous savez ce qu'ils sont et pourquoi ils sont utilisés :
right=%any
Le%any
option pour leright
côté 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 chiffré.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 les appareils Windows, macOS et Android.rightsourceip=10.10.10.0/24
Cette option demande au serveur d'attribuer des adresses IP privées aux clients à partir du10.10.10.0/24
spécifié pool d'adresses IP.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 que les clients peuvent atteindre.rightsendcert=never
Cette option indique au serveur que les clients n'ont pas besoin d'envoyer un certificat pour s'authentifier.
Maintenant que vous êtes familiarisé avec les options du côté "droit" requises pour le VPN, ajoutez les lignes suivantes à /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
Nous allons maintenant dire à StrongSwan de demander au client les informations d'identification de l'utilisateur lorsqu'il 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 gamme de compatibilité entre les clients Windows, macOS, iOS, Android et Linux.
Le fichier de configuration complet devrait ressembler à ceci :
/etc/ipsec.confconfig 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 correctement ajouté chaque ligne. Si vous avez utilisé nano
, faites-le en appuyant sur CTRL + X
, Y
, puis ENTER
.
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 client, mais il n'y a pas encore d'informations d'identification configurées. Vous devrez configurer quelques éléments 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 qui seront autorisés à se connecter au VPN.
Ouvrons le fichier des secrets pour le modifier :
- sudo nano /etc/ipsec.secrets
Tout d'abord, indiquez à StrongSwan où trouver la clé privée et comment l'analyser.
/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 celui-ci pour que la ligne entière lise : RSA "server-key.pem"
.
Ensuite, vous définirez les informations d'identification de l'utilisateur. Vous pouvez créer n'importe quelle combinaison de nom d'utilisateur ou de mot de passe que vous aimez :
/etc/ipsec.secretsyour_username : EAP "your_password"
Enregistrez et fermez le fichier. Maintenant que vous avez fini de travailler avec les paramètres VPN, redémarrez le service VPN pour que notre configuration soit appliquée :
- sudo systemctl restart strongswan-starter
Maintenant que le serveur VPN a été entièrement configuré avec les options de serveur et les informations d'identification de l'utilisateur, il est temps de passer à la configuration de la partie la plus importante :le pare-feu.
Étape 6 - Configuration du pare-feu et du transfert IP du noyau
Une fois 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éalable, vous devez avoir activé un pare-feu UFW. Si vous n'avez pas encore configuré UFW, vous devez commencer par ajouter une règle pour autoriser les connexions SSH via le pare-feu afin que votre session actuelle ne se ferme pas lorsque vous activez UFW :
- sudo ufw allow OpenSSH
Activez ensuite le pare-feu en tapant :
- sudo ufw enable
Ensuite, ajoutez une règle pour autoriser le trafic UDP vers les ports IPSec standard, 500
et 4500
:
- 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 de 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. Retrouvez cette interface en recherchant l'appareil associé à la route par défaut :
- ip route show default
Votre interface publique doit suivre le mot "dev". Par exemple, ce résultat montre l'interface nommée eth0
, qui est mis en évidence dans l'exemple suivant :
Outputdefault via your_server_ip dev eth0 proto static
Lorsque vous avez votre interface réseau publique, ouvrez le /etc/ufw/before.rules
fichier dans votre éditeur de texte. Les règles de ce fichier sont ajoutées au pare-feu avant le reste des règles d'entrée et de sortie habituelles. Ils sont utilisés pour configurer la traduction d'adresses réseau (NAT) afin que le serveur puisse acheminer correctement les connexions vers et depuis les clients et Internet.
- sudo nano /etc/ufw/before.rules
Près du haut du fichier (avant le *filter
line), ajoutez le bloc de configuration suivant. Modifiez chaque instance de eth0
dans la configuration ci-dessus pour correspondre au nom de l'interface que vous avez trouvé avec ip route
. Le *nat
créent des règles permettant au pare-feu d'acheminer et de manipuler correctement le trafic entre les clients VPN et Internet. Le *mangle
ajuste la taille maximale du segment de paquet pour éviter les problèmes potentiels avec certains clients VPN :
*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 le *filter
et les lignes de définition de la chaîne, ajoutez un bloc de configuration supplémentaire :
. . .
*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 fournit 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 correctement ajouté chaque ligne. Si vous avez utilisé nano
, faites-le en appuyant sur CTRL + X
, Y
, puis 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.
Le premier transfert de paquets IPv4 doit être activé afin que le trafic puisse se déplacer entre le VPN et les interfaces réseau publiques sur le serveur. Ensuite, vous désactiverez la découverte Path MTU pour éviter les problèmes de fragmentation des paquets. Enfin, nous n'accepterons pas les redirections ICMP ni n'enverrons de redirections ICMP pour empêcher les attaques de type "man-in-the-middle".
Ouvrez le fichier de configuration des paramètres du noyau d'UFW à l'aide de nano
ou votre éditeur de texte préféré :
- sudo nano /etc/ufw/sysctl.conf
Ajoutez maintenant le net/ipv4/ip_forward=1
suivant paramètre à la fin du fichier pour activer le transfert de paquets entre les interfaces :
. . .
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 Path MTU 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é. Vous pouvez désormais activer toutes vos modifications en désactivant et en réactivant le pare-feu, car UFW applique ces paramètres à chaque redémarrage :
- sudo ufw disable
- sudo ufw enable
Vous serez invité à confirmer le processus. Tapez Y
pour réactiver UFW avec les nouveaux paramètres.
Étape 7 — Test de la connexion VPN sous Windows, macOS, Ubuntu, iOS et Android
Maintenant que vous avez tout 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 ou vos appareils clients qui se connecteront au VPN. Pour ce faire, le moyen le plus simple consiste à vous connecter à votre serveur et à afficher le contenu du fichier de certificat :
- cat /etc/ipsec.d/cacerts/ca-cert.pem
Vous verrez une sortie semblable à celle-ci :
Output-----BEGIN CERTIFICATE-----
MIIFNDCCAxygAwIBAgIIHCsidG5mXzgwDQYJKoZIhvcNAQEMBQAwODELMAkGA1UE
. . .
H2YUdz8XNHrJHvMQKWFpi0rlEcMs+MSXPFWE3Q7UbaZJ/h8wpSldSUbQRUlphExJ
dJ4PX+MUJO/vjG1/ie6Kh25xbBAc3qNq8siiJZDwrg6vjEK7eiZ1rA==
-----END CERTIFICATE-----
Copiez cette sortie sur votre ordinateur, y compris le -----BEGIN CERTIFICATE-----
et -----END CERTIFICATE-----
lignes et enregistrez-le dans un fichier avec un nom reconnaissable, tel que ca-cert.pem
. Assurez-vous que le fichier que vous créez a le .pem
extension.
Vous pouvez également utiliser SFTP pour transférer le fichier sur votre ordinateur.
Une fois que vous avez le ca-cert.pem
fichier téléchargé 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 s'adapter à votre configuration VPN.
Remarque : Ces instructions ont été testées sur des installations 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 :
-
Appuyez sur
WINDOWS+R
pour afficher le Exécuter boîte de dialogue et entrezmmc.exe
pour lancer la console de gestion Windows. -
À partir du fichier menu, accédez à Ajouter ou supprimer un composant logiciel enfichable , sélectionnez Certificats dans la liste des composants logiciels enfichables disponibles, puis cliquez sur Ajouter .
-
Nous voulons que le VPN fonctionne avec n'importe quel utilisateur, alors sélectionnez Compte d'ordinateur et cliquez sur Suivant .
-
Nous configurons les choses sur l'ordinateur local, alors sélectionnez Ordinateur local , puis cliquez sur Terminer .
-
Sous la racine de la console nœud, développez le Certificats (Ordinateur local) entrée, développez Autorités de certification racines de confiance , puis sélectionnez les Certificats entrée:
-
De l'Action menu, sélectionnez Toutes les tâches et cliquez sur Importer pour afficher l'assistant d'importation de certificat. Cliquez sur Suivant pour aller au-delà de l'introduction.
-
Sur le Fichier à importer l'écran, appuyez sur Parcourir , assurez-vous de changer le type de fichier de "Certificat X.509 (.cer; .crt) » à « Tous les fichiers (. ) », et sélectionnez le
ca-cert.pem
fichier que vous avez enregistré. Cliquez ensuite sur Suivant . -
Assurez-vous que le magasin de certificats est défini sur Autorités de certification racines de confiance , puis cliquez sur Suivant .
-
Cliquez sur Terminer pour importer le certificat.
Configurez ensuite le VPN en suivant ces étapes :
- Lancez le Panneau de configuration , puis accédez au Centre Réseau et partage .
- Cliquez sur Configurer une nouvelle connexion ou un nouveau réseau , puis sélectionnez Se connecter à un espace de travail .
- Sélectionnez Utiliser ma connexion Internet (VPN) .
- Entrez les détails du serveur VPN. Entrez le nom de domaine ou l'adresse IP du serveur dans l'adresse Internet champ, puis remplissez Nom de la destination avec quelque chose qui décrit votre connexion VPN. Cliquez ensuite sur Terminé .
Configuration de Windows à l'aide de PowerShell
Pour importer le certificat de l'autorité de certification racine à l'aide de PowerShell, ouvrez d'abord une invite PowerShell avec des privilèges d'administrateur. Pour ce faire, cliquez avec le bouton droit sur l'icône du menu Démarrer et sélectionnez Windows PowerShell (Admin)
. Vous pouvez également ouvrir une invite de commande en tant qu'administrateur et taper powershell
.
Ensuite, nous allons importer le certificat en utilisant le Import-Certificate
Applet de commande PowerShell. Dans la commande suivante, le premier -CertStoreLocation
l'argument garantira que le certificat est importé dans les autorités de certification racines de confiance de l'ordinateur stocker afin que tous les programmes et utilisateurs puissent vérifier le certificat du serveur VPN. Le -FilePath
L'argument doit 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 qu'elle corresponde à l'emplacement que vous avez utilisé.
- Import-Certificate `
- -CertStoreLocation cert:\LocalMachine\Root\ `
- -FilePath C:\users\sammy\Documents\ca-cert.pem
La commande affichera quelque chose comme ceci :
Output PSParentPath: Microsoft.PowerShell.Security\Certificate::LocalMachine\Root
Thumbprint Subject
---------- -------
DB00813B4087E9367861E8463A60CEA0ADC5F002 CN=VPN root CA
Maintenant, pour configurer le VPN à l'aide de PowerShell, exécutez la commande suivante. Remplacez le nom DNS ou l'adresse IP de votre serveur sur -ServerAddress
doubler. Les différents drapeaux 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
.
- Add-VpnConnection -Name "VPN Connection" `
- -ServerAddress "server_domain_or_IP" `
- -TunnelType "IKEv2" `
- -AuthenticationMethod "EAP" `
- -EncryptionLevel "Maximum" `
- -RememberCredential `
Si la commande réussit, il n'y aura pas de sortie. Pour confirmer que le VPN est correctement configuré, utilisez le Get-VPNConnection
applet de commande :
- Get-VpnConnection -Name "VPN Connection"
Vous recevrez une sortie comme celle-ci :
OutputName : 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
By default Windows chooses older and slower algorithms. Run the Set-VpnConnectionIPsecConfiguration
cmdlet to upgrade the encryption parameters that Windows will use for the IKEv2 key exchange, and to encrypt packets:
- Set-VpnConnectionIPsecConfiguration -Name "VPN Connection" `
- -AuthenticationTransformConstants GCMAES256 `
- -CipherTransformConstants GCMAES256 `
- -DHGroup ECP384 `
- -IntegrityCheckMethod SHA384 `
- -PfsGroup ECP384 `
- -EncryptionMethod GCMAES256
Remarque :If you would like to delete the VPN connection and reconfigure it with different options, you can run the Remove-VpnConnection
cmdlet.
- Remove-VpnConnection -Name "VPN Connection" -Force
The -Force
flag will skip prompting you to confirm the removal. You must be disconnected from the VPN if you attempt to remove it using this command.
Connecting to the VPN
Once you have the certificate imported and the VPN configured using either method, your new VPN connection will be visible under the list of networks. Select the VPN and click Connect . You’ll be prompted for your username and password. Type them in, click OK , and you’ll be connected.
Connecting from macOS
Follow these steps to import the certificate:
- Double-click the certificate file. Keychain Access will pop up with a dialog that says “Keychain Access is trying to modify the system keychain. Enter your password to allow this.”
- Enter your password, then click on Modify Keychain
- Double-click the newly imported VPN certificate. This brings up a small properties window where you can specify the trust levels. Set IP Security (IPSec) to Always Trust and you’ll be prompted for your password again. This setting saves automatically after entering the password.
Now that the certificate is imported and trusted, configure the VPN connection with these steps:
- Go to System Preferences and choose Network .
- Click on the small “plus” button on the lower-left of the list of networks.
- In the popup that appears, set Interface to VPN , set the VPN Type to IKEv2 , and give the connection a name.
- In the Server and Remote ID field, enter the server’s domain name or IP address. Leave the Local ID blank.
- Click on Authentication Settings , select Username , and enter your username and password you configured for your VPN user. Cliquez ensuite sur OK .
Finally, click on Connect to connect to the VPN. You should now be connected to the VPN.
Connecting from Ubuntu
To connect from an Ubuntu machine, you can set up and manage StrongSwan as a service or use a one-off command every time you wish to connect. Instructions are provided for both.
Managing StrongSwan as a Service
To manage StrongSwan as a service, you will need to perform the following configuration steps.
First, update your local package cache using apt
- sudo apt update
Next, install StrongSwan and the required plugins for authentication:
- sudo apt install strongswan libcharon-extra-plugins
Now you’ll need a copy of the CA certificate in the /etc/ipsec.d/cacerts
directory so that your client can verify the server’s identity. Run the following command to copy the ca-cert.pem
file into place:
- sudo cp /tmp/ca-cert.pem /etc/ipsec.d/cacerts
To ensure the VPN only runs on demand, use systemctl
to disable StrongSwan from running automatically:
- sudo systemctl disable --now strongswan-starter
Next configure the username and password that you will use to authenticate to the VPN server. Edit /etc/ipsec.secrets
using nano or your preferred editor:
- sudo nano /etc/ipsec.secrets
Add the following line, editing the highlighted username and password values to match the ones that you configured on the server:
/etc/ipsec.secretsyour_username : EAP "your_password"
Finally, edit the /etc/ipsec.conf
file to configure your client to match the server’s configuration:
config setup
conn ikev2-rw
right=server_domain_or_IP
# This should match the `leftid` value on your server's configuration
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
To connect to the VPN, type:
- sudo systemctl start strongswan-starter
To disconnect again, type:
- sudo systemctl stop strongswan-starter
Using the charon-cmd
Client for One-Off Connections
To manage StrongSwan as a service, you will need to perform the following configuration steps.
First, update your local package cache using apt
- sudo apt update
Next, install StrongSwan and the required plugins for authentication:
- sudo apt install strongswan libcharon-extra-plugins
Now you’ll need a copy of the CA certificate in the /etc/ipsec.d/cacerts
directory so that your client can verify the server’s identity. Run the following command to copy the ca-cert.pem
file into place:
- sudo cp /tmp/ca-cert.pem /etc/ipsec.d/cacerts
At this point you can connect to the VPN server with charon-cmd
using the server’s CA certificate, the VPN server’s IP address, and the username you configured.
Run the following command whenever you want to connect to the VPN:
- sudo charon-cmd --cert ca-cert.pem --host vpn_domain_or_IP --identity your_username
When prompted, provide the VPN user’s password and you will be connected to the VPN. To disconnect, press CTRL+C
in the terminal and wait for the connection to close.
Connecting from iOS
To configure the VPN connection on an iOS device, follow these steps:
- Send yourself an email with the root certificate attached.
- Open the email on your iOS device and tap on the attached certificate file, then tap Install and enter your passcode. Once it installs, tap Done .
- Go to Settings , General , VPN and tap Add VPN Configuration . This will bring up the VPN connection configuration screen.
- Tap on Type and select IKEv2 .
- In the Description field, enter a short name for the VPN connection. This could be anything you like.
- In the Server and Remote ID field, enter the server’s domain name or IP address. The Local ID field can be left blank.
- Enter your username and password in the Authentication section, then tap Done .
- Select the VPN connection that you just created, tap the switch on the top of the page, and you’ll be connected.
Connecting from Android
Follow these steps to import the certificate:
- Send yourself an email with the CA certificate attached. Save the CA certificate to your downloads folder.
- Download the StrongSwan VPN client from the Play Store.
- Open the app. Tap the “more” icon (. . . ) in the upper-right corner and select CA certificates .
- Tap the “more” icon (. . . ) in the upper-right corner again. Select Import certificate .
- Browse to the CA certificate file in your downloads folder and select it to import it into the app.
Now that the certificate is imported into the StrongSwan app, you can configure the VPN connection with these steps:
- In the app, tap ADD VPN PROFILE at the top.
- Fill out the Server with your VPN server’s domain name or public IP address.
- Make sure IKEv2 EAP (Username/Password) is selected as the VPN Type.
- Fill out the Username and Password with the credentials you defined on the server.
- Deselect Select automatically in the CA certificate section and click Select CA certificate .
- Tap the IMPORTED tab at the top of the screen and choose the CA you imported (it will be named “VPN root CA” if you didn’t change the “DN” earlier).
- If you’d like, fill out Profile name (optional) with a more descriptive name.
When you wish to connect to the VPN, click on the profile you just created in the StrongSwan application.
Troubleshooting Connections
If you are unable to import the certificate, ensure the file has the .pem
extension, and not .pem.txt
.
If you’re unable to connect to the VPN, check the server name or IP address you used. The server’s domain name or IP address must match what you’ve configured as the common name (CN) while creating the certificate. If they don’t match, the VPN connection won’t work. For example, if you set up a certificate with the CN of vpn.example.com
, you must use vpn.example.com
when you enter the VPN server details. Double-check the command you used to generate the certificate, and the values you used when creating your VPN connection.
Finally, double-check the VPN configuration to ensure the leftid
value is configured with the @
symbol if you’re using a domain name:
leftid=@vpn.example.com
If you’re using an IP address, ensure that the @
symbol is omitted. Also make sure that when you generated the server-cert.pem
file that you included both --san @IP_address
and --san IP_address
flags.
Conclusion
In this tutorial, you’ve built a VPN server that uses the IKEv2 protocol. You learned about the directives that control the left
and right
sides of a connection on both server and clients. You also configured a Windows, macOS, iOS, Android, or Linux client to connect to the VPN.
To add or remove users, skip to Step 5 again. Each line in /etc/ipsec.secrets
is for one user, so adding or removing users, or changing passwords just requires editing the file.
Now you can be assured that your online activities will remain secure wherever you go and with any device that you use to access the internet.