Notre nouvel objectif ici est de mettre en œuvre l’authentification des utilisateurs de pfSense depuis un contrôleur de domaine Windows Server, pour illustrer plus généralement le mécanisme d'authentification par LDAP sur un domaine Windows.
Plus précisément, il s’agit d’autoriser un accès (limité) sur pfSense pour une liste d’utilisateurs fournie via un fichier externe (tableur). Ces utilisateurs devront être importés dans l’AD via un script Powershell, dans un groupe de sécurité spécifique, et pfSense devra authentifier les accès depuis l’AD, via le protocole LDAP.
De plus, puisque depuis la version 2022 Windows Server n'accepte plus les accès LDAP standard, mais uniquement chiffrés LDAPS, nous serons aussi amenés à ajouter le rôle de PKI (Public Key Infrastructure) sur le Serveur Windows.
Ce TP doit être entrepris à la suite ce celui qui concerne : WinRM - administration distante de serveur Windows.
Nous repartons donc de ce schéma :
Rappel des modifications apportées lors du TP WinRM sur le mini-lab en mode Windows :
Si possible, il est recommandé de configurer le client Windows avec 8Go de RAM et 4 CPU.
Nous allons notamment indiquer à pfSense que le serveur DNS est désormais sur le contrôleur de domaine. Depuis l’interface webadmin de pfSense (sur le poste Windows client) :
apportez ces modifications :
Automatiquement, le serveur DHCP de pfSense ajuste ses paramètres pour propager ces infos sur les clients DHCP (voir dans menu Services > DHCP Server) :
Maintenant que pfSense est ajusté au domaine, nous pouvons rétablir les paramètres standard de l'interface réseau de Windows :
Afin de manipuler facilement les fichiers CSV, on télécharge et on installe le logiciel OnlyOffice sur notre client Windows.
L'installation se fait simplement, avec les options par défaut.
Lancez Powershell ISE avec l’élévation administrateur, et connectez-vous à distance sur le Serveur (contrôleur AD) :
# adaptez le nom du serveur selon votre contexte
Enter-PSSession -ComputerName "SRV-PM01"
Créez une OU (Unité d’Organisation) « Sécurité » à la racine de l’AD, avec une commande Powershell :
# adaptez les Domain Components (DC) selon votre propre domaine
New-ADOrganizationalUnit -Path "DC=pascal,DC=lan" -Name "Sécurité" -PassThru
Réponse :
City :
Country :
DistinguishedName : OU=Sécurité,DC=pascal,DC=lan
LinkedGroupPolicyObjects : {}
ManagedBy :
Name : Sécurité
ObjectClass : organizationalUnit
ObjectGUID : 9af31a60-3b4c-4946-aad5-88611fda00a2
PostalCode :
State :
StreetAddress :
On vérifie la présence de l’OU Sécurité dans l’arborescence AD :
Créez un groupe de sécurité rattaché à l'OU Sécurité, nommé précisément Observateurs PfSense :
# adaptez les Domain Components (DC) selon votre propre domaine
New-ADGroup -Name 'Observateurs pfSense' -GroupCategory 'Security' -GroupScope 'DomainLocal' -Path 'OU=Sécurité,DC=pascal,DC=lan' -Description 'Groupe de surveillance pfSense' -PassThru
Réponse :
DistinguishedName : CN=Observateurs pfSense,OU=Sécurité,DC=pascal,DC=lan
GroupCategory : Security
GroupScope : DomainLocal
Name : Observateurs pfSense
ObjectClass : group
ObjectGUID : 6caf5437-830a-48f7-bc86-7a6ab4fffba9
SamAccountName : Observateurs pfSense
SID : S-1-5-21-2014020534-3525384246-3471752833-1106
On obtient maintenant dans la console de l'AD (utiliser le bouton d’actualisation si nécessaire) :
Récupérez et enregistrez dans le dossier partagé M:
le fichier pfsense_users.xlsx qui contient la liste des utilisateurs à créer. Ce fichier peut être récupéré ici. Ouvrez-le avec OnlyOffice :
A l’aide d'OnlyOffice, personnalisez et enregistrez ce fichier au format CSV sur le dossier partagé. Par défaut, OnlyOffice utilise le format UTF-8
pour l’encodage de caractères, et la virgule comme séparateur (contrairement à MS Excel, qui utilise le point-virgule).
A partir de ce fichier, on va générer les utilisateurs correspondants dans le groupe Observateurs pfSense, grâce à un script Powershell. Les utilisateurs créés doivent correspondre à ce schéma :
g.eiffel
)Voici le script, à copier dans l'interface de PowerShell ISE :
$users = import-csv -path "\\SRV-PM01\Commun\pfsense_users.csv" -delimiter ","
foreach($user in $users) {
$gn=$user.Prénom
$sn=$user.Nom
$ou="OU=Sécurité,DC=pascal,DC=lan"
$SAM=$gn.Substring(0,1).ToLower() + "." + $sn.ToLower()
$Password=$user.Password
$secure_pwd = convertto-securestring $Password -asplaintext -force
$UPN = $SAM + "@pascal.lan"
$CN = $gn + " " + $sn
New-ADuser -displayName $CN -Surname $sn -Name $CN -givenname $gn -Path $ou -SamAccountName $SAM -AccountPassword $secure_pwd -PasswordNeverExpires $True -UserPrincipalName $UPN -Enabled $True
Add-ADGroupMember -Identity "Observateurs pfSense" -Members $SAM -PassThru
}
Vérifiez qu’il correspond bien aux critères et à vos informations, puis exécutez le script :
Attention ! il faut lancer le script en étant connecté sur le serveur (et non sur le client)
Le script est enregistré sur la machine cliente, le fichier CSV est enregistré sur le serveur. Le script va être lancé sur le serveur, via la connexion winRM.
Vérification de la liste des utilisateurs :
Vérification des attributs d’un utilisateur créé :
Comme évoqué au début de ce TP, depuis la version 2022, Windows Server n'accepte plus les accès LDAP standard, mais uniquement chiffrés LDAPS. Le plus simple pour ce cas (et bien d'autres en fait), est d'ajouter le rôle AD-CA dans le domaine. Nous allons l'installer sur notre Serveur Windows (une bonne pratique voudrait que l'on utilise un autre serveur dédié dans le domaine).
Depuis notre client Windows (connecté comme admin du domaine), on se connecte à distance (si ce n'est déjà fait) sur le serveur :
Enter-PSSession -ComputerName 'SRV-PM01'
On installe le rôle AD-CA :
Install-WindowsFeature -Name AD-Certificate, ADCS-Cert-Authority
Cette commande PowerShell installe deux fonctionnalités Windows Server liées aux services de certificats Active Directory (AD CS) :
AD-Certificate
: Installe les composants de base nécessaires pour la gestion des certificats dans un environnement Active Directory.ADCS-Cert-Authority
: Installe le rôle d'Autorité de Certification (CA), qui est le composant central permettant d'émettre, gérer et révoquer des certificats numériques dans votre infrastructure.On configure notre PKI :
# adaptez "NomDeVotreCA" en fonction de votre contexte
Install-AdcsCertificationAuthority -CAType EnterpriseRootCA -CACommonName "NomDeVotreCA" -KeyLength 2048 -HashAlgorithm SHA256 -ValidityPeriod Years -ValidityPeriodUnits 5
Cette commande PowerShell configure et installe l'Autorité de Certification avec les paramètres suivants :
-CAType EnterpriseRootCA
: Configure l'autorité de certification comme une CA racine d'entreprise, ce qui signifie qu'elle sera la première CA dans votre hiérarchie PKI et sera intégrée à votre Active Directory.-CACommonName "NomDeVotreCA"
: Définit le nom commun (CN) de votre autorité de certification, qui sera visible dans les certificats émis. Dans cet exemple, il faut remplacer "NomDeVotreCA" par le nom souhaité pour votre CA (je prendrai comme exemple pascal-root-CA)-KeyLength 2048
: Spécifie la taille de la clé cryptographique (2048 bits), ce qui représente un bon équilibre entre sécurité et performances. La valeur 4096 est plus sécurisée, mais impacte les performances (complexité).-HashAlgorithm SHA256
: Définit l'algorithme de hachage utilisé pour signer les certificats (SHA256 est considéré comme sécurisé et est recommandé).-ValidityPeriod Years
: Indique que la période de validité sera exprimée en années.-ValidityPeriodUnits 5
: Spécifie que le certificat racine sera valide pour une durée de 5 ans.Cette commande termine essentiellement la configuration initiale de votre autorité de certification d'entreprise. Après son exécution, votre CA sera opérationnelle et prête à émettre des certificats pour votre organisation selon les paramètres spécifiés.
Activez ensuite le modèle de certificat LDAPS :
# Activer le modèle de certificat "Contrôleur de domaine"
certutil -setcatemplates +DomainController
Cette commande ajoute le modèle de certificat "DomainController" à la liste des modèles que votre autorité de certification (CA) est autorisée à émettre. Le signe "+" indique l'ajout d'un modèle à la liste existante.
Son utilité :
Demander et installer automatiquement un certificat :
certutil -pulse
Cette commande force la publication immédiate de la liste de révocation de certificats (CRL) depuis l'autorité de certification. Elle déclenche le processus de publication sans attendre l'intervalle de publication régulier configuré sur la CA.
Pour configurer pfSense (pour qu'il accepte le domaine comme autorité de confiance racine), il nous faut exporter le certificat :
Get-ChildItem -Path Cert:\LocalMachine\Root
THUMBPRINT
par cette empreinte :$cert = Get-ChildItem -Path Cert:\LocalMachine\Root\THUMBPRINT
Export-Certificate -Cert $cert -FilePath \\SRV-PM01\commun\root-ca-cert.cer -Type CERT
certutil -encode \\SRV-PM01\commun\root-ca-cert.cer \\SRV-PM01\commun\root-ca-cert.pem
Nous aurons besoin de ce certificat pour configurer la connexion LDAPS de pfSense au contrôleur de domaine.
Nous allons désormais paramétrer pfSense pour que ces utilisateurs puissent accéder à quelques fonctions de supervision du firewall (nous nous limiterons au dashboard et à la liste des baux DHCP).
Sur le serveur, créez un user pfsense.connect
avec le mot de passe de votre choix (il doit être complexe, ne doit pas expirer et l'utilisateur ne peut pas le modifier). Ce compte servira à authentifier pfsense auprès du Domaine (via LDAP). Placez cet utilisateur dans l’OU Sécurité.
Ceci peut se faire graphiquement depuis la gestion de l'AD, ou par PowerShell :
New-ADUser -Name "pfsense.connect" -SamAccountName "pfsense.connect" -UserPrincipalName "pfsense.connect@pascal.lan" -Path "OU=Sécurité,DC=pascal,DC=lan" -AccountPassword (ConvertTo-SecureString "Azerty/123567" -AsPlainText -Force) -Enabled $true -PasswordNeverExpires $true -CannotChangePassword $true
Depuis l’interface d’administration web de pfSense, créez une nouvelle autorité et importez (par copier/coller) le certificat que l'on vient de générer, via le menu System > Certificates > Authorities :
Le nouveau certificat apparaît dans la liste :
Depuis l’interface d’administration web de pfSense, créer le serveur d’authentification dans le menu System > User Manager > Authentification Server :
Remplissez les différents champs selon les spécificités de notre configuration.
Quelques indications importantes :
636
car on fonctionne en LDAPSEntire Subtree
; avec cette option, pfSense cherchera dans toute l’arborescence sous le DN de base défini ci-dessous.DC=votre_nom,DC=lan
Bind anonymous
pour s'authentifier pour requête l'AD avec le compte créé pour cela (pfsense.connect
)
(get-aduser -filter 'samaccountname -eq "pfsense.connect"').DistinguishedName
CN=pfsense.connect,OU=Sécurité,DC=pascal,DC=lan
Bind credentials
de la page de configuration pfSense,Microsoft AD
; ceci fera correspondre correctement les champs pfSense aux champs LDAP de l’AD :
Authentication containers
: cliquer sur Select a container
permet de vérifier que la connexion au serveur est correcte ; choisir celui qui permettra de chercher dans le bon groupe (sécurité).
Créez un groupe pfSense correspondant au groupe des observateurs pfSense de l’AD :
Une fois le groupe créé, il faut ensuite le modifier pour pouvoir lui accorder des privilèges sur pfSense. Ici nous allons uniquement ajouter le droit d’affichage du dashboard et les baux DHCP :
Une fois la configuration de l’accès réalisée et le groupe créé, on peut tester la connexion avec le menu Diagnostics > Authentication (avec un des utilisateurs de notre liste) :
Le groupe Observateurs pfSense doit apparaître dans la fenêtre verte, c'est la preuve que pfSense associe bien cet utilisateur au groupe créé juste avant, avec les droits associés.
Ensuite, modifier et tester le mode d’authentification de pfSense en choisissant le serveur AD-DS :
Puis se connecter avec les identifiants d'un des utilisateurs autorisés :
Au terme de cette séquence, nous avons donc pu expérimenter l'authentification sécurisée associée à un contrôleur de domaine, avec notamment la mise en place de l'infrastructure à clés publiques (PKI) au sein du domaine. Ce scénario sera identique dans bien des contextes où l'authentification à un service est centralisée sur un domaine Active Directory.