Portail captif pfSense avec authentification RADIUS sur Windows Server

Un réseau invité ou Wi-Fi où chacun se connecte avec son compte Active Directory : pfSense affiche la page de connexion, un serveur NPS décide qui passe. Voici le montage complet, de la topologie au premier test.

Schéma : un poste invité en 192.168.20.x ouvre la page du portail captif pfSense, qui interroge le serveur NPS srv-nps01 (192.168.10.20) en RADIUS UDP 1812 avant d'ouvrir Internet
Illustration schématique — ne reproduit aucune interface réelle.

Un portail captif (captive portal) oblige les postes d'une interface à s'authentifier avant d'accéder à Internet. D'après la documentation Netgate, pfSense présente une page de connexion où l'utilisateur saisit un identifiant et un mot de passe, un code voucher, ou accepte des conditions d'utilisation. L'usage typique : un Wi-Fi invité.

Avec RADIUS, pas de seconde base de comptes : pfSense transmet les identifiants au rôle NPS (Network Policy Server) de Windows Server, qui les vérifie dans Active Directory. Testez ce montage sur un lab avant de toucher à un réseau de production, et sauvegardez la configuration de pfSense avant de commencer.

La topologie du lab

Le scénario utilise trois réseaux privés RFC 1918 et un domaine de test lab.local. Le portail est activé sur l'interface OPT1, renommée INVITES ; le serveur NPS reste sur le LAN d'administration.

HôteRôleInterfaceAdresse
pfSensepare-feu, portail captifWANDHCP (réseau amont)
pfSensepasserelle du LANLAN192.168.10.1/24
pfSensepasserelle des invitésOPT1 (INVITES)192.168.20.1/24
srv-nps01NPS, membre de lab.localLAN192.168.10.20
poste invitéclient à authentifierINVITESDHCP 192.168.20.x

Si pfSense n'est pas encore en place, commencez par installer pfSense dans VirtualBox, puis ajoutez une troisième carte réseau pour INVITES.

Prérequis à réunir :

Préparer le serveur RADIUS (NPS)

Netgate rappelle que Microsoft recommande d'installer NPS sur un contrôleur de domaine pour les performances, mais qu'un serveur membre réduit la surface d'attaque des contrôleurs. Les deux fonctionnent.

Installer le rôle et déclarer pfSense comme client

Le rôle s'ajoute par le Gestionnaire de serveur, Ajouter des rôles et fonctionnalités : cochez les services de stratégie et d'accès réseau (NPAS). Dans la console Network Policy Server, dépliez le nœud des clients et serveurs RADIUS, puis, sur RADIUS Clients, créez un nouveau client :

Créer la stratégie réseau

Sous Policies, Network Policies, créez une stratégie qui accorde l'accès (Access granted) aux membres du groupe Invites-WiFi, condition Windows Groups. La recette Netgate coche les méthodes d'authentification CHAP et PAP, SPAP ; choisissez celle qui correspond au protocole que vous réglerez dans pfSense.

Réglage NPSValeur dans ce lab
ConditionWindows Groups = Invites-WiFi
PermissionAccess granted
Authentificationcelle choisie côté pfSense (PAP ou MS-CHAPv2)
Port d'authentification1812 (onglet Ports des propriétés NPS)

Le port 1812/UDP est le port attribué officiellement à RADIUS par la RFC 2865 ; la comptabilité (accounting) utilise 1813/UDP selon la RFC 2866. Un NPS installé de longue date peut écouter sur d'autres ports : vérifiez l'onglet Ports des propriétés de NPS.

Déclarer le serveur RADIUS dans pfSense

Dans System > User Manager, onglet Authentication Servers, cliquez sur Add et choisissez le type RADIUS. Les champs à remplir :

Le lien entre pfSense et le serveur RADIUS doit rester sur un réseau d'administration de confiance, ou passer par un VPN si le serveur est distant : Netgate précise que certains éléments du protocole circulent sans chiffrement.

