Cet article décrit la configuration d'un serveur OpenVPN pour activer l'authentification à deux facteurs avec un bot Telegram, qui enverra une demande de confirmation lors de la connexion.
OpenVPN est un serveur VPN gratuit et open source largement connu, couramment utilisé pour organiser un accès sécurisé des employés aux ressources internes de l'organisation.
Pour l'authentification lors de la connexion au serveur VPN, une combinaison de clé et de nom d'utilisateur / mot de passe est généralement utilisée. Cependant, le mot de passe enregistré sur le client transforme l'ensemble en un seul facteur, n'assurant pas un niveau de sécurité adéquat. Un attaquant ayant accès à l'ordinateur client a également accès au serveur VPN. Cela est particulièrement vrai pour les connexions depuis des machines sous Windows.
L'utilisation d'un deuxième facteur réduit de 99 % le risque d'accès non autorisé et ne complique absolument pas le processus de connexion pour les utilisateurs.
Je tiens à préciser que pour réaliser cela, il est nécessaire de se connecter à un serveur d'authentification tiers multifactor.ru, qui peut être utilisé gratuitement pour vos besoins.
Principe de fonctionnement
- OpenVPN utilise le plugin openvpn-plugin-auth-pam pour l'authentification.
- Le plugin vérifie le mot de passe de l'utilisateur sur le serveur et demande le deuxième facteur via le protocole RADIUS au service Multifacteur.
- Multifacteur envoie un message à l'utilisateur via le bot Telegram pour confirmer l'accès.
- L'utilisateur confirme la demande d'accès dans le chat Telegram et se connecte au VPN.
Installation du serveur OpenVPN.
Il existe de nombreux articles en ligne décrivant le processus d'installation et de configuration d'OpenVPN, nous ne les dupliquerons donc pas. Si vous avez besoin d'aide, à la fin de l'article, vous trouverez quelques liens vers des ressources pédagogiques.
Configuration du Multifacteur.
Connectez-vous à , allez à la section "Ressources" et créez un nouveau VPN.
Après la création, deux paramètres seront disponibles : NAS-IDentifier et Shared Secret, ils seront nécessaires pour la configuration ultérieure.

Dans la section "Groupes", allez aux paramètres du groupe "Tous les utilisateurs" et décochez l'option "Tous les ressources" afin que seuls les utilisateurs d'un certain groupe puissent se connecter au serveur VPN.
Créez un nouveau groupe "VPN users", désactivez tous les moyens d'authentification sauf Telegram et indiquez que les utilisateurs ont accès à la ressource VPN créée.

Dans la section "Utilisateurs", créez des utilisateurs qui auront accès au VPN, ajoutez-les au groupe "VPN users" et envoyez-leur un lien pour configurer le second facteur d'authentification. Le nom d'utilisateur doit correspondre au nom d'utilisateur sur le serveur VPN.

Configuration du serveur OpenVPN
Ouvrez le fichier /etc/openvpn/server.conf et ajoutez le plugin pour l'authentification à l'aide du module PAM.
plugin /usr/lib64/openvpn/plugins/openvpn-plugin-auth-pam.so openvpnLe plugin peut se trouver dans le répertoire /usr/lib/openvpn/plugins/ ou /usr/lib64/openvpn/plugins/ en fonction de votre système.
Ensuite, vous devez installer le module pam_radius_auth
$ sudo yum install pam_radiusOuvrez le fichier pour modification /etc/pam_radius.conf et indiquez l'adresse du serveur RADIUS Multifactor.
radius.multifactor.ru shared_secret 40où :
- radius.multifactor.ru — adresse du serveur
- shared_secret — copiez à partir du paramètre correspondant dans les paramètres VPN
- 40 secondes — délai d'attente de la requête avec une grande marge
Les autres serveurs doivent être supprimés ou commentés (ajouter un point-virgule au début)
Ensuite, créez un fichier pour le type de service openvpn.
$ sudo vi /etc/pam.d/openvpnet écrivez-y
auth required pam_radius_auth.so skip_passwd client_id=[NAS-IDentifier]
auth substack password-auth
account substack password-authla première ligne connecte le module PAM pam_radius_auth avec les paramètres :
- skip_passwd — désactive la transmission du mot de passe de l'utilisateur au serveur RADIUS Multifactor (il ne doit pas le connaître).
- client_id — remplacez [NAS-Identifier] par le paramètre correspondant des paramètres de la ressource VPN.
Tous les paramètres possibles sont décrits dans .
Les deuxième et troisième lignes incluent la vérification système du nom d'utilisateur, du mot de passe et des droits de l'utilisateur sur votre serveur avec le second facteur d'authentification.
Redémarrez OpenVPN
$ sudo systemctl restart openvpn@serverConfiguration du client
Activez dans le fichier de configuration client la demande de nom d'utilisateur et de mot de passe.
auth-user-passVérification
Démarrez le client OpenVPN, connectez-vous au serveur et saisissez votre nom d'utilisateur et votre mot de passe. Un message du bot Telegram demandera l'accès avec deux boutons.

Un bouton permet d'accéder, l'autre bloque.
Vous pouvez maintenant enregistrer le mot de passe sur le client, le second facteur protégera efficacement votre serveur OpenVPN contre les accès non autorisés.
Si quelque chose ne fonctionne pas
Vérifiez progressivement que vous n'avez rien oublié :
- Sur le serveur avec OpenVPN, il y a un utilisateur avec un mot de passe défini.
- L'accès au serveur est ouvert via le port UDP 1812 à l'adresse radius.multifactor.ru
- Les paramètres NAS-Identifier et Shared Secret sont correctement renseignés
- Un utilisateur avec le même identifiant est enregistré dans le système Multifactor et a été ajouté au groupe d'utilisateurs VPN
- L'utilisateur a configuré la méthode d'authentification via Telegram
Si vous n'avez pas encore configuré OpenVPN, lisez .
Le guide est réalisé avec des exemples sur CentOS 7.
Source : habr.com
