Freeradius et OpenLDAP

Préambule:
Installation de freeradius
Fonctionnement avec vlan
Une configuration pour 802.1x filaire
Mise en place d’une base ldap

Installation du schéma freeradius dans la base ldap

Recherche d’un exemple de schéma freeradius

On copie et renomme le schéma présent dans le paquet freeradius dans l’arborescence openldap.

[root@localhost cn=config]# cp /usr/share/doc/freeradius-2.1.10/examples/openldap.schema /etc/openldap/schema/radius.schema

Conversion du fichier pour l’importation dans openldap

Création d’un fichier schema-convert et d’un réptertoire convert-output, puis conversion du schéma.

[root@localhost schema]# cat schema-convert
 include /etc/openldap/schema/radius.schema
 [root@localhost schema]#
[root@localhost schema]# slaptest -f schema-convert -F ./convert-output/
 config file testing succeeded
 [root@localhost schema]#
[root@localhost schema]# ls ./convert-output/
 cn=config  cn=config.ldif

Ouvrir le fichier /etc/openldap/schema/convert-output/cn=config/cn=schema/cn={0}radius.ldif et remplacer:

dn: cn={0}radius
 objectClass: olcSchemaConfig
 cn: {0}radius

par:

dn: cn=radius,cn=schema,cn=config
 objectClass: olcSchemaConfig
 cn: radius

Puis supprimer les lignes suivantes à la fin du fichier:

structuralObjectClass: olcSchemaConfig
 entryUUID: d3f8dbfa-297a-1031-9222-176c711ae4e0
 creatorsName: cn=config
 createTimestamp: 20120503144845Z
 entryCSN: 20120503144845.283270Z#000000#000#000000
 modifiersName: cn=config
 modifyTimestamp: 20120503144845Z

Enfin, on importe le schéma.

Importation du schéma dans openldap

[root@localhost cn=schema]# ldapadd -Y EXTERNAL -H ldapi:/// -f ./cn\=\{0\}radius.ldif
 SASL/EXTERNAL authentication started
 SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
 SASL SSF: 0
 adding new entry "cn=radius,cn=schema,cn=config"
[root@localhost cn=schema]#

Installation du module ldap pour freeradius

[root@localhost raddb]# yum install freeradius-ldap

Configuration du module ldap

La correspondance entre les attributs freeradius et les attributs ldap se trouve dans le fichier ldap.attrmap

Extrait du fichier:

[root@localhost raddb]# more /etc/raddb/ldap.attrmap
 checkItem       $GENERIC$                       radiusCheckItem
 replyItem       $GENERIC$                       radiusReplyItem
checkItem       Auth-Type                       radiusAuthType
 checkItem       Simultaneous-Use                radiusSimultaneousUse
 checkItem       Called-Station-Id               radiusCalledStationId
 checkItem       Calling-Station-Id              radiusCallingStationId
 checkItem       LM-Password                     lmPassword
 checkItem       NT-Password                     ntPassword
 checkItem       LM-Password                     sambaLmPassword
 checkItem       NT-Password                     sambaNtPassword
 checkItem       LM-Password                     dBCSPwd
 checkitem       Password-With-Header            userPassword
 replyItem       Tunnel-Type                     radiusTunnelType
 replyItem       Tunnel-Medium-Type              radiusTunnelMediumType
 replyItem       Tunnel-Private-Group-Id         radiusTunnelPrivateGroupId

Configuration fichier /etc/raddb/modules/ldap

Dans notre cas, l’annuaire ldap est installé sur le même serveur que freeradius.

[root@localhost ~]# vi /etc/raddb/modules/ldap
 server = "127.0.0.1"
 identity = "cn=admin,dc=demo,dc=com"
 password = motdepassecomplique
 basedn = "dc=demo,dc=com"
 filter = "(uid=%{%{Stripped-User-Name}:-%{User-Name}})"
 dictionary_mapping = ${confdir}/ldap.attrmap

Activation de ldap pour l’authentification

Dans le fichier /etc/raddb/sites-available/inner-tunnel

Section authorize {
On décommente la ligne ldap
#  The ldap module will set Auth-Type to LDAP if it has not
 #  already been set
 ldap

Puis dans la section  authenticate, on supprime le commentaire sur les lignes suivantes

Auth-Type LDAP {
 ldap
 }

todo: activer tls pour la communication entre les serveurs.

test avec TTLS : pas de problème, ça devrait fonctionner…

Avec PEAP, ça se complique un peu, voyons ça.