Testez immédiatement dans Diagnostics > Authentication : choisissez le serveur NPS lab, saisissez un compte membre du groupe et cliquez sur Test. Tant que ce test échoue, inutile d'aller plus loin.

Créer la zone de portail captif

Le portail se configure sous Services > Captive Portal. Ajoutez une zone, puis :

  1. cochez Enable et sélectionnez l'interface INVITES (jamais le WAN, que la documentation exclut) ;
  2. réglez un Idle timeout et un Hard timeout en minutes, inférieurs à la durée du bail DHCP de l'interface, pour qu'une session ne survive pas sur une adresse réattribuée à un autre appareil ;
  3. dans Authentication Method, choisissez Use an Authentication backend et sélectionnez NPS lab comme Authentication Server ;
  4. enregistrez, puis ouvrez une page HTTP depuis un poste invité.

Si vous utilisez une page de connexion personnalisée, elle doit poster les champs attendus par pfSense pour la source d'authentification principale :

<input name="auth_user" type="text">
<input name="auth_pass" type="password">

Côté pare-feu, l'interface INVITES n'a aucune règle autorisant le trafic tant que vous ne l'avez pas créée ; la page sur les règles firewall pfSense détaille comment autoriser le DNS et le HTTP de cette interface sans ouvrir le LAN.

Ce que RADIUS peut renvoyer au portail

Le serveur peut aussi renvoyer des attributs que pfSense applique, si les options correspondantes sont activées dans la zone :

Attribut RADIUSEffet dans le portail
Session-Timeoutdéconnexion après la durée fixée par le serveur
Idle-Timeoutdéconnexion après inactivité
pfSense-Max-Total-Octetsquota de trafic par utilisateur
pfSense-Bandwidth-Max-Up / -Downdébit maximal par utilisateur
Acct-Interim-Intervalfréquence des mises à jour de comptabilité

L'option Reauthentication interroge le serveur chaque minute pour chaque utilisateur connecté ; un refus coupe la session aussitôt.

Le portail captif ne s'affiche pas : les causes documentées

C'est la panne la plus fréquente. Netgate la ramène à quatre causes :

Pour un échec d'authentification, regardez côté Windows : NPS journalise chaque requête dans le journal Sécurité, avec une ligne Reason qui explique le refus. Si NPS indique un succès alors que le portail refuse, le secret partagé diffère entre les deux côtés.

Pour un autre pare-feu, voyez OPNsense vs pfSense ; les autres tutoriels sont dans la rubrique réseau et pare-feu.

Questions fréquentes

Quel port utilise RADIUS ?

La RFC 2865 attribue officiellement le port UDP 1812 à l'authentification RADIUS, et la RFC 2866 le port UDP 1813 à la comptabilité. Ce sont les valeurs par défaut de pfSense ; vérifiez que votre serveur NPS écoute bien sur ces ports.

Faut-il installer NPS sur un contrôleur de domaine ?

Non. Microsoft le recommande pour les performances, mais un serveur membre du domaine fonctionne aussi et limite les services exposés sur les contrôleurs.

Pourquoi le portail captif ne s'affiche pas sur le Wi-Fi ?

Le plus souvent, le DNS ne répond pas sur l'interface du portail, les règles bloquent la requête HTTP, le navigateur part en HTTPS ou le client utilise IPv6.

Peut-on limiter la durée ou le débit par utilisateur ?

Oui. Avec les options adéquates, pfSense applique les attributs Session-Timeout, Idle-Timeout, pfSense-Max-Total-Octets et pfSense-Bandwidth-Max-Up ou Down renvoyés par le serveur.

PAP ou MS-CHAPv2 pour le portail ?

Netgate déconseille PAP, qui envoie le mot de passe en clair entre pfSense et le serveur, et signale aussi des faiblesses connues pour MS-CHAPv2. Quel que soit le choix, gardez ce trafic sur un réseau d'administration isolé ou un VPN.