Linux:Configuration de FreeRADIUS

De WIKI.minetti.org
Aller à : navigation, rechercher

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:

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
...