pfSense 2.3 : Administration déléguée avec utilisateurs Active Directory

I. Présentation

J'ai remis un peu les mains dans pfSense alors j'en profite pour vous écrire ce tutoriel. Cet outil open source est capable de se connecter à un annuaire LDAP, en l'occurrence ici l'Active Directory de Microsoft, afin de centraliser l'authentification auprès de différents services comme l'accès à l'interface d'administration, l'accès VPN ou encore la connexion au portail captif. Bien que dans certains cas, le point de liaison entre pfSense et l'Active Directory sera Radius.

Avec pfSense, il est possible de déclarer la connexion à un AD pour authentifier les utilisateurs (certains utilisateurs, pas tous), pour déléguer l'administration du pare-feu. Par exemple, on va définir un groupe qui aura le droit de configurer la partie portail captif du pare-feu, on va attribuer des droits à un groupe, et ce groupe correspond à un groupe de l'AD. On peut avoir un second groupe qui pourra seulement accéder aux logs du pare-feu, par exemple.

On pourrait tout à fait créer des groupes locaux sur pfSense, avec des utilisateurs locaux, mais c'est quand même plus sympa d'interroger directement l'AD pour ne pas avoir à subir les changements de login et/ou de mot de passe. En plus, ce n'est pas monstrueux comme config.

En résumé, on va :

  • Déclarer l'annuaire Active Directory sur pfSense (on part du principe où vous avez un AD opérationnel)
  • Tester l'authentification
  • Déclarer un groupe dans pfSense pour faire le lien avec l'AD
  • Attribuer des droits à ce groupe
  • Définir notre serveur AD pour l'authentification
  • Tester la connexion à la WebGUI avec un compte AD

II. Déclarer l'annuaire Active Directory sur pfSense

Connectez-vous à la WebGUI de votre pfSense avec un compte administrateur.

Cliquez sur le bouton "System" puis "User Manager" qui permet de gérer les utilisateurs et les groupes pfSense, ainsi que de configurer un serveur d'authentification.

pfsense-auth-ad-1

Cliquez ensuite sur "Authentication Servers".

pfsense-auth-ad-2

Les trois copies d'écran qui suivent font partie de la même page de configuration. Tous les paramètres n'ont pas besoin d'être modifiés, voyons cela ensemble.

  • Descriptive name : Indiquez un nom pour ce serveur, je vous conseille d'indiquer le domaine
  • Type : Indiquez "LDAP" qui est le choix par défaut de pfSense
  • Hostname or IP address : Si le pfSense est capable de résoudre le nom DNS de votre contrôleur de domaine, indiquez le nom FQDN comme je l'ai fait dans mon exemple. Mais, vous pouvez aussi indiquer l'IP simplement.

Il n'est pas nécessaire de modifier les autres paramètres, à moins que vous souhaitiez utiliser un certificat pour chiffrer les échanges, ce qui est conseillé bien entendu.

Note : Mon pfSense connait mon AD en tant que DNS, ce qui permet de résoudre le nom adds-01.it-connect.local, mais vous pouvez utiliser une adresse IP.

C'est tout pour cette première partie.

pfsense-auth-ad-3

Voici la suite du paramétrage :

  • Search Scope : Laissez "Entire Subtree" pour le scope de recherche, puis pour la "Base DN" indiquez la racine de votre AD en prenant exemple sur ce que j'ai fait pour le domaine "it-connect.local".
  • Authentication containers : Indiquez une ou plusieurs OU dans lesquelles pfSense peut regarder pour trouver les utilisateurs qui tentent de se connecter. Remplissez au moins une valeur et ensuite cliquez sur "Select a container" vous pourrez prendre d'autres OU si besoin.

Ensuite décochez l'option de "Bind anonymous" on va plutôt s'authentifier pour requête l'AD. Au préalable, j'ai créé un compte dans l'AD qui est simple utilisateur et qui a pour SamAccountName (login) : pfsense.connect

