Linux:Configuration de FreeRADIUS
Sommaire
But
Certains routeurs ont besoin d'une base d'utilisateurs pour, par exemple, gérer les connexions VPN. La plupart d'entre-eux proposent:
- une base d'utilisateurs interne,
- ou un accès à un serveur RADIUS.
L'accès à un serveur RADIUS permet au routeur de se connecter à une base d'utilisateurs externe installé sur un serveur du réseau. Là où ça devient très intéressant c'est que le serveur RADIUS est capable de passer la main au serveur LDAP.
Ainsi le serveur RADIUS nous permettrait d'utiliser les comptes d'utilisateurs du LDAP pour se connecter au VPN.
Étape préliminaire
Avant de commencer, il est impératif:
- de disposer d'un serveur LDAP,
- et d'avoir procédé à l'installation d'OpenSSL.
Installation
Taper la commande suivante pour installer FreeRADIUS sur une CentOS/RedHat/Fedora:
yum install freeradius freeradius-utils freeradius-ldap
Configuration au niveau du serveur LDAP
Ajout du schéma RADIUS
Les utilisateurs qui seront autorisé à se connecter via le serveur RADIUS devront avoir un compte héritant de l'objet radiusprofile avec la propriété dialupAccess positionné à YES.
- Récupérer le schéma en tapant la commande suivante:
cp /usr/share/doc/freeradius-2.1.12/examples/openldap.schema /etc/openldap/schema/radius.schema
- Ajouter la ligne suivante dans le fichier /etc/openldap/schema_convert.conf pour ajouter le schéma RADIUS:
include /etc/openldap/schema/radius.schema
- Déterminer le numéro de ligne qui vient d'être ajoutée dans le fichier en commençant par 0: dans notre cas se sera 13.
- Exécuter les commandes suivantes pour convertir notre fichier .schema en .ldif:
mkdir schema.tmp slapcat -f /etc/openldap/schema_convert.conf -F schema.tmp -n0 -s "cn={13}radius,cn=schema,cn=config" > cn=radius.ldif
- Editer le fichier cn=radius.ldif:
vi cn\=radius.ldif
- enlever le {13} présent sur les 3 premières lignes pour qu'elles ressemblent à ceci:
dn: cn=radius objectClass: olcSchemaConfig cn: radius
- supprimer les 7 dernières lignes:
structuralObjectClass: olcSchemaConfig entryUUID: 4664ceba-6422-1031-9981-b70fb00c9654 creatorsName: cn=config createTimestamp: 20120717061330Z entryCSN: 20120717061330.638966Z#000000#000#000000 modifiersName: cn=config modifyTimestamp: 20120717061330Z
- et taper la commande suivante pour importer le schéma:
ldapadd -Y EXTERNAL -H ldapi:/// -f cn\=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"ldapadd -Y EXTERNAL -H ldapi:/// -f cn\=radius.ldif
Création du compte pour l'accès au LDAP
Créer le compte que le serveur RADIUS va utiliser pour accéder au LDAP:
- pour cela, commencer par créer le fichier LDIF:
dn: cn=radius,ou=sysaccount,ou=localnet,dc=minetti,dc=org objectClass: organizationalRole objectClass: simpleSecurityObject cn: radius description: Compte serveur RADIUS userPassword: ....
- REMARQUE: Ne jamais mettre le mot de passe en clair (userPassword). Utiliser la commande suivante pour chiffrer le mot de passe:
slappasswd
- Taper la commande suivante pour importer le nouveau compte dans le LDAP:
ldapadd -x -v -ZZ -D "cn=Manager,dc=minetti,dc=org" -W -f radius.ldif
Test
- Pour terminer vérifier l'accès en tapant la commande suivante:
ldapsearch -vx -ZZ -D "cn=radius,ou=sysaccount,ou=localnet,dc=minetti,dc=org" -W "(objectClass=*)"
Configuration de FreeRADIUS
- Modifier le fichier /etc/raddb/modules/ldap pour qu'il ressemble à ceci:
ldap { server = "ldap.srv.minetti.org" identity = "cn=radius,ou=sysaccount,ou=localnet,dc=minetti,dc=org" password = ...... basedn = "dc=minetti,dc=org" filter = "(&(uid=%{%{Stripped-User-Name}:-%{User-Name}})(!(loginShell=/bin/false)))" base_filter = "(objectclass=radiusprofile)" ldap_connections_number = 5 timeout = 4 timelimit = 3 net_timeout = 1 tls { start_tls = yes cacertdir = /etc/openldap/cacerts certfile = /etc/pki/tls/certs/amon.pem keyfile = /etc/pki/tls/private/amon.key require_cert = "demand" } dictionary_mapping = ${confdir}/ldap.attrmap edir_account_policy_check = no keepalive { idle = 60 probes = 3 interval = 3 } }
- Modifier le fichier /etc/raddb/sites-enabled/default et dé-commenter la ligne ldap dans la rubrique authorize.
- Lancer le serveur RADIUS en mode debug:
radiusd -X -xxx
- Dans un autre shell, taper la commande suivante pour tester l'authentification:
radtest user password localhost 0 testing123
Sending Access-Request of id 186 to 127.0.0.1 port 1812 User-Name = "user" User-Password = "password" NAS-IP-Address = 192.168.1.106 NAS-Port = 0 Message-Authenticator = 0x00000000000000000000000000000000 rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=186, length=20
- Ajouter dans le fichier /etc/raddb/clients.conf, les lignes suivantes:
client 192.168.0.0/24 { secret = MySecretPhrase shortname = MINETTI-LAN }
- Pour finir, ne pas oublier de faire en sorte que le démon s'exécute automatiquement avec la commande suivante:
ntsysv
- et ouvrir les ports UDP 1812 et 1813 dans iptables.
Paramétrage des utilisateurs
Pour autoriser l'authentification par le serveur RADIUS, chaque utilisateur devra avoir les 2 champs suivants:
... objectClass: radiusprofile ... dialupAccess: yes ...