ProHoster > Blog > administration > Configuration de l'authentification dans le réseau L2TP à l'aide de Rutoken EDS 2.0 et Rutoken PKI
Configuration de l'authentification dans le réseau L2TP à l'aide de Rutoken EDS 2.0 et Rutoken PKI
Problèmes
Tout récemment, beaucoup ne savaient pas à quoi ressemblait le travail à domicile. La pandémie a radicalement changé la situation dans le monde ; tout le monde a commencé à s’adapter aux circonstances actuelles, notamment au fait qu’il est devenu tout simplement dangereux de sortir de chez soi. Et beaucoup ont dû organiser rapidement le travail à domicile de leurs salariés.
Cependant, l'absence d'une approche compétente pour choisir des solutions pour le travail à distance peut entraîner des pertes irréversibles. Les mots de passe des utilisateurs peuvent être volés, ce qui permettra à un attaquant de se connecter de manière incontrôlable au réseau et aux ressources informatiques de l'entreprise.
C’est pourquoi le besoin de créer des réseaux VPN d’entreprise fiables s’est désormais accru. je vais te parler fiable, en sécurité и simple en utilisant un réseau VPN.
Il fonctionne selon le schéma IPsec/L2TP, qui utilise des clés et des certificats non récupérables stockés sur des jetons pour authentifier les clients, et transmet également des données sur le réseau sous forme cryptée.
Un serveur avec CentOS 7 (adresse : centos.vpn.server.ad) et un client avec Ubuntu 20.04 ainsi qu'un client avec Windows 10 ont été utilisés comme supports de démonstration pour la configuration.
Description du système
Le VPN fonctionnera selon le schéma IPSec + L2TP + PPP. Protocole Protocole point à point (PPP) fonctionne au niveau de la couche liaison de données du modèle OSI et assure l'authentification de l'utilisateur et le cryptage des données transmises. Ses données sont encapsulées dans les données du protocole L2TP, qui assure effectivement la création d'une connexion dans le réseau VPN, mais n'assure pas l'authentification et le cryptage.
Les données L2TP sont encapsulées dans IPSec, qui assure également l'authentification et le cryptage, mais contrairement à PPP, l'authentification et le cryptage se produisent au niveau de l'appareil et non au niveau de l'utilisateur.
Cette fonctionnalité vous permet d'authentifier les utilisateurs uniquement à partir de certains appareils. Nous utiliserons le protocole IPSec tel quel et autoriserons l'authentification des utilisateurs à partir de n'importe quel appareil.
L'authentification des utilisateurs à l'aide de cartes à puce sera effectuée au niveau du protocole PPP en utilisant le protocole EAP-TLS.
Des informations plus détaillées sur le fonctionnement de ce circuit peuvent être trouvées dans cet article.
Pourquoi ce système répond-il aux trois exigences d’un bon réseau VPN ?
La fiabilité de ce système a été testée par le temps. Il est utilisé pour déployer des réseaux VPN depuis 2000.
L'authentification sécurisée des utilisateurs est assurée par le protocole PPP. Implémentation standard du protocole PPP développé par Paul Mackerras n'offre pas un niveau de sécurité suffisant, car Pour l'authentification, dans le meilleur des cas, une authentification à l'aide d'un login et d'un mot de passe est utilisée. Nous savons tous qu'un mot de passe de connexion peut être espionné, deviné ou volé. Cependant, depuis longtemps, le développeur Jan Just Keijser в sa mise en œuvre Ce protocole a corrigé ce problème et ajouté la possibilité d'utiliser des protocoles basés sur un cryptage asymétrique, tels que EAP-TLS, pour l'authentification. De plus, il a ajouté la possibilité d'utiliser des cartes à puce pour l'authentification, ce qui a rendu le système plus sécurisé.
Actuellement, des négociations actives sont en cours pour fusionner ces deux projets et vous pouvez être sûr que tôt ou tard, cela se produira de toute façon. Par exemple, une version corrigée de PPP se trouve depuis longtemps dans les référentiels Fedora, utilisant des protocoles sécurisés pour l'authentification.
Jusqu'à récemment, ce réseau ne pouvait être utilisé que par les utilisateurs de Windows, mais nos collègues de l'Université d'État de Moscou Vasily Shokov et Alexander Smirnov ont découvert ancien projet client L2TP pour Linux et je l'ai modifié. Ensemble, nous avons corrigé de nombreux bugs et lacunes dans le travail du client, simplifié l'installation et la configuration du système, même lors de la construction à partir des sources. Les plus significatifs d'entre eux sont :
Correction de problèmes de compatibilité de l'ancien client avec l'interface des nouvelles versions d'openssl et qt.
Suppression de pppd de la transmission du code PIN du jeton via un fichier temporaire.
Correction du lancement incorrect du programme de demande de mot de passe via l'interface graphique. Cela a été fait en installant l'environnement correct pour le service xl2tpd.
La construction du démon L2tpIpsecVpn est désormais effectuée en même temps que la construction du client lui-même, ce qui simplifie le processus de construction et de configuration.
Pour faciliter le développement, le système Azure Pipelines est connecté pour tester l'exactitude de la build.
Ajout de la possibilité de forcer le déclassement niveau de sécurité dans le contexte d'openssl. Ceci est utile pour prendre en charge correctement les nouveaux systèmes d'exploitation où le niveau de sécurité standard est défini sur 2, avec des réseaux VPN qui utilisent des certificats qui ne répondent pas aux exigences de sécurité de ce niveau. Cette option sera utile pour travailler avec les anciens réseaux VPN existants.
Ce client prend en charge l'utilisation de cartes à puce pour l'authentification et masque également autant que possible toutes les difficultés liées à la configuration de ce schéma sous Linux, rendant la configuration du client aussi simple et rapide que possible.
Bien sûr, pour une connexion pratique entre PPP et l'interface graphique client, cela n'était pas possible sans modifications supplémentaires dans chacun des projets, mais elles ont néanmoins été minimisées et réduites au minimum :
Fixé erreur dans l'ordre de chargement de la configuration et d'initialisation du contexte openssl. Cette erreur ne nous permettait pas de charger quoi que ce soit à partir du fichier de configuration local /etc/ppp/openssl.cnf, à l'exception des informations sur les moteurs openssl pour travailler avec des cartes à puce, ce qui constituait un sérieux inconvénient si, par exemple, en plus des informations sur les moteurs, nous voulions définir quelque chose d'autre. Par exemple, corrigez le niveau de sécurité lors de l'établissement d'une connexion.
Vous pouvez maintenant commencer la configuration.
Réglage du serveur
Installons tous les packages nécessaires.
Installation de Strongswan (IPsec)
Tout d'abord, configurons le pare-feu pour le fonctionnement ipsec
Après l'installation, vous devez configurer strongswan (l'une des implémentations IPSec). Pour ce faire, éditez le fichier /etc/strongswan/ipsec.conf :
Nous définirons également un mot de passe de connexion commun. Le mot de passe partagé doit être connu de tous les participants du réseau pour l'authentification. Cette méthode n'est évidemment pas fiable, car ce mot de passe peut facilement être connu des personnes auxquelles nous ne souhaitons pas donner accès au réseau.
Cependant, même ce fait n'affectera pas la sécurité du réseau, car Le cryptage de base des données et l'authentification des utilisateurs sont effectués par le protocole PPP. Mais en toute honnêteté, il convient de noter que strongswan prend en charge des technologies d'authentification plus sécurisées, par exemple à l'aide de clés privées. Strongswan a également la capacité de fournir une authentification à l'aide de cartes à puce, mais jusqu'à présent, seule une gamme limitée d'appareils est prise en charge et l'authentification à l'aide de jetons Rutoken et de cartes à puce est donc encore difficile. Définissons un mot de passe général via un fichier /etc/strongswan/ipsec.secrets:
Configurons-le via un fichier /etc/xl2tpd/xl2tpd.conf:
[global]
force userspace = yes
listen-addr = 0.0.0.0
ipsec saref = yes
[lns default]
exclusive = no
; определяет статический адрес сервера в виртуальной сети
local ip = 100.10.10.1
; задает диапазон виртуальных адресов
ip range = 100.10.10.1-100.10.10.254
assign ip = yes
refuse pap = yes
require authentication = yes
; данную опцию можно отключить после успешной настройки сети
ppp debug = yes
length bit = yes
pppoptfile = /etc/ppp/options.xl2tpd
; указывает адрес сервера в сети
name = centos.vpn.server.ad
Nous délivrons le certificat racine et le certificat serveur :
#директория с сертификатами пользователей, УЦ и сервера
sudo mkdir /etc/ppp/certs
#директория с закрытыми ключами сервера и УЦ
sudo mkdir /etc/ppp/keys
#запрещаем любой доступ к этой дирректории кроме администатора
sudo chmod 0600 /etc/ppp/keys/
#генерируем ключ и выписываем сертификат УЦ
sudo openssl genrsa -out /etc/ppp/keys/ca.pem 2048
sudo openssl req -key /etc/ppp/keys/ca.pem -new -x509 -out /etc/ppp/certs/ca.pem -subj "/C=RU/CN=L2TP CA"
#генерируем ключ и выписываем сертификат сервера
sudo openssl genrsa -out /etc/ppp/keys/server.pem 2048
sudo openssl req -new -out server.req -key /etc/ppp/keys/server.pem -subj "/C=RU/CN=centos.vpn.server.ad"
sudo openssl x509 -req -in server.req -CAkey /etc/ppp/keys/ca.pem -CA /etc/ppp/certs/ca.pem -out /etc/ppp/certs/server.pem -CAcreateserial
Ainsi, nous en avons terminé avec la configuration de base du serveur. Le reste de la configuration du serveur implique l'ajout de nouveaux clients.
Ajouter un nouveau client
Pour ajouter un nouveau client au réseau, vous devez ajouter son certificat à la liste des certificats de confiance pour ce client.
Si un utilisateur souhaite devenir membre d'un réseau VPN, il crée une bi-clé et une demande de certificat pour ce client. Si l'utilisateur est digne de confiance, cette application peut être signée et le certificat résultant peut être écrit dans le répertoire des certificats :
REMARQUE
Pour éviter toute confusion, il est préférable que : le nom commun, le nom du fichier de certificat et le nom d'utilisateur soient uniques.
Il convient également de vérifier que le nom de l'utilisateur que nous ajoutons n'apparaît nulle part dans d'autres fichiers d'authentification, sinon il y aura des problèmes avec la façon dont l'utilisateur est authentifié.
Le même certificat doit être renvoyé à l'utilisateur.
Générer une paire de clés et un certificat
Pour une authentification réussie, le client doit :
générer une paire de clés ;
avoir un certificat racine CA ;
avoir un certificat pour votre paire de clés signé par l'autorité de certification racine.
pour client sous Linux
Tout d'abord, générons une paire de clés sur le token et créons une application pour le certificat :
Envoyez l'application client.req qui apparaît à l'autorité de certification. Une fois que vous recevez un certificat pour votre paire de clés, écrivez-le sur un jeton avec le même identifiant que la clé :
pour les clients Windows et Linux (méthode plus universelle)
Cette méthode est plus universelle, car vous permet de générer une clé et un certificat qui seront reconnus avec succès par les utilisateurs Windows et Linux, mais il nécessite une machine Windows pour effectuer la procédure de génération de clé.
Avant de générer des requêtes et d'importer des certificats, vous devez ajouter le certificat racine du réseau VPN à la liste des certificats de confiance. Pour cela, ouvrez-le et dans la fenêtre qui s'ouvre, sélectionnez l'option « Installer le certificat » :
Dans la fenêtre qui s'ouvre, sélectionnez installer un certificat pour l'utilisateur local :
Installons le certificat dans le magasin de certificats racine de confiance de l'autorité de certification :
Après toutes ces actions, nous sommes d’accord sur tous les autres points. Le système est maintenant configuré.
Créons un fichier cert.tmp avec le contenu suivant :
Après cela, nous générerons une paire de clés et créerons une application pour le certificat. Pour ce faire, ouvrez PowerShell et entrez la commande suivante :
certreq.exe -new -pin $PIN .cert.tmp .client.req
Envoyez l'application client.req créée à votre autorité de certification et attendez la réception du certificat client.pem. Il peut être écrit dans un jeton et ajouté au magasin de certificats Windows à l'aide de la commande suivante :
certreq.exe -accept .client.pem
Il convient de noter que des actions similaires peuvent être reproduites à l'aide de l'interface graphique du programme mmc, mais cette méthode est plus longue et moins programmable.
Configuration du client Ubuntu
REMARQUE
Configurer un client sous Linux prend actuellement beaucoup de temps, car... nécessite de créer des programmes séparés à partir des sources. Nous essaierons de garantir que toutes les modifications soient incluses dans les référentiels officiels dans un avenir proche.
Pour assurer la connexion au niveau IPSec au serveur, le package strongswan et le démon xl2tp sont utilisés. Pour simplifier la connexion au réseau à l'aide de cartes à puce, nous utiliserons le package l2tp-ipsec-vpn, qui fournit un shell graphique pour une configuration de connexion simplifiée.
Commençons par assembler les éléments étape par étape, mais avant cela nous installerons tous les packages nécessaires pour que le VPN fonctionne directement :
sudo apt-get install xl2tpd strongswan libp11-3
Installation d'un logiciel pour travailler avec des jetons
Installez la dernière bibliothèque librtpkcs11ecp.so à partir de сайта, également des bibliothèques pour travailler avec des cartes à puce :
sudo apt-get -y install git make gcc libssl-dev
git clone "https://github.com/jjkeijser/ppp"
cd ppp
./configure --prefix /usr
make -j4
sudo make install
Installation du client L2tpIpsecVpn
Pour le moment, le client doit également être compilé à partir du code source. Cela se fait à l'aide de la séquence de commandes suivante :
sudo apt-get -y install git qt5-qmake qt5-default build-essential libctemplate-dev libltdl-dev
git clone "https://github.com/Sander80/l2tp-ipsec-vpn"
cd l2tp-ipsec-vpn
make -j4
sudo make install
Configuration du client L2tpIpsecVpn
Lancez le client installé :
Après le lancement, l'applet L2tpIpsecVPN devrait s'ouvrir. Faites un clic droit dessus et configurez la connexion :
Pour travailler avec des tokens, nous indiquons tout d'abord le chemin d'accès au moteur opensc du moteur OpenSSL et à la bibliothèque PKCS#11. Pour cela, ouvrez l'onglet "Préférences" pour configurer les paramètres openssl :
.
Fermons la fenêtre des paramètres OpenSSL et passons à la configuration du réseau. Ajoutons un nouveau réseau en cliquant sur le bouton Ajouter... dans le panneau des paramètres et saisissons le nom du réseau :
Après cela, ce réseau deviendra disponible dans le panneau des paramètres. Double-cliquez avec le bouton droit sur le nouveau réseau pour le configurer. Sur le premier onglet, vous devez définir les paramètres IPsec. Définissons l'adresse du serveur et la clé publique :
Après cela, allez dans l'onglet Paramètres PPP et indiquez-y le nom d'utilisateur sous lequel nous souhaitons accéder au réseau :
Après cela, ouvrez l'onglet Propriétés et spécifiez le chemin d'accès à la clé, au certificat client et à l'autorité de certification :
Fermons cet onglet et effectuons les derniers réglages ; pour ce faire, ouvrez l'onglet « Paramètres IP » et cochez la case à côté de l'option « Obtenir automatiquement l'adresse du serveur DNS » :
Cette option permettra au client de recevoir une adresse IP personnelle au sein du réseau depuis le serveur.
Après tous les réglages, fermez tous les onglets et redémarrez le client :
Connexion au réseau
Après les réglages, vous pouvez vous connecter au réseau. Pour cela, ouvrez l'onglet applet et sélectionnez le réseau auquel nous souhaitons nous connecter :
Lors du processus d'établissement de la connexion, le client nous demandera de saisir le code PIN Rutoken :
Si une notification apparaît dans la barre d'état indiquant que la connexion a été établie avec succès, cela signifie que la configuration a réussi :
Sinon, il vaut la peine de comprendre pourquoi la connexion n’a pas été établie. Pour ce faire, vous devez consulter le journal du programme en sélectionnant la commande « Informations de connexion » dans l'applet :
Configuration du client Windows
Configurer un client sous Windows est beaucoup plus simple que sous Linux, car... Tous les logiciels nécessaires sont déjà intégrés au système.
Installation du système
Nous installerons tous les pilotes nécessaires pour travailler avec Rutokens en les téléchargeant depuis de. site.
Importation d'un certificat racine pour l'authentification
Téléchargez le certificat racine du serveur et installez-le sur le système. Pour cela, ouvrez-le et dans la fenêtre qui s'ouvre, sélectionnez l'option « Installer le certificat » :
Dans la fenêtre qui s'ouvre, sélectionnez installer un certificat pour l'utilisateur local. Si vous souhaitez que le certificat soit disponible pour tous les utilisateurs de l'ordinateur, vous devez choisir d'installer le certificat sur l'ordinateur local :
Installons le certificat dans le magasin de certificats racine de confiance de l'autorité de certification :
Après toutes ces actions, nous sommes d’accord sur tous les autres points. Le système est maintenant configuré.
Configuration d'une connexion VPN
Pour configurer une connexion VPN, accédez au panneau de configuration et sélectionnez l'option permettant de créer une nouvelle connexion.
Dans la fenêtre pop-up, sélectionnez l'option permettant de créer une connexion pour vous connecter à votre lieu de travail :
Dans la fenêtre suivante, sélectionnez une connexion VPN :
et entrez les détails de la connexion VPN, et spécifiez également l'option d'utilisation d'une carte à puce :
La configuration n'est pas encore terminée. Il ne reste plus qu'à préciser la clé partagée pour le protocole IPsec ; pour cela, rendez-vous dans l'onglet « Paramètres de connexion réseau » puis allez dans l'onglet « Propriétés de cette connexion » :
Dans la fenêtre qui s'ouvre, allez dans l'onglet « Sécurité », spécifiez « Réseau L2TP/IPsec » comme type de réseau et sélectionnez « Paramètres avancés » :
Dans la fenêtre qui s'ouvre, précisez la clé IPsec partagée :
Подключение
Après avoir terminé la configuration, vous pouvez essayer de vous connecter au réseau :
Pendant le processus de connexion, il nous sera demandé de saisir le code PIN du token :
Nous avons mis en place un réseau VPN sécurisé et veillé à ce que ce ne soit pas difficile.
Remerciements
Je voudrais encore une fois remercier nos collègues Vasily Shokov et Alexander Smirnov pour le travail qu'ils ont accompli ensemble pour simplifier la création de connexions VPN pour les clients Linux.