Faire fonctionner FreeRadius avec Active Directory

Suite au plantage de mon NAS XPenology (2 HDD morts sur un volume RAID5, ça ne pardonne pas) qui me servait entre autres fonctions de RADIUS, je me suis mis en quête d’un serveur RADIUS performant et simple à configurer.

Je suis tombé sur Zentyal qui est superbe, mais leur RADIUS ne fonctionne plus depuis la version 3.4 et ils l’ont même supprimé sur la version 4.0.

C’est alors que je me suis résigné à utiliser Freeradius et à utiliser mes compétences de linuxien. Mais comment faire pour permettre à Freeradius de dialoguer avec mon Active Directory sans m’arracher les cheveux ? J’ai trouvé plein de tutoriels sur le web, mais aucun ne s’accordait … J’ai donc fait un mix de tout cela, ça fonctionne à merveille et je vous le partage si ça peut vous aider.

Ma configuration :

  • VM Ubuntu Server 14.04.2 sous Hyper-V 2012
  • Freeradius 2 et Samba 4
  • 2 points d’accès Ubiquiti Unifi AP
  • 1 point d’accès Ubiquiti Unifi AP Outdoor
  • DC sous Windows Server 2012r2

1. Préparation

Utilisez une installation fraîche d’Ubuntu Server 14.04 sur une VM et installez les paquets ssh, samba, freeradius et krb5-user ainsi que leurs dépendances.

Installez PuTTy sur votre machine Windows pour plus de simplicité et effectuez les modifications en étant connecté en SSH.

J’utilise vim mais vous pouvez utiliser nano, à chacun son éditeur préféré.

Modifiez les valeurs correspondant à ma configuration réseau / domaine par les vôtres !!!

J’utilise Freeradius 2, les chemins d’accès peuvent différer si vous utilisez Freeradius 3.

 

2. Configuration initiale du serveur

 

A. Configurer une adresse IP fixe

Connectez-vous sur la VM depuis le gestionnaire Hyper-V.

Ouvrez un terminal (CTRL + ALT + T).

sudo vi /etc/network/interfaces

Modifiez le fichier de façon à configurer une IP fixe sur l’interface réseau qui sera utilisée.

auto eth0
 iface eth0 inet static
 address 192.168.1.250
 netmask 255.255.255.0
 gateway 192.168.1.254
 dns-nameservers 192.168.1.5
 dns-search superfloup.intranet

Enregistrez et quittez vi.

 Déconnectez-vous de la VM mais ne pas l’éteindre.

 B. Corriger les bugs

 Connectez-vous en SSH sur la VM.

 sudo pam-auh-update (optionnel)

 Désactivez “SMB password synchronisation” pour éviter le bug de fuite mémoire #8449 en attendant que le patch soit poussé sur nos machines.

 sudo vi /etc/hosts

 Modifiez la ligne localhost :

 127.0.0.1 radius.superfloup.intranet RADIUS localhost

 Enregistrez et quittez vi.

 sudo vi /etc/init/winbind.conf

 Modifiez le fichier, pour corriger le bug #1330220.

pre-start script
test -x /usr/sbin/winbindd || exit 0
mkdir -p /var/run/samba/winbindd_privileged
chgrp winbindd_priv /var/run/samba/winbindd_privileged
chmod 0750 /var/run/samba/winbindd_privileged
end script

En

pre-start script
test -x /usr/sbin/winbindd || exit 0
mkdir -p /var/lib/samba/winbindd_privileged
chgrp winbindd_priv /var/lib/samba/winbindd_privileged
chmod 0750 /var/lib/samba/winbindd_privileged
end script

Enregistrez et quittez vi.

adduser freerad winbindd_priv

 Redémarrez la VM et prenez un snapshot, nous avons là une bonne base fonctionnelle.

 3. Créer la configuration des clients

 Connectez-vous en SSH.

 sudo /etc/freeradius/clients.conf

 Ajoutez à la fin du fichier :

 client 192.168.1.251 {
secret          = sharedsecret
shortname       = ap-superfloup-3
}
client 192.168.1.252 {
secret          = sharedsecret
shortname       = ap-superfloup-2
}
client 192.168.1.253 {
secret          = sharedsecret
shortname       = ap-superfloup-1
}

Enregistrez et quittez vi.

 4. Configurer PAP pour tester Freeradius

 Créez un utilisateur factice qui va nous servir pour tester.

 sudo vi /etc/freeradius/users

 Ajoutez en haut du fichier

 test Cleartext-Password := “hello”

 Enregistrez et quittez vi.

 Arrêtez le service freeradius.

 sudo service freeradius stop

Ou si ça ne fonctionne pas

