NAC avec OPNsense et FreeRADIUS : contrôle d'accès réseau par 802.1X
Configurer le contrôle d'accès réseau (NAC) avec FreeRADIUS et le protocole 802.1X sur OPNsense : authentification EAP-TLS, assignation VLAN dynamique, configuration des APs UniFi et switches managés. Guide complet pour BYOD, IoT et segmentation Zero Trust.
Sur mon infra BOTUM, le firewall OPNsense segmente le réseau en VLANs. Mais la segmentation seule ne suffit pas — n'importe quel appareil peut se connecter au WiFi ou brancher sur un port réseau et obtenir une IP dans le bon VLAN. C'est là qu'intervient le Network Access Control (NAC) avec le protocole 802.1X : chaque appareil doit s'authentifier avant d'obtenir l'accès réseau, et FreeRADIUS décide dans quel VLAN il est placé.
Ce billet est le sixième de la série Stack OPNsense Enterprise. Voir aussi : Billet 2 : VLANs Zero Trust et Billet 4 : WiFi AP Management.
Qu'est-ce que le NAC et pourquoi 802.1X ?
Le Network Access Control (NAC) est une approche de sécurité réseau qui contrôle quels appareils peuvent accéder à votre réseau — et dans quel segment VLAN ils sont placés. Sans NAC, n'importe quel appareil branché sur un port réseau ou connecté au WiFi obtient accès sans vérification d'identité.
802.1X est le standard IEEE qui permet cette authentification au niveau de la couche 2 (liaison de données). Avant qu'un appareil obtienne une adresse IP, il doit prouver son identité via un serveur RADIUS (Remote Authentication Dial-In User Service). Le flux implique trois acteurs :
- Supplicant : l'appareil client (laptop, téléphone, IoT) qui demande l'accès
- Authenticator : le switch ou AP WiFi qui relaie l'échange EAP vers le serveur RADIUS
- Authentication Server : FreeRADIUS sur OPNsense, qui accepte ou rejette la connexion

Prérequis
- OPNsense opérationnel — voir Billet 1 : Installation dans Proxmox
- VLANs configurés (Employees, IoT, Guests) — voir Billet 2 : VLANs Zero Trust
- APs UniFi ou Omada compatibles 802.1X — voir Billet 4 : WiFi AP Management
- Switches managés avec support 802.1X (UniFi, TP-Link Omada, Cisco)
- Accès SSH admin à OPNsense
- Optionnel : autorité de certification (CA) interne pour EAP-TLS
Installer le plugin FreeRADIUS sur OPNsense
OPNsense propose le plugin os-freeradius via son gestionnaire de plugins. Ce plugin installe FreeRADIUS directement sur le routeur, sans serveur externe nécessaire.
# OPNsense GUI :
# System → Firmware → Plugins
# Rechercher : freeradius
# Installer : os-freeradius (clic "+")
# Après installation, recharger la page.
# Nouveau menu : Services → FreeRADIUS
# Activer le service :
# Services → FreeRADIUS → General
# Enable FreeRADIUS : coché
# Interface : LAN
# Port RADIUS Auth : 1812
# Port RADIUS Acct : 1813
# Cliquer Save → Apply

Configurer FreeRADIUS : utilisateurs, certificats, EAP-TLS
Créer les clients RADIUS (NAS)
Les "clients" RADIUS sont les switches et APs qui enverront les requêtes d'authentification. Chaque client a un secret partagé.
# Services → FreeRADIUS → Clients → Add
# Name : unifi-ap-01
# IP/CIDR : 192.168.X.X/32 (IP de l'AP ou switch)
# Secret : [chaîne aléatoire sécurisée]
# NAS Type: Other
# Répéter pour chaque AP et switch managé
Créer les utilisateurs et assigner les VLANs
Pour les authentifications PEAP-MSCHAPv2, créer des utilisateurs dans FreeRADIUS avec assignation VLAN dynamique :
# Services → FreeRADIUS → Users → Add
# Username : jean.dupont
# Password : [mot de passe fort]
# VLAN ID : 10 (VLAN Employés)
# Services → FreeRADIUS → Users → Add
# Username : device-iot-01
# Password : [mot de passe fort]
# VLAN ID : 30 (VLAN IoT)
# Le RADIUS envoie Tunnel-Private-Group-Id au switch/AP
# L'appareil est automatiquement placé dans le bon VLAN
Configurer EAP-TLS avec certificats
EAP-TLS est la méthode la plus sécurisée : l'authentification utilise des certificats X.509, sans mot de passe. Configurer une CA interne dans OPNsense d'abord :
# 1. Créer une CA interne :
# System → Cert. Manager → Authorities → Add
# Name : BOTUM-Internal-CA
# Key Type : RSA 4096
# Digest : SHA256
# Lifetime : 3650 jours
# 2. Créer le certificat serveur FreeRADIUS :
# System → Cert. Manager → Certificates → Add
# Name : freeradius-server-cert
# Authority : BOTUM-Internal-CA
# Type : Server Certificate
# 3. Configurer EAP dans FreeRADIUS :
# Services → FreeRADIUS → EAP
# Certificate : freeradius-server-cert
# CA : BOTUM-Internal-CA
# EAP Type : TLS + PEAP
# Inner Method : MSCHAPv2 (pour PEAP sans certificat client)

