🔐 Authentification 802.1X sur un réseau filaire

📝 Introduction
La mise en place de l'authentification 802.1X vient avec son langage vernaculaire comme toute technologie un peu velue.
802.1X est un standard mis au point en 2001 par l'IEEE permettant de contrôler les accès à un réseau. Il est utilisé pour autoriser ou refuser l'accès à un réseau (Wi-Fi ou filaire) en fonction de l'identité de l'utilisateur ou de l'appareil.
🧩 Les 3 composants principaux d'un réseau à accès contrôlé :
- Supplicant (client) : L'appareil ou l'utilisateur qui veut accéder au réseau (ex. : un PC portable).
- Authenticator (commutateur ou point d’accès) dit aussi NAS : Le "portier" qui contrôle l'accès au réseau.
- Serveur RADIUS (AAA) : Le "cerveau" qui authentifie l'utilisateur via un protocole comme EAP (Extensible Authentication Protocol).
Introduction à EAP
Dans une infrastructure 802.1X, l’authentification des supplicants repose sur le protocole EAP. Ce protocole d’authentification extensible définit plusieurs méthodes d’authentification possédant différents niveaux de sécurité.
Méthodes d’authentification les plus fréquemment utilisées :
- EAP-MD5
- EAP-MSCHAPv2
- EAP-TLS
- EAP-PEAP
- EAP-TTLSv0 / EAP-TTLS
Introduction à AAA
En sécurité informatique, AAA correspond à un protocole qui réalise trois fonctions : l'authentification, l'autorisation, et la traçabilité :
- Authentication (Authentification) : Vérifier l'identité. Exemple : Login / mot de passe.
- Authorization (Autorisation) : Définir les permissions. Exemple : Accès à Internet ou à un VLAN.
- Accounting (Comptabilité) : Suivre l'utilisation. Exemple : Temps de connexion, data utilisée...
Introduction à RADIUS
RADIUS (Remote Authentication Dial-In User Service) est un protocole qui sert à gérer les connexions réseau des utilisateurs. Il permet de :
✅ Vérifier qui se connecte (authentification)
🛡️ Contrôler ce que l’utilisateur peut faire (autorisation)
📋 Enregistrer ce que l’utilisateur fait (traçabilité)
C’est donc un serveur AAA.
🎯 Objectif
L'objectif est de mettre en place l'authentification 802.1X afin que les utilisateurs (les employés par exemple) soient placés dans le VLAN approprié et q'une personne externe tentant de brancher son appareil sur le réseau soit placée dans un VLAN isolé.
Afin de mettre en place l'authentification 802.1X, je vais partir sur une architecture courammant rencontrée comprenant généralement un serveur MS Active Directory (ça marche aussi avec un Samba AD ou un annuaire OpenLDAP). Ce dernier nous permettra d'authentifier les appareils et les utilisateurs.
Nous nous baserons donc sur la méthode d’authentification EAP-MSCHAPv2.
Nous utiliserons la configuration des VLAN précédemment utilisée pour l'authentfication MAB en ajoutant le VLAN machines.
VLAN et adressage réseau
ID | Nom | Réseau | Passerelle/DHCP | DNS |
---|---|---|---|---|
2 | Registration | 192.168.2.0/24 | PacketFence | PacketFence |
3 | Isolation | 192.168.3.0/24 | PacketFence | PacketFence |
🆕 4 | Machines | 192.168.4.0/24 | OPNSense | AD |
10 | Administration | 192.168.10.0/24 | OPNSense | AD |
20 | LAN | 192.168.20.0/24 | OPNSense | AD |
30 | AD | 192.168.30.0/24 | OPNSense | AD |
40 | Guests | 192.168.40.0/24 | OPNSense | OPNSense |
Connexion réseau
Hôte | Port si plss | SW | Port | VLAN TYPE |
---|---|---|---|---|
pve01 | sw01 | P1 | TAG 10 | |
ad2019 | sw01 | P2 | UNTAG 30 | |
AP AC Lite | sw01 | P3 | UNTAG 10 / TAG 20,40 | |
opnslab | igb1 | sw01 | P8 | TAG 4,10,20,30,40 |
Clients | sw01 | P4-7 | UNTAG 1 (VLAN par défaut) |
Adressage IP des hôtes
Hôte | Interface | IP | Commentaire |
---|---|---|---|
opnslab | WAN | DHCP | |
Machines | 192.168.4.1 | VLAN TAG 4 sur igb1 | |
Administration | 192.168.10.1 | VLAN TAG 10 sur igb1 | |
LAN | 192.168.20.1 | VLAN TAG 20 sur igb1 | |
AD | 192.168.30.1 | VLAN TAG 30 sur igb1 | |
Guests | 192.168.40.1 | VLAN TAG 40 sur igb1 |
🔄 Configuration du swicth
Nous avions déjà configuré le serveur RADIUS précédemment. Nous allons donc juste modifier le port 4 du switch en configuré en ajoutant l'option 802.1X tout en conservant MAB qui peut servir de repli (fallback MAB).
sw01#conf t
sw01(config)#int Fa4
sw01(config-if)#dot1x authentication 802.1x mac
sw01(config-if)#ex
sw01(config)#end
Créez le VLAN MACHINES avec l'id 4.
🛡️ Configuration de PacketFence
Intégration de PacketFence dans l'AD
Info
J'ai installé un serveur Windows 2019 avec le rôle AD. Le domaine est labo.lan.
Configuration > Domaines Active Directory > Ajouter un domaine :

