Introduction

Partant d’un serveur LDAP configuré et fonctionnel, nous souhaitons mettre en place un portail captif qui utilisera LDAP pour l’authentification. Nous allons utiliser pfSense pour le portail et mettre en place un serveur FreeRADIUS pour faire le lien entre pfSense et openLDAP.

FreeRADIUS

Installation

Dans le but de simplifier l’installation, nous allons installer le serveur RADIUS sur la même machine que le serveur LDAP. Ainsi nous nous passerons de TLS. Le paquet à installer est freeradius.

Configuration

FreeRADIUS regroupe ses fichiers dans le dossier /etc/raddb. La première chose que nous allons faire est d’autoriser la machine pfSense à se connecter au serveur. On ajoute ceci au fichier /etc/raddb/clients.conf:

client 172.16.1.1 {
        shortname       = pfSense-server
        secret          = passphrase
}
Attention secret est une sorte de clé de chiffrement des communication entre les deux serveurs. Elle doit être aléatoire et longue d’au moins 8 caractères. Quant au fichier, il doit donc être lisible par root seulement.

Ensuite, on configure le client LDAP du serveur RADIUS. Pour cela, on modifie le fichier /etc/raddb/modules/ldap pour qu’il contienne ceci :

ldap {
        server = "localhost"
        identity = "cn=root,dc=arda"
        password = motDePasseRootLDAP
        basedn = "dc=arda"
        filter = "(uid=%{%{Stripped-User-Name}:-%{User-Name}})"
        ldap_connections_number = 5
        timeout = 4
        timelimit = 3
        net_timeout = 1
        tls {
                start_tls = no
        }
        dictionary_mapping = ${confdir}/ldap.attrmap
        edir_account_policy_check = no
}
Avertissement Ce fichier contient le mot de passe root LDAP en clair. Il est important qu’il ne soit lisible que par root.

Enfin, on se place dans le dossier /etc/raddb/sites-enabled. On efface tous les fichiers déjà présents (qui pour la plupart ne sont que des liens) et on y créé un nouveau fichier default avec ce contenu :

authorize {
        ldap
}
authenticate {
        Auth-Type LDAP {
                ldap
        }
}
preacct {
}
accounting {
}
session {
}
post-auth {
}
pre-proxy {
}
post-proxy {
}

Activation

On ajoute le démon radiusd à la liste des démons du /etc/rc.conf.

pfSense

Préparation

En premier lieu, on installe pfSense et on définit les adresses des interfaces, en activant si nécessaire un serveur DHCP. Tout ceci peut se faire très simplement avec la console pfSense. Puis, à l’aide d’une machine sur le LAN, on accède à l’interface web de pfSense.

Par défaut, l’utilisateur est admin et le mot de passe est pfsense. Une fois connecté, configurer la base du système avec l’outil Setup Wizard du menu System. Aller éventuellement modifier l’interface WAN pour ajouter une passerelle par défaut.

Génération des certificats

Pour que le portail soit sécurisé, on va utiliser une connexion HTTPS qui nécessite la création d’une autorité de certification, d’un certificat et d’une clé privée. pfSense inclut des outils permettant de les créer en quelques clics. Pour cela on se rend dans l’entrée Cert Manager du menu System.

Dans l’onglet CAs, créer un nouveau CA et indiquer Create an internal CA comme méthode. Compléter les informations et valider. Une fois créé, cliquer sur le bouton export ca sur la droite, et noter quelque part le contenu du champ Certificate data.

Dans l’onglet Certificates, créer un nouveau CA et indiquer Create an internal CA comme méthode. Dans le champ Certificate authority, vérifier que le certificat créé à l’instant est bien sélectionné. Compléter les informations et valider.

Important Le champ Common Name doit correspondre au nom DNS du serveur.

Une fois créé, cliquer sur le bouton export cert sur la droite pour récupérer le certificat. De même, cliquer sur export key pour récupérer la clé privée.

Activation

On se rend dans l’entrée Captive Portal du menu Services. On modifie au moins :

  • Enable captive portal coché

  • Interfaces : LAN

  • Authentication : RADIUS Authentication

  • IP address par l’IP du serveur RADIUS

  • Shared secret : la clé choisie lors de l’installation du serveur RADIUS

  • Enable HTTPS login coché

  • HTTPS server name correctement défini

  • HTTPS certificate avec le certificat généré

  • HTTPS private key avec la clé générée

  • HTTPS intermediate certificate avec le CA.

On clique sur Save, et voilà !

Opérations supplémentaires

Résoudre le domaine local

Dans le cas où le serveur pfSense utilise le DNS Forwarder, il se peut que le domaine local ne soit pas résolvable. Dans ce cas, on se rend sur la page d’administration du DNS Forwarder et on ajoute une nouvelle entrée dans le tableau du bas, dans laquelle on indique le domaine et le serveur DNS le résolvant.

Note sur le pare-feu

Par défaut, tous les clients situés sur le LAN ont accès à l’interface de gestion, même s’ils ne se sont pas authentifiés sur le portail. Les machines situées sur le WAN n’ont elles aucun accès au LAN.