Configurer les APs UniFi/Omada pour 802.1X
Dans UniFi Network Controller, configurer le réseau WiFi pour utiliser WPA-Enterprise (802.1X) au lieu de WPA-Personal :
# UniFi Controller → Settings → WiFi → Add Network
# Name (SSID) : BOTUM-Corp
# Security : WPA Enterprise ← (pas WPA Personal)
# RADIUS Profile : Créer nouveau
# RADIUS Profile :
# Auth Server IP : [IP OPNsense LAN, ex. 192.168.1.1]
# Auth Server Port : 1812
# Auth Server Password : [secret configuré dans FreeRADIUS]
# Le RADIUS renverra le VLAN via Tunnel-Private-Group-Id
# Appliquer sur les APs corporate (pas le WiFi invités)
Configurer les switches (trunk + access 802.1X)
Sur un switch managé, activer 802.1X par port pour les ports d'accès :
# UniFi Switch — Port Profile avec 802.1X :
# Settings → Profiles → Switch Port Profiles → Add
# 802.1X Control : auto
# RADIUS Profile : [profil RADIUS]
# VLAN par défaut : VLAN 99 (quarantaine)
# VLAN post-auth : Assigné par RADIUS dynamiquement
# Référence générique Cisco IOS :
# interface GigabitEthernet0/1
# switchport mode access
# switchport access vlan 99 ← VLAN quarantaine par défaut
# dot1x pae authenticator
# authentication port-control auto
# authentication order dot1x mab
# spanning-tree portfast

Tester : authentification réussie + rejet
Test avec radtest (CLI)
# Sur OPNsense (SSH ou System → Shell) :
radtest jean.dupont [mot_de_passe] 127.0.0.1 0 [shared_secret]
# Résultat attendu (authentification réussie) :
# Sent Access-Request Id 1 from 127.0.0.1:xxxxx to 127.0.0.1:1812
# Received Access-Accept Id 1 from 127.0.0.1:1812
# Tunnel-Private-Group-Id = "10" ← VLAN 10 assigné !
# Session-Timeout = 28800
# Test d'un device NON AUTORISÉ :
radtest intrus wrongpassword 127.0.0.1 0 [shared_secret]
# Résultat :
# Received Access-Reject Id 2 from 127.0.0.1:1812 ✓ bloqué
Vérification du placement VLAN
# Après authentification réussie, vérifier l'IP obtenue :
# Appareil employé → IP dans 192.168.10.x (VLAN 10 ✓)
# Appareil IoT → IP dans 192.168.30.x (VLAN 30 ✓)
# Appareil inconnu → IP dans 192.168.99.x (VLAN 99 quarantaine)
# ou rejeté complètement
# Logs FreeRADIUS en temps réel :
# Services → FreeRADIUS → Log File
# Filtrer Accept/Reject pour audit complet

Cas d'usage : BYOD, IoT, employés vs invités
Cette architecture NAC gère automatiquement plusieurs types d'appareils :
- Employés (VLAN 10) : laptops corporate avec certificat EAP-TLS ou compte PEAP → accès réseau interne complet
- BYOD — Bring Your Own Device (VLAN 20) : appareils personnels avec compte PEAP → accès internet uniquement, pas aux serveurs internes
- IoT (VLAN 30) : caméras, capteurs, imprimantes via MAC Authentication Bypass (MAB) + compte dédié → isolés dans leur VLAN
- Invités (VLAN 99) : portail captif ou SSID séparé sans 802.1X → accès internet filtré
- Appareils inconnus : rejet total ou VLAN quarantaine selon la politique de sécurité
La combinaison NAC + VLANs (voir Billet 2) + APs UniFi (voir Billet 4) crée une infrastructure Zero Trust complète où chaque appareil est vérifié avant d'accéder au réseau.
Prochaines étapes → Billet 7 : Suricata IDS/IPS
Le Billet 7 couvrira Suricata IDS/IPS sur OPNsense : détection d'intrusion en temps réel sur le trafic réseau, règles Emerging Threats, et intégration avec CrowdSec pour une protection en profondeur. Combiné avec le NAC 802.1X de ce billet, vous aurez une stack de sécurité complète et Enterprise-grade.
Téléchargez ce guide en PDF pour le consulter hors ligne.
⬇ Télécharger le guide (PDF)🚀 Aller plus loin avec BOTUM
Ce guide couvre les bases. En production, chaque environnement a ses spécificités. Les équipes BOTUM accompagnent les organisations dans le déploiement, la configuration avancée et la sécurisation de leur infrastructure. Si vous avez un projet, parlons-en.
Discuter de votre projet →