Ce guide ajoute une authentification à deux facteurs par toucher sur téléphone à un VPN qui s’authentifie via RADIUS. L’auth-proxy Notakey s’intercale entre votre concentrateur VPN et votre serveur RADIUS : il transmet la vérification du mot de passe à RADIUS comme d’habitude, envoie une demande d’approbation sur le téléphone de l’utilisateur, et ne renvoie Access-Accept au VPN que si les deux réussissent.
Comme le proxy parle le RADIUS standard des deux côtés, il fonctionne avec presque n’importe quel serveur RADIUS (FreeRADIUS, Microsoft NPS, le User Manager natif de MikroTik ou le plugin RADIUS de Notakey) et avec tout concentrateur VPN capable de pointer vers un serveur RADIUS.
Comment ça fonctionne
VPN concentrator ──RADIUS──▶ Notakey auth-proxy ──RADIUS──▶ your RADIUS server
│
└──▶ push notification ──▶ user's phone
- L’utilisateur se connecte au VPN avec son nom d’utilisateur et son mot de passe.
- Le concentrateur envoie la requête RADIUS à l’auth-proxy (et non directement à votre serveur RADIUS).
- Le proxy transmet la requête au serveur RADIUS de destination. Si la vérification du mot de passe échoue, la connexion est rejetée immédiatement.
- Si le mot de passe est correct, le proxy envoie une demande d’approbation sur
le téléphone de l’utilisateur et maintient l’échange RADIUS ouvert pendant
que l’utilisateur répond, jusqu’à 30 secondes par défaut (
vpn_message_ttl). - Approve → Access-Accept est renvoyé au VPN. Deny ou expiration → rejet.
L’étape 4 a une conséquence importante : le délai d’expiration du client RADIUS de votre VPN doit être au moins aussi long que la fenêtre d’approbation, soit au moins 30 secondes. La plupart des clients RADIUS sont réglés par défaut sur quelques secondes ou moins, car une simple vérification de mot de passe répond instantanément ; ici, un humain doit sortir son téléphone.
Prérequis
- Un Notakey Authentication Server : l’offre cloud gratuite sur signup.notakey.com ou l’appliance on-premise
- Un serveur RADIUS (ou utilisez le plugin RADIUS de Notakey, voir plus bas)
- Un VPN qui s’authentifie auprès de RADIUS
- Le même nom d’utilisateur dans le service Notakey, dans RADIUS et dans le VPN : le proxy s’en sert pour adresser la notification push
Étape 1 – Créer l’application VPN
Dans le tableau de bord Notakey, créez une application (service) pour le VPN, enrôlez les téléphones des utilisateurs et copiez l’Access ID de l’application, c’est-à-dire l’UUID que vous collerez dans la configuration du proxy ci-dessous.
Étape 2 – Configurer l’auth-proxy
Appliance on-premise : le proxy intégré
L’appliance est livrée avec l’auth-proxy intégré. Configurez-le depuis la CLI de l’appliance à l’aide d’un seul document JSON :
ntk cfg set :ap '{
"vpn_port_in": "1812",
"vpn_port_out": "1812",
"vpn_radius_address": "10.0.1.23",
"vpn_secret_in": "secret_to_radius_server",
"vpn_secret_out": "secret_to_radius_server",
"vpn_access_id": "c468f008-485b-b11c-aad9672fbae1",
"vpn_message_ttl": "30",
"message_title": "VPN authentication",
"message_description": "Allow {0} login?"
}' --json-input
Démarrez ensuite le service :
ntk ap start
Signification de chaque champ :
| Champ | Signification |
|---|---|
vpn_port_in |
Port sur lequel le proxy écoute les requêtes RADIUS de votre VPN |
vpn_port_out |
Port de votre serveur RADIUS de destination |
vpn_radius_address |
Adresse de votre serveur RADIUS de destination |
vpn_secret_in |
Secret partagé entre votre VPN et le proxy |
vpn_secret_out |
Secret partagé entre le proxy et votre serveur RADIUS |
vpn_access_id |
L’Access ID de l’application, issu de l’étape 1 |
vpn_message_ttl |
Nombre de secondes dont dispose l’utilisateur pour approuver (30 est une valeur par défaut raisonnable) |
message_title / message_description |
Ce qu’affiche la notification push ; {0} est remplacé par le nom d’utilisateur |
Appliance cloud : le proxy conteneurisé
Avec un serveur Notakey hébergé dans le cloud, exécutez le même proxy sous forme de conteneur au sein de votre propre réseau, devant votre serveur RADIUS :
docker run --name auth-proxy \
-e NOTAKEY_HOST="https://2fa.your_company.com/api" \
-e NOTAKEY_ACCESS_ID="c468f008-485b-b11c-aad9672fbae1" \
-p 1812:1812/udp \
-e LISTEN_ADDRESS=0.0.0.0 \
-e ADDRESS_SECRET_IN=0.0.0.0:secret_to_radius_server \
-e DOWNSTREAM_ADDRESS=10.0.1.23 \
-e SECRET_OUT=secret_to_radius_server \
notakey/authproxy:latest
Les mêmes composants, un conditionnement différent : NOTAKEY_HOST est l’URL de
l’API de votre instance cloud, DOWNSTREAM_ADDRESS votre serveur RADIUS, et les
deux secrets correspondent respectivement au côté VPN et au côté RADIUS.
La référence complète pour les deux variantes (notamment un installeur MSI pour exécuter le proxy sous Windows, les exigences de connectivité réseau et l’emplacement des journaux) figure dans le manuel de l’Authentication Proxy.
Étape 3 – Pas encore de serveur RADIUS ? Utilisez le nôtre
Si vous n’exploitez pas déjà RADIUS, inutile d’en monter un rien que pour cela :
- Plugin RADIUS de Notakey : l’appliance embarque un plugin de service RADIUS (basé sur FreeRADIUS). Il authentifie les utilisateurs déjà définis dans votre service Notakey, si bien qu’il n’y a aucune base d’utilisateurs RADIUS distincte à maintenir ; la mise en place est décrite dans notre article de base de connaissances Plugin de service RADIUS (aucune configuration d’utilisateur requise).
- MikroTik User Manager : si votre VPN se termine déjà sur un MikroTik, son paquet User Manager natif fait office de serveur RADIUS de destination.
- Tout RADIUS d’entreprise existant (FreeRADIUS, Microsoft NPS et consorts) fonctionne sans modification ; le proxy est transparent pour lui.
Étape 4 – Pointer votre VPN vers le proxy
Reconfigurez le client RADIUS du concentrateur VPN : même secret que
vpn_secret_in, mais l’adresse du serveur est désormais celle du proxy, et
non celle du serveur RADIUS. Et augmentez le délai d’expiration.
Sur un MikroTik, cela ressemble à ceci :
/radius
add service=ppp address=<proxy-address> secret=secret_to_radius_server timeout=30s
/ppp aaa
set use-radius=yes
Le timeout=30s a son importance. Le délai RADIUS par défaut de MikroTik est
de 300 millisecondes : parfait pour une vérification de mot de passe, sans espoir
pour une approbation humaine. Réglez-le sur au moins 30 secondes (en accord avec
vpn_message_ttl), sinon les connexions échoueront avant même que l’utilisateur
n’ait le temps d’attraper son téléphone. La même règle vaut pour les réglages du
client RADIUS de tout autre fournisseur.
Testez
Connectez-vous au VPN. La vérification du mot de passe réussit et la notification push arrive sur le téléphone, y compris sur l’écran verrouillé ; l’utilisateur n’a donc même pas besoin d’avoir l’application ouverte :

En l’ouvrant, on voit la demande complète : qui se connecte et depuis quelle adresse IP, avec un compte à rebours pendant que le proxy maintient l’échange RADIUS ouvert :

La connexion n’aboutit qu’après un Approve. Et cet écran est la récompense en matière de sécurité de toute l’installation : un utilisateur qui reçoit cette notification push alors qu’il n’est pas en train de se connecter au VPN a sous les yeux quelqu’un d’autre en train d’utiliser son mot de passe (depuis une IP qu’il peut voir), et un seul appui sur Deny stoppe la connexion et laisse une trace d’audit. Si les connexions expirent même lorsque vous approuvez rapidement, revérifiez d’abord le délai d’expiration du client RADIUS : c’est l’erreur la plus fréquente dans cette configuration.
Guides connexes
- 2FA pour la connexion au routeur MikroTik : le même proxy, pointé vers la connexion WinBox/SSH du routeur lui-même
- 2FA SSH Linux avec pam_radius : le même proxy protégeant SSH, sudo et su
- 2FA VPN MikroTik – l’installation complète par script : une alternative mono-routeur, sans aucun RADIUS
- Windows Credential Provider pour le bureau à distance