Table des matières
Configuration FreeRADIUS 3.0.X avec attribut Chargeable-User-Identity (CUI)
README v2022/06/08
A partir de l'installation classique de FreeRADIUS 3.0.X avec l'attribut Operator-Name configuré:
Valider le module CUI
cd mods-enabled; ln -s ../mods-available/cui
Créer un module de traces
Par défaut le CUI n'est pas tracé, il faut utiliser le module 'linelog' de FreeRADIUS pour avoir des traces.
Les traces peuvent être envoyées à syslog ou écrites dans un fichier. Si vous choisissez un fichier
et que votre processus principal FreeRADIUS utilise aussi un fichier pour écrire ses traces, il ne faut pas utiliser le même. FreeRADIUS s'attend à être le seul à écrire dedans et en partageant ce fichier vous risquez d'avoir des lignes tronquées, des lignes perdues, des pbs de verrou sur le fichier, etc.
Exemple avec le fichier mods-available/eduroam_cui_logging :
linelog eduroam_cui_log { # filename = syslog filename = ${logdir}/cui.log permissions = 0640 format = "" reference = "auth_log.%{%{reply:Packet-Type}:-format}" auth_log { Access-Accept = "%t : eduroam-auth#ORG=%{request:Realm}#USER=%{User-Name}#CSI=%{%{Calling-Station-Id}:-Unknown Caller Id}#CUI=%{%{reply:Chargeable-User-Identity}:-Unknown}#MSG=%{%{EAP-Message}:-No EAP Message}#RESULT=OK#" Access-Reject = "%t : eduroam-auth#ORG=%{request:Realm}#USER=%{User-Name}#CSI=%{%{Calling-Station-Id}:-Unknown Caller Id}#CUI=%{%{reply:Chargeable-User-Identity}:-Unknown}#MSG=%{%{reply:Reply-Message}:-No Failure Reason}#RESULT=FAIL#" } } linelog eduroam_cui_inner_log { # filename = syslog filename = ${logdir}/cui.log permissions = 0640 format = "" reference = "inner_auth_log.%{%{reply:Packet-Type}:-format}" inner_auth_log { Access-Accept = "%t : eduroam-inner-auth#VISINST=%{request:Operator-Name}#USER=%{User-Name}#CSI=%{%{Calling-Station-Id}:-Unknown Caller Id}#CUI=%{%{%{reply:Chargeable-User-Identity}:-%{outer.reply:Chargeable-User-Identity}}:-Local User}#RESULT=OK#" Access-Reject = "%t : eduroam-inner-auth#VISINST=%{request:Operator-Name}#USER=%{User-Name}#CSI=%{%{Calling-Station-Id}:-Unknown Caller Id}#CUI=%{%{%{reply:Chargeable-User-Identity}:-%{outer.reply:Chargeable-User-Identity}}:-Local User}#RESULT=FAIL#" } }
Valider ce module de traces
cd mods-enabled; ln -s ../mods-available/eduroam_cui_logging
clients.conf
Ajoutez 'add_cui = yes' dans le paragraphe de définition vos clients wifi locaux. Exemple :
client AP1.ETABLISSEMENT.TLD { ipaddr = xx.xx.xx.xx netmask = 32 secret = shortname = Borne-AP1 nastype = other virtual_server = eduroam require_message_authenticator = yes Operator-Name = 1ETABLISSEMENT.TLD # Doit commencer par le chiffre '1' add_cui = yes }
policy.d/cui
Changez le 'cui_hash_key' (si vous avez plusieurs serveurs FreeRADIUS, utilisez la même clé de hachage) et passez 'cui_require_operator_name' à 'yes'
Filtrage du CUI
Optionnel, ne sert que si vous souhaitez effectuer une action spécifique sur un (ou des) CUI identifié(s). Par exemple pour le(s) rejeter.
Dans policy.d/filter rajouter une fonction de filtrage 'filter_cui'. Exemple :
# Filter the Chargeable-User-Identity attribute filter_cui { if (&reply:Chargeable-User-Identity =~ /REMPLACER-PAR-LE-CUI-A-FILTRER/) { update request { &Module-Failure-Message += "Rejected: CUI matching '%{reply:Chargeable-User-Identity}'" } reject # On le rejete } }
sites-available/eduroam
Ajoutez 'cui' dans les sections authorize, post-auth, pre-proxy. 'eduroam_cui_log' et 'filter_cui' dans la section post-auth:
... authorize { # Force le format de l'attribut calling_station_id (CSI) pour avoir la même # syntaxe des @MAC quelque soit le NAS (ou client) envoyant la requête rewrite_calling_station_id # Quelques filtres sanitaire sur le User-Name : pas d'espace, pas @ multiples,... filter_username # Ajout de l'attribut Operator-Name pour toute requête provenant d'un client # ayant la variable 'Operator-Name' déclarée (voir clients.conf) operator-name cui auth_log suffix # Rejet des authentifications sans realm if (Realm == "NULL") { update request { &Module-Failure-Message += 'Rejected: Realm is NULL' } reject } # On accepte uniquement EAP. ie: les demandes d'authentifications en RADIUS simple # (PAP, CHAP, MSCHAP) ne sont pas acceptées eap } ... post-auth { reply_log cui eduroam_cui_log filter_cui # Optionnel, ne sert que si vous avez configuré le filtrage par CUI Post-Auth-Type REJECT { reply_log eduroam_cui_log } } ... pre-proxy { pre_proxy_log cui if("%{Packet-Type}" != "Accounting-Request") { attr_filter.pre-proxy } } ...
sites-available/eduroam-inner-tunnel
Ajouter 'cui-inner' et 'eduroam_cui_inner_log' dans la section post-auth
... post-auth { reply_log eduroam_cui_inner_log cui-inner Post-Auth-Type REJECT { reply_log eduroam_cui_inner_log update outer.session-state { &Module-Failure-Message := &request:Module-Failure-Message } } } ...