Renseignement des paramètres AD :

Renseingez un mot de passe du "Compte machine" puis les credentials du compte administrateur du domaine :

Terminez en cliquant sur le bouton Créer.
Démarrez le service "ntlm-auth-api" et vérifiez si "Joins au Domaine" est bien en vert.

Vérifiez également sur l'AD la présence de "packetfence" dans l'UO Computers

Configuration du Realm
Renseignez le domaine qui va être utilisé pour l'authentification :


Concernant la partie Tronquer si ces options ne sont pas cochées, l'autthentification ne fonctionnera pas. Je n'ai pas trouvé d'explications claires sur la documentation officielle de PacketFence et qui n'est pas à jour. À chercher du côté de FreeRADIUS...

Terminez en cliquant sur le bouton Sauvegarder et redémarrez le service "radius-auth"

Faire de même avec le Realm NULL :

Configuration des sources d'authentification
Si nous créeons que la source d'authentification des utilisateurs cela posera alors un problème. En effet pour pouvoir s'authentifier, il faut que le PC ait accès à minima à l'AD. Nous allons donc créer également une source d'authentification des machines intégrées dans l'AD.
D'où le VLAN MACHINES qui peut être un VLAN dont l'accès est limité à l'AD et d'autres ressources strictement nécessaires à son bon fonctionnement.
Authentification des utilisateurs
Avant de configurer la source d'authentification, créez un utilisateur sur l'AD (pfbind dans cet exemple) qui permettra de consulter l'annuaire.
Optionnel : vous pouvez également créer l'UO LABO qui contiendra les comptes des utilisateurs.
Configuration > Sources d'authentification :


Note : nous pouvons ajouter l'adresse IP d'un deuxième hôte AD dans la partie Hôte.
Configurez l'utilisateur qui interrogera l'annuaire et testez la connexion :

Associez les Realms précédemment configurés :

Cliquez sur "Ajouter une règle" à Règle d'authentification :

Ajoutez la règle d'authentification associant les utilisateurs authentifiés au VLAN 20 (LAN) et une durée d'accès, puis terminez en cliquant sur Créer :

Authentification des machines
Ajoutez une nouvelle source d'authentification interne.

Notez le DN de base et l'attribut du nom d'utilisateur qui ne sont pas les mêmes que pour les utilisateurs.
Les autres paramètres sont les mêmes que ceux utilisaient pour la source d'auth. des utilisateurs sauf pour la règle d'authentification qui va associer les machines authentifiées au VLAN 4 (MACHINES).

Finalisez la configuration en cliquant sur "Créer" puis vous devriez avoir deux sources d'auth. :

Configuration du profil de connexion
Le profil de connexion est nécessaire pour que PacketFence sache comment gérer une connexion provenant du réseau filaire ou du réseau WiFi.



Ici nous filtrons sur les connexions de type Ethernet-EAP. Si la methode d'authentification 802.1X avec EAP provient d'un réseau filaire, on applique alors le profil de connexion 802.1X.