sudo killall freeradius

 Démarrez freeradius en mode debugging.

 sudo freeradius -X

 Si tout s’est bien passé, la console doit vous renvoyer le message Ready to process requests. Si un message d’erreur apparaît, essayer la deuxième méthode pour arrêter le service freeradius.

 Ouvrez une deuxième session SSH vers votre VM.

 Testez le bon fonctionnement de l’authentification PAP en tapant :

 radtest test hello localhost 0 testing123

 Si tout se passe bien, vous devriez voir apparaître sur le premier SSH (freeradius -X) le message  Access-Accept et sur le second terminal (radtest) rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, length=20.

 Cela signifie que tout s’est passé correctement et que vous pouvez passer à la suite.

 5. Configurer l’authentification avec Active Directory

 Commencez par supprimer l’utilisateur factice que nous avons créé.

 sudo vi /etc/freeradius/users

 Supprimez la ligne.

 test Cleartext-Password := “hello”

 Enregistrez et quittez vi.

Vous allez configurer Samba pour qu’il utilise votre Active Directory comme une authentification Oracle et non comme une base LDAP.

 Sauvegardez le fichier smb.conf.

 sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak

 Effacez le fichier smb.conf.

 sudo rm /etc/samba/smb.conf

 Modifiez le fichier smb.conf pour qu’il pointe vers votre domaine.

 sudo vi /etc/samba/smb.conf

 Ajoutez le contenu suivant :

 # workgroup = NT-Domain-Name
workgroup = SUPERFLOUP
...
# Security mode. Most people will want user level security. See
# security_level.txt for details.
security = ads
# Use password server option only with security = server
password server = dc.superfloup.intranet
...
realm = superfloup.intranet
 # Symbol used to separate DOMAIN and user/group
winbind separator = /

Enregistrez et quittez vi.

 Sauvegardez le fichier krb5.conf.

 sudo cp /etc/krb5.conf /etc/krb5.conf.bak

 Effacez le fichier krb5.conf.

 sudo rm /etc/krb5.conf

 Modifiez le fichier krb5.conf pour qu’il pointe vers votre domaine.

 sudo vi /etc/krb5.conf

 Ajoutez le contenu suivant :

 [libdefaults]
default_realm = superfloup.intranet 

v4_instance_resolve = false
v4_name_convert = {
host = {
rcmd = host
ftp = ftp
}
plain = {
something = something-else
}
}
fcc-mit-ticketflags = true 
[realms]
SUPERFLOUP = {
kdc = dc.superfloup.intranet
admin_server = dc.superfloup.intranet
default_domain = dc.superfloup.intranet
} 

Enregistrez et quittez vi.

 Maintenant, vous allez joindre votre radius au domaine. Si ce n’est pas encore fait, créez un compte ordinateur pour votre radius dans votre Active Directory.

 Redémarrez les services.

 sudo service winbind restart
sudo service smbd restart
sudo service nmbd restart

Joignez le radius à votre domaine à l’aide d’un compte administrateur du domaine.

 sudo net join -U compte_admin

 Entrez le mot de passe lorsqu’il vous sera demandé.

 Si tout a bien été configuré précédemment, vous obtiendrez le message Joined ‘RADIUS’ to realm ‘superfloup.intranet’. Dans le cas contraire, vérifiez bien les étapes précédentes.

 Vérifiez qu’un utilisateur du domaine puisse être authentifié.

 wbinfo -a user%password

 Vous devriez recevoir le message Authentication succeeded.

 Vérifiez que l’authentification fonctionne avec ntlm_auth qui sera utilisé par Freeradius.

 ntlm_auth --request-nt-key --domain=SUPERFLOUP --username=user --password=password

 La console vous renverra le message de succès NT_STATUS_OK suivi de la NT_KEY nécessaire pour effectuer l’authentification MS-CHAP par Freeradius.

 6. Configurer Freeradius pour l’utilisation de ntlm_auth

 Vous avez vérifié que Samba est installé correctement et fonctionne et que ntlm_auth fonctionne aussi. Vous allez maintenant mettre en place l’utilisation de ntlm_auth par Freeradius. Pour les besoins des tests, vous utiliserez le module Exec.

 Modifiez le fichier ntlm_auth.

 sudo vi /etc/freeradius/modules/ntlm_auth

 Modifiez le fichier comme ceci :

 exec ntlm_auth {
wait = yes
program = "/usr/bin/ntlm_auth --request-nt-key --domain=SUPERFLOUP --username=%{mschap:User-Name} --password=%{User-Password}"
} 

Enregistrez et quittez vi.

 Cette configuration demande au serveur d’utiliser le programme ntlm_auth avec l’identifiant et le mot de passe saisis lors de l’Access-Request.

 Vous devez maintenant ajouter ntlm_auth comme méthode d’authentification dans les fichiers /etc/freeradius/sites-enabled/default et /etc/freeradius/sites-enabled/inner-tunnel.

 sudo vi /etc/freeradius/sites-enabled/default

 Ajoutez ces lignes dans la partie Authenticate :

