C302

Challenge C302 24/02/2026

DebianpfSenseActive DirectoryBashDHCPDNSSSHRADIUS
Retour au cours

Challenge C302 24/02/2026

Pitch de l’exercice 🧑‍🏫

Challenge

Challenge C302

Cours C302.


Préparation de l’environnement

🗺️ Topologie du Labo (LAN : 10.0.0.0/24)

MachineIPRôle RéseauService & Port
pfSense10.0.0.1Passerelle & Client NASInitiateur AAA
srv-radius10.0.0.81Routeur d'authentificationFreeRADIUS (UDP 1812)
srv-ldap10.0.0.82Backend d'annuaireOpenLDAP (TCP 389)
LubuntuDHCPPoste de managementClient SSH / Web

Création des 2 serveurs

On installe 2 machines virtuelles Debian (debian-13.1.0-amd64-netinst.iso), pour le Serveur LDAP et le Serveur RADIUS, puis on les passe en IP statique

radius

IPradius

ldap

IPldap

Un ping entre les 2 pour voir si tout est fonctionnel et on peut faire la suite

ping

Les 2 VM ayant des erreurs de résolutions DNS lors d'apt upgrade on va edit le fichier de résolutions et rajouter les DNS

nano /etc/resolv.conf

  nameserver 10.0.0.1
  nameserver 8.8.8.8

Installation de LDAP

  • Installation du moteur ldap

sudo apt install slapd ldap-utils -y

  • Configuration du domaine

sudo dpkg-reconfigure slapd

  Omettre de configurer le serveur maintenant : Non
  Nom de domaine DNS : example.com
  Nom de l’organisation : Example Inc.
  Mot de passe admin : un mot de passe fort.
  Base de données : généralement MDB (default).
  Supprimer la base existante : Non
  Déplacer l'ancienne base : Oui

sudo systemctl status slapd

ok

Commande de test pour interroger l'annuaire

ldapsearch -x -LLL -H ldap:// -b dc=example,dc=com

search

Créer une "OU"

nano base_users.ldif

dn: ou=users,dc=example,dc=com
objectClass: organizationalUnit
ou: users

On injecte ce fichier dans la base LDAP

sudo ldapadd -x -D cn=admin,dc=example,dc=com -W -f base_users.ldif

Créer un "USER"

Hash du mot de passe avec slappasswd

hash

Puis nano newuser.ldif

dn: uid=jdupont,ou=users,dc=example,dc=com
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
uid: jdupont
sn: Dupont
givenName: Jean
cn: Jean Dupont
displayName: Jean Dupont
uidNumber: 1001
gidNumber: 1001
userPassword: {SSHA}le_hash_ici
loginShell: /bin/bash
homeDirectory: /home/jdupont

On injecte l'utilisateur dans la base

sudo ldapadd -x -D cn=admin,dc=example,dc=com -W -f newuser.ldif

inject

Le test de validation

ldapsearch -x -LLL -b dc=example,dc=com uid=jdupont

ok

Installer le serveur RADIUS

Il faut voir FreeRADIUS non pas comme un lourd serveur d'application, mais comme un simple "routeur de paquets AAA" (Authentication, Authorization, Accounting). Son seul travail sera de recevoir des trames sur le port UDP 1812, de lire ce qu'il y a dedans, et de router cette demande vers l'annuaire LDAP (10.0.0.82) pour vérifier si les credentials sont bons.

On installe le moteur FreeRADIUS, son module LDAP, et les outils de test réseau associés

apt update
apt install freeradius freeradius-ldap freeradius-utils -y

ok

Connecter RADIUS Ă  LDAP (ou AD)

Activer le module LDAP (Créer la route vers le backend)

Par défaut, FreeRADIUS possède de nombreux modules désactivés. On va "allumer" l'interface vers LDAP en créant un lien symbolique

ln -s /etc/freeradius/3.0/mods-available/ldap /etc/freeradius/3.0/mods-enabled/

Configurer le "Next Hop" (Le serveur LDAP) :

On va maintenant indiquer l'adresse IP de destination et les identifiants pour interroger la base.

nano /etc/freeradius/3.0/mods-enabled/ldap

ldap

Insérer le LDAP dans le flux AAA

Il faut maintenant dire au moteur principal d'utiliser cette nouvelle route LDAP lorsqu'une requĂŞte arrive sur le port UDP 1812

nano /etc/freeradius/3.0/sites-enabled/default

Section authorize { ... } on décommente devant -ldap

authenticate { ... } on décommente devant ldap

ldap

Configurer le client RADIUS

Par défaut, FreeRADIUS rejette silencieusement les trames UDP 1812 provenant d'IP inconnues. Il faut "déclarer" qui a le droit de l'interroger

Déclarer le réseau autorisé (Le Client)

nano /etc/freeradius/3.0/clients.conf

Tout en bas on va ajouter :

client lab_pfsense {
    ipaddr = 10.0.0.0/24
    secret = pfsense_secret
}

ipaddr = 10.0.0.0/24 : On autorise tout le LAN Segment (dont notre pfSense)

secret = pfsense_secret : C'est le mot de passe réseau (shared secret) qui chiffrera les échanges RADIUS.

On reboot systemctl restart freeradius

Tester l’authentification

On va simuler la requête que ferait le routeur pfSense ou le switch pour vérifier que toute la chaîne (Client -> RADIUS -> LDAP) fonctionne

radtest jdupont LE_MOT_DE_PASSE 10.0.0.81 0 pfsense_secret

test

Succès ✅

  • L'outil de test a gĂ©nĂ©rĂ© une trame Access-Request chiffrĂ©e grâce Ă  la secret partagĂ© pfsense_secret.

  • FreeRADIUS l'a interceptĂ©e sur le port UDP 1812, a identifiĂ© que le client Ă©tait autorisĂ©, et a routĂ© la demande d'authentification vers ton annuaire en suivant le "Next Hop" LDAP.

  • Le serveur LDAP (10.0.0.82) a reçu la requĂŞte, a interrogĂ© sa base de donnĂ©es pour trouver l'utilisateur jdupont, et a validĂ© que le mot de passe correspondait bien Ă  "XXX".

  • Le LDAP a donnĂ© son feu vert, et FreeRADIUS a encapsulĂ© le tout pour te renvoyer cet Access-Accept.

Déclarer le serveur RADIUS dans pfSense

pfSense va maintenant pouvoir déléguer la vérification des identifiants au "routeur AAA" (FreeRADIUS), qui lui-même ira interroger l'annuaire

On va ajouter un serveur d'authentification

auth

auth

Pour tester et valider on va dans la partie Diagnostics de pfSense

test

ok

L'architecture pfSense -> RADIUS -> LDAP est maintenant 100% fonctionnelle et validée en conditions réelles ✅

🚦 Le routage des trames (Résumé Couche 4/7)

  1. pfSense (10.0.0.1) reçoit une tentative de connexion.
  2. Il encapsule la requĂŞte (Access-Request) et l'envoie Ă  10.0.0.81:1812.
  3. Le RADIUS vérifie l'ACL (réseau autorisé) et route la vérification vers le Next Hop LDAP 10.0.0.82:389.
  4. Le LDAP confirme la validité du mot de passe.
  5. Le RADIUS renvoie l'Access-Accept final au pfSense pour ouvrir le port ou le tunnel.