Il faut indiquer le DN de cet utilisateur, si l'écriture d'un DN vous semble trop compliqué, ou aussi pour éviter les fautes de saisies... Vous pouvez requêter directement par PowerShell sur votre AD (il suffit d'adapter le login) :

(get-aduser -filter 'samaccountname -eq "pfsense.connect"').DistinguishedName

Copiez ensuite la valeur retournée dans le champ "Bind credentials" de la conf pfSense, puis sur le champ juste à droite indiquez le mot de passe associé à ce compte. D'ailleurs, je suis surpris que le mot de passe s'affiche en clair !!!

pfsense-auth-ad-4

Enfin, dernière partie de la conf, on tient le bon bout ! 🙂

Vous pouvez seulement indiquer "group" à la place de "posixGroup", et veillez à ne pas cocher l'option "LDAP Server uses RFC 2307 style group membership" sinon pfSense ne pourra pas récupérer le nom du groupe auquel appartient votre utilisateur.

pfsense-auth-ad-5

Sauvegardez la configuration avec le bouton "Save".

III. Tester l'authentification AD

Avant de tester l'authentification avec l'outil de diag intégré à pfSense, je vous montre une copie d'écran de mon AD, ça peut permettre de mieux visualiser ma config. Vous verrez que j'ai un compte "pfsense.connect" que j'ai utilisé pour que pfSense puisse interroger l'AD, puis le groupe "pfSenseAccess" contient les utilisateurs qui doivent avoir accès à pfSense.

pfsense-auth-ad-17

Dans le menu "Diagnostics", cliquez sur "Authentication".

pfsense-auth-ad-6

Choisissez votre AD comme serveur d'authentification puis tester un login et un mot de passe qui est censé fonctionner.

pfsense-auth-ad-7

Cliquez sur "Test", si tout est OK vous devriez obtenir ce message :

pfsense-auth-ad-8

Si c'est le cas, bravo ! Vous pouvez passer à la suite.

IV. Déclarer le groupe local dans pfSense

Toujours dans pfSense, il faut que l'on crée un groupe local qui aura le même nom que le groupe Active Directory, ceci permettra à pfSense de faire le lien entre les membres du groupe Active Directory et les droits positionnés sur le groupe pfSense.

Dans System, User Manager, accédez à l'onglet "Groups" et cliquez sur "Add".

pfsense-auth-ad-9

Nommez ce groupe comme celui de l'AD, donc dans mon cas je note "pfSenseAccess" mais ça n'empêche pas de préciser dans la description qu'il s'agit d'un groupe AD pour le différencier, la description peut être personnalisée.

Au niveau du scope, lorsqu'il s'agit d'un groupe Active Directory, il faut normalement indiquer "Remote" à la place de "Local" mais je n'ai pas vu de réelle différence selon le choix du scope.

Enfin, n'ajoutez aucun membre dans ce groupe et validez.

pfsense-auth-ad-10

Maintenant que le groupe est créé, on va lui donner des droits.

V. Attribuer des droits au groupe local

Toujours dans la gestion des groupes, cliquez sur l'icône en forme de crayon pour éditer le groupe fraîchement créé.

pfsense-auth-ad-11

Descendez au niveau de la section "Assigned Privileges" et cliquez sur "Add".

pfsense-auth-ad-12

Ensuite, toute la liste des privilèges apparaît, vous verrez que c'est vraiment flexible, on peut gérer finement les droits. C'est intéressant pour avoir une délégation précise. Dans cet exemple, si l'on veut que ce groupe soit capable de gérer la partie "Portail Captif", voici ce qu'il faut sélectionner :

pfsense-auth-ad-13

On aurait pu ajouter d'autres privilèges pour accéder à la partie log du portail captif. Cliquez sur "Save" dès lors que votre sélection est effectuée.

VI. Définir notre serveur AD pour l'authentification

Cette étape de la configuration est indispensable sinon la connexion à pfSense s'appuiera sur la base locale et non sur l'AD. Toujours dans System / User Manager / Settings, définissez votre AD, par exemple "it-connect.local" comme serveur d'authentification. Puis, sauvegardez.

pfsense-auth-ad-14

Cette étape est déjà terminée et elle clôture la configuration du pfSense, maintenant il va falloir tester cette config.

VII. Tester la connexion à la WebGUI pfSense avec un compte AD

Ouvrez un navigateur et accédez à la page de connexion de pfSense. Ensuite, tentez de vous connecter avec un compte AD :

pfsense-auth-ad-15

Normalement, une fois connecté, vous devriez avoir accès seulement à la partie "Captive Portal" sous "Services", tous les autres menus sont vides.

pfsense-auth-ad-16

Voilà, ce tutoriel est terminé, vous pouvez désormais déléguer l'administration de votre pfSense en s'appuyant sur des comptes AD. C'est important d'utiliser des comptes distincts pour l'administration pour savoir qui fait quoi.

Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Partager sur Google+ Envoyer par mail

Florian Burnel

Co-Fondateur d'IT-Connect, je souhaite partager mes connaissances et expériences avec vous, et comme la veille techno' est importante je partage aussi des actus.

florian a publié 1601 articles sur IT-Connect.See all posts by florian

5 réactions sur “pfSense 2.3 : Administration déléguée avec utilisateurs Active Directory

  • 22/02/2017 à 22:03
    Permalink

    Super tuto très clair qui m’a fait déterrer une VM sous W2K8 pour tester !
    J’ai juste une petite question : est-ce possible de refuser l’authentification à un utilisateur non membre du groupe « pfSenseAccess » ?

    Sauf erreur de ma part, dans ce cas un utilisateur non membre du groupe n’a aucun droits mais peut quand même s’authentifier.

    Répondre
    • 22/02/2017 à 22:08
      Permalink

      Autant pour moi !
      L’authentification d’un utilisateur non membre du groupe « pfSenseAccess » fonctionne dans la page de diagnostic mais lors de l’authentification réelle on a le message « No page assigned to this user! Click here to logout. » Parfait !

      Répondre
      • 22/02/2017 à 22:11
        Permalink

        Salut Alexis,

        Tu as trouvé toi-même la réponse à ta question à ce que je vois, merci d’avoir partagé ton retour ! 🙂
        Amuse toi bien sur pfSense !

        Bonne soirée
        Florian

        Répondre
  • 03/03/2017 à 17:05
    Permalink

    Salut!

    Avant tout merci pour le boulot que tu fais! ça m’as sauvé plus d’une fois 😉

    Lorsque tu renseignes « group » à la place de « posixgroup » quel est l’avantage?
    Car j’ai un pfsense configuré avec un AD et plusieurs groupes pour différents niveaux d’administration et je n’ai pas vu de différence sur la liaison entre les 2.

    Merci à toi
    Damien

    Répondre
  • 20/06/2017 à 17:52
    Permalink

    Merci pour ce tuto, je confirme qu’il fonctionne bien. Je précise que sur le « bind credential » tu peux très bien utiliser le format :
    it-connect\pfsense.connect<li ou pfsense.connect@it-connect.local ou simlement pfsense.connect si tu n’as qu’un seul domaine AD

    🙂

    Répondre

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *