Aller au contenu

🔐 Authentification 802.1X sur un réseau filaire

PacketFence et AD

📝 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é :

  1. Supplicant (client) : L'appareil ou l'utilisateur qui veut accéder au réseau (ex. : un PC portable).
  2. Authenticator (commutateur ou point d’accès) dit aussi NAS : Le "portier" qui contrôle l'accès au réseau.
  3. 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é :

  1. Authentication (Authentification) : Vérifier l'identité. Exemple : Login / mot de passe.
  2. Authorization (Autorisation) : Définir les permissions. Exemple : Accès à Internet ou à un VLAN.
  3. 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).

Configuration de l'auth. 802.1X sur le port 4
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 :

Intégration AD

Renseignement des paramètres AD :

Intégration AD

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

Intégration AD

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.

Intégration AD

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

Intégration AD

Configuration du Realm

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

Configuration Realm
Configuration Realm

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...

Configuration Realm

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

Configuration Realm

Faire de même avec le Realm NULL :

Configuration Realm

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 :

Source d'authentification AD
Source d'authentification AD

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 :

Source d'authentification AD

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

Source d'authentification AD

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

Source d'authentification AD

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 :

Source d'authentification AD

Authentification des machines

Ajoutez une nouvelle source d'authentification interne.

Source d'authentification AD

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).

Source d'authentification AD

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

Source d'authentification AD

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.

Profil de connxion
Profil de connxion
Profil de connxion

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.

Profil de connxion
Profil de connxion
Profil de connxion
Profil de connxion

Configuration du switch sur PacketFence

Profil de connxion
Profil de connxion

🖥️ 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.

Config Windows 802.1X

Ouvrez les propriétés de la carte réseau.

Configurez l'option d'authentification sur la carte réseau :

Config Windows 802.1X

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

Config Windows 802.1X

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..**

Config Windows 802.1X

Validez puis cliquez sur Paramètres supplémentaires

Config Windows 802.1X

Selectionnez Authentification de l'utilisateur ou de l'ordinateur

Config Windows 802.1X

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.

tail -f /usr/local/pf/logs/packetfence.log
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

Config Windows 802.1X

Notre machine est bien placée sur le VLAN 4.

Authentifions maintenant un utilisateur.

tail -f /usr/local/pf/logs/packetfence.log
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)
Config Windows 802.1X

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.