Configuration du switch sur PacketFence


🖥️ Branchement d'un PC
J'utilise un PC avec Windows 10 Pro. J'ai branché ce dernier sur un port en mode access sur le VLAN LAN afin d'intégrer celui-ci dans le domaine.
Configuration de l'auth. 802.1X
Avant de connecter le PC sur le port 4 du switch, nous devons configurer l'authentification 802.1X sur Windows.
Ouvrez la festion de services en tant qu'administrateur. Rechcerchez le service Configuration automatique du réseau câblé. Activez le démarrage automatique et démarrez le service.

Ouvrez les propriétés de la carte réseau.
Configurez l'option d'authentification sur la carte réseau :

Décochez la case Vérifier l'identité... puis cliquez sur Configurer... :

Warning
Nous sommes dans un environnement de test. En production, l'option de vérification de l'identité du serveur doit être paramétrée. Nous verrons cela plus tard.
Sélectionnez Mot de passe sécurisé (EAP-MSCHAP version 2) puis cliquez sur configurez et cochez la case Utiliser automatiquement mon nom et mon mot de passe..**

Validez puis cliquez sur Paramètres supplémentaires

Selectionnez Authentification de l'utilisateur ou de l'ordinateur

Branchement de l'appareil
Allumez le PC une fois branché sur le port 4 du switch.
Nous pouvons observer le cheminement de l'authentification du PC sur PacketFence.
2025-05-29T13:30:07.962887+02:00 packetfence httpd.aaa-docker-wrapper[3277]: httpd.aaa(6) INFO: [mac:1c:87:2c:XX:XX:XX] handling radius autz request: from switch_ip => (192.168.10.2), connection_type => Ethernet-EAP, switch_mac => (00:08:30:XX:XX:XX), mac => [1c:87:2c:XX:XX:XX], port => 4, username => "host/LAB00035XXXXXX.LABO.LAN" (pf::radius::authorize)
2025-05-29T13:30:07.966285+02:00 packetfence httpd.aaa-docker-wrapper[3277]: httpd.aaa(6) INFO: [mac:1c:87:2c:XX:XX:XX] is doing machine auth with account 'host/LAB00035XXXXXX.LABO.LAN'. (pf::radius::_machine_auth_detection)
2025-05-29T13:30:07.982938+02:00 packetfence httpd.aaa-docker-wrapper[3277]: httpd.aaa(6) INFO: [mac:1c:87:2c:XX:XX:XX] Instantiate profile 802.1X (pf::Connection::ProfileFactory::_from_profile)
2025-05-29T13:30:08.018238+02:00 packetfence httpd.aaa-docker-wrapper[3277]: httpd.aaa(6) INFO: [mac:1c:87:2c:XX:XX:XX] Found authentication source(s) : 'AD-MACHINE,AD-USERS' for realm 'LABO.LAN' (pf::config::util::filter_authentication_sources)
2025-05-29T13:30:08.018728+02:00 packetfence httpd.aaa-docker-wrapper[3277]: httpd.aaa(6) INFO: [mac:1c:87:2c:XX:XX:XX] Using sources AD-MACHINE, AD-USERS for matching (pf::authentication::match2)
2025-05-29T13:30:08.021921+02:00 packetfence httpd.aaa-docker-wrapper[3277]: httpd.aaa(6) WARN: [mac:1c:87:2c:XX:XX:XX] [AD-MACHINE machines] Searching for (servicePrincipalName=host/LAB00035XXXXXX.LABO.LAN), from CN=Computers,DC=labo,DC=lan, with scope sub (pf::Authentication::Source::LDAPSource::match_in_subclass)
2025-05-29T13:30:08.051952+02:00 packetfence httpd.aaa-docker-wrapper[3277]: httpd.aaa(6) INFO: [mac:1c:87:2c:XX:XX:XX] Matched rule (machines) in source AD-MACHINE, returning actions. (pf::Authentication::Source::match_rule)
2025-05-29T13:30:08.051952+02:00 packetfence httpd.aaa-docker-wrapper[3277]: httpd.aaa(6) INFO: [mac:1c:87:2c:XX:XX:XX] Matched rule (machines) in source AD-MACHINE, returning actions. (pf::Authentication::Source::match)
2025-05-29T13:30:08.057562+02:00 packetfence pfqueue-backend[4419]: pfqueue(3060) INFO: [mac:1c:87:2c:XX:XX:XX] Running task person_lookup (main::process_data)
2025-05-29T13:30:08.066479+02:00 packetfence pfqueue-backend[4419]: pfqueue(3060) INFO: [mac:1c:87:2c:XX:XX:XX] Already did a person lookup for host/LAB00035XXXXXX.LABO.LAN (pf::lookup::person::lookup_person)
2025-05-29T13:30:08.071821+02:00 packetfence httpd.aaa-docker-wrapper[3277]: httpd.aaa(6) INFO: [mac:1c:87:2c:XX:XX:XX] Found authentication source(s) : 'AD-MACHINE,AD-USERS' for realm 'LABO.LAN' (pf::config::util::filter_authentication_sources)
2025-05-29T13:30:08.071821+02:00 packetfence httpd.aaa-docker-wrapper[3277]: httpd.aaa(6) INFO: [mac:1c:87:2c:XX:XX:XX] Role has already been computed and we don't want to recompute it. Getting role from node_info (pf::role::getRegisteredRole)
2025-05-29T13:30:08.071821+02:00 packetfence httpd.aaa-docker-wrapper[3277]: httpd.aaa(6) INFO: [mac:1c:87:2c:XX:XX:XX] Username was defined "host/LAB00035XXXXXX.LABO.LAN" - returning role 'Machine' (pf::role::getRegisteredRole)
2025-05-29T13:30:08.071821+02:00 packetfence httpd.aaa-docker-wrapper[3277]: httpd.aaa(6) INFO: [mac:1c:87:2c:XX:XX:XX] PID: "host/LAB00035XXXXXX.LABO.LAN", Status: reg Returned VLAN: (undefined), Role: Machine (pf::role::fetchRoleForNode)
2025-05-29T13:30:08.079636+02:00 packetfence httpd.aaa-docker-wrapper[3277]: httpd.aaa(6) INFO: [mac:1c:87:2c:XX:XX:XX] (192.168.10.2) Added VLAN 4 to the returned RADIUS Access-Accept (pf::Switch::returnRadiusAccessAccept)
Sur l'interface web de PacketFence