Auth-Type ntlm_auth{
ntlm_auth
}

 Enregistrez et quittez vi.

 sudo vi /etc/freeradius/sites-enabled/inner-tunnel

 Ajoutez ces lignes dans la partie Authenticate :

 Auth-Type ntlm_auth{
ntlm_auth
}

 Enregistrez et quittez vi.

Pour pouvoir tester le bon fonctionnement, vous allez modifier le fichier users.

 sudo vi /etc/freeradius/users

 Ajoutez tout en haut du fichier :

 DEFAULT     Auth-Type = ntlm_auth

 Enregistrez et quittez vi.

 Cette ligne force l’authentification ntlm_auth pour tous les utilisateurs et ne doit être utilisée que pour les tests. Pensez donc bien à la supprimer une fois le test terminé.

 Arrêtez le service freeradius.

 sudo service freeradius stop

ou si ça ne fonctionne pas

 sudo killall freeradius

 Démarrez freeradius en mode debugging.

 sudo freeradius -X

 Si tout s’est bien passé, la console doit vous renvoyer le message Ready to process requests. Si un message d’erreur apparaît, essayer la deuxième méthode pour arrêter le service freeradius.

 Ouvrez une deuxième session SSH vers votre VM.

 Testez le bon fonctionnement de l’authentification ntlm_auth en tapant :

 radtest username password localhost 0 testing123

 Si tout se passe bien, vous devriez voir apparaître sur le premier SSH (freeradius -X) le message  Access-Accept et sur le second terminal (radtest) rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, length=20.

Cela signifie que tout s’est passé correctement et que vous pouvez passer à la suite.

7. Configurer Freeradius pour l’utilisation de ntlm_auth avec MS-CHAP

 Avant toute chose, supprimez la ligne que nous avons ajouté dans le fichier users.

 sudo vi /etc/freeradius/users

 Supprimez la ligne :

 DEFAULT     Auth-Type = ntlm_auth

 Enregistrez et quittez vi.

 Maintenant que tout est configuré correctement, mettre en place l’identification MS-CHAP est très facile, vous n’avez que le fichier mschap à modifier.

 sudo vi /etc/freeradius/modules/mschap

 Cherchez la ligne commençant par ntlm_auth = et modifiez la comme suit :

 ntlm_auth = "/usr/bin/ntlm_auth --request-nt-key --username=%{mschap:User-Name:-None} --domain=%{%{mschap:NT-Domain}:-SUPERFLOUP} --challenge=%{mschap:Challenge:-00} --nt-response=%{mschap:NT-Response:-00} --require-membership-of=SUPERFLOUP/Wifi"

 Enregistrez et quittez vi.

 Attention !!! Le paramètre –require-membership-of=SUPERFLOUP/Wifi vérifie l’appartenance de l’utilisateur saisi lors de l’Access-Request à un groupe de votre domaine. Pensez donc bien à faire de votre compte de test un membre du groupe désigné ici.

 Testez maintenant le bon fonctionnement grâce à la commande radtest.

 Arrêtez le service freeradius.

 sudo service freeradius stop

ou si ça ne fonctionne pas

sudo killall freeradius

 Démarrez freeradius en mode debugging.

 sudo freeradius -X

 Si tout s’est bien passé, la console doit vous renvoyer le message Ready to process requests. Si un message d’erreur apparaît, essayer la deuxième méthode pour arrêter le service freeradius.

 Ouvrez une deuxième session SSH vers votre VM.

 Testez le bon fonctionnement de l’authentification MS-CHAP en tapant :

 radtest -t mschap username password localhost 0 testing123

 Si tout se passe bien, vous devriez voir apparaître sur le premier SSH (freeradius -X) le message  Access-Accept et sur le second terminal (radtest) rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, length=20.

 Cela signifie que tout s’est passé correctement et que votre RADIUS est prêt à être mis en production. Félicitations !

 Redémarrez le service freeradius.

 sudo freeradius

 Vous pouvez fermer vos consoles SSH.

 8. Configurer vos AP

 Rendez-vous sur l’interface de gestion de vos AP. Le gros avantages de mes AP Unifi, est que j’ai une interface de gestion unifiée qui me fait gagner beaucoup de temps.

interface-1024x482

Paramétrez maintenant vos AP en utilisant la configuration créée au tout début de ce tutoriel dans la partie “Créer la configuration des clients”.

Capture

Sources :
Deploying radius : Configuring Authentication with Active Directory
FreeRADIUS : Active Directory Integration HOWTO
FreeRADIUS 3.0.3 on Ubuntu 14.04 LTS with Active Directory for eduroam

A propos

Technophile et futur motard, je me lance dans la création de vlogs autour de la moto et des accessoires (Hi-Tech en particulier).

  • nesrine

    bonjour, pouvez vous m’aider à intégrer l’authentification Radius avec un serveur web localhost