Notre machine est bien placée sur le VLAN 4.
Authentifions maintenant un utilisateur.
2025-05-29T13:39:17.342037+02:00 packetfence httpd.aaa-docker-wrapper[3277]: httpd.aaa(6) INFO: [mac:1c:87:2c:XX:XX:XX] handling radius autz request: from switch_ip => (192.168.10.2), connection_type => Ethernet-EAP, switch_mac => (00:08:30:XX:XX:XX), mac => [1c:87:2c:XX:XX:XX], port => 4, username => "LABO\lsimpson" (pf::radius::authorize)
2025-05-29T13:39:17.356775+02:00 packetfence httpd.aaa-docker-wrapper[3277]: httpd.aaa(6) INFO: [mac:1c:87:2c:XX:XX:XX] Instantiate profile 802.1X (pf::Connection::ProfileFactory::_from_profile)
2025-05-29T13:39:17.376857+02:00 packetfence httpd.aaa-docker-wrapper[3277]: httpd.aaa(6) INFO: [mac:1c:87:2c:XX:XX:XX] Found authentication source(s) : 'AD-MACHINE,AD-USERS' for realm 'default' (pf::config::util::filter_authentication_sources)
2025-05-29T13:39:17.378303+02:00 packetfence httpd.aaa-docker-wrapper[3277]: httpd.aaa(6) INFO: [mac:1c:87:2c:XX:XX:XX] Using sources AD-MACHINE, AD-USERS for matching (pf::authentication::match2)
2025-05-29T13:39:17.380987+02:00 packetfence httpd.aaa-docker-wrapper[3277]: httpd.aaa(6) WARN: [mac:1c:87:2c:XX:XX:XX] [AD-MACHINE machines] Searching for (servicePrincipalName=lsimpson), from CN=Computers,DC=labo,DC=lan, with scope sub (pf::Authentication::Source::LDAPSource::match_in_subclass)
2025-05-29T13:39:17.405744+02:00 packetfence httpd.aaa-docker-wrapper[3277]: httpd.aaa(6) WARN: [mac:1c:87:2c:XX:XX:XX] [AD-USERS employees] Searching for (sAMAccountName=lsimpson), from OU=LABO,DC=labo,DC=lan, with scope sub (pf::Authentication::Source::LDAPSource::match_in_subclass)
2025-05-29T13:39:17.415910+02:00 packetfence httpd.aaa-docker-wrapper[3277]: httpd.aaa(6) INFO: [mac:1c:87:2c:XX:XX:XX] Matched rule (employees) in source AD-USERS, returning actions. (pf::Authentication::Source::match_rule)
2025-05-29T13:39:17.415910+02:00 packetfence httpd.aaa-docker-wrapper[3277]: httpd.aaa(6) INFO: [mac:1c:87:2c:XX:XX:XX] Matched rule (employees) in source AD-USERS, returning actions. (pf::Authentication::Source::match)
2025-05-29T13:39:17.421700+02:00 packetfence pfqueue-backend[4387]: pfqueue(3060) INFO: [mac:unknown] Running task person_lookup (main::process_data)
2025-05-29T13:39:17.432599+02:00 packetfence httpd.aaa-docker-wrapper[3277]: httpd.aaa(6) INFO: [mac:1c:87:2c:XX:XX:XX] Found authentication source(s) : 'AD-MACHINE,AD-USERS' for realm 'default' (pf::config::util::filter_authentication_sources)
2025-05-29T13:39:17.432599+02:00 packetfence httpd.aaa-docker-wrapper[3277]: httpd.aaa(6) INFO: [mac:1c:87:2c:XX:XX:XX] Role has already been computed and we don't want to recompute it. Getting role from node_info (pf::role::getRegisteredRole)
2025-05-29T13:39:17.432599+02:00 packetfence httpd.aaa-docker-wrapper[3277]: httpd.aaa(6) INFO: [mac:1c:87:2c:XX:XX:XX] Username was defined "LABO\lsimpson" - returning role 'LAN' (pf::role::getRegisteredRole)
2025-05-29T13:39:17.432599+02:00 packetfence httpd.aaa-docker-wrapper[3277]: httpd.aaa(6) INFO: [mac:1c:87:2c:XX:XX:XX] PID: "LABO\lsimpson", Status: reg Returned VLAN: (undefined), Role: LAN (pf::role::fetchRoleForNode)
2025-05-29T13:39:17.434350+02:00 packetfence pfqueue-backend[4387]: pfqueue(3060) INFO: [mac:unknown] Already did a person lookup for LABO\lsimpson (pf::lookup::person::lookup_person)
2025-05-29T13:39:17.440486+02:00 packetfence httpd.aaa-docker-wrapper[3277]: httpd.aaa(6) INFO: [mac:1c:87:2c:XX:XX:XX] (192.168.10.2) Added VLAN 20 to the returned RADIUS Access-Accept (pf::Switch::returnRadiusAccessAccept)
2025-05-29T13:39:17.442358+02:00 packetfence httpd.aaa-docker-wrapper[3277]: httpd.aaa(6) WARN: [mac:1c:87:2c:XX:XX:XX] No parameter LANRole found in conf/switches.conf for the switch 192.168.10.2 (pf::Switch::getRoleByName)
2025-05-29T13:39:17.447243+02:00 packetfence httpd.aaa-docker-wrapper[3277]: httpd.aaa(6) INFO: [mac:1c:87:2c:XX:XX:XX] security_event 1300003 force-closed for 1c:87:2c:XX:XX:XX (pf::security_event::security_event_force_close)

Après authentification de l'utilisateur, le PC est bien passé sur le VLAN 20 comme prévu. Si l'utilisateur se déconnecte, le PC retombera alors dans le VLAN 4.
Info
Petite précision : la mise en place de l'authentification 802.1X sur le client ne bloque pas celui-ci si l'utilisateur l'utilise sur un réseau externe comme celui de son domicile en cas de télétravail.
👉 La suite
Maintenant que nous avons mis en place l'authentification 802.1X sur le réseau filaire, nous allons passer à sa mise en place sur le réseau sans fil avec entre autre le WPA Entreprise.
Nous verrons également plus tard que l'on peut aller plus loin afin d'attribuer des VLAN à des groupes d'utilisateurs spécifiques.