Filtrage d'attributs des requêtes proxifiées sur le RADIUS d'authentification

Il peut s'avérer nécessaire de filtrer certains attributs, reçus par le serveur RADIUS distant, des nomades lors de leur connexion dans votre établissement. C'est le cas notamment des attributs concernant les VLAN.

Dans le cadre du projet eduroam.fr, le proxy national applique un filtre et ne laisse passer que les attributs suivants :

  • Service-Type == Login-User,
  • Framed-MTU >= 576,
  • Framed-Filter-ID =* ANY,
  • Reply-Message =* ANY,
  • Proxy-State =* ANY,
  • Port-Limit <= 2,
  • MS-MPPE-Recv-Key =* ANY,
  • MS-MPPE-Send-Key =* ANY,
  • User-Name =* ANY,
  • EAP-Message =* ANY,
  • Message-Authenticator =* ANY,
  • Called-Station-Id =* ANY,
  • Calling-Station-Id =* ANY,
  • NAS-Port-Type =* ANY,
  • NAS-Port =* ANY,
  • State =* ANY,
  • NAS-IP-Address =* ANY,
  • NAS-Identifier =* ANY,
  • Proxy-State =* ANY

Pour information, voici le principe et les détails utilisés :

Le but est de se protéger des attributs qui non pas la même signification chez vous que dans l'établissement de rattachement du visiteur. En effet, imaginez ce qui se passerait si après authentification d'un nomade chez vous, il se voit connecté dans votre VLAN serveur.

Dans le cas de freeRADIUS, pour filtrer ces attributs envoyés aux bornes, nous vous conseillons l'utilisation du module de filtrage d'attribut (Attibute Filtering Module) dans la phase/étape post_proxy.

Ce filtrage n'aura d'effet que sur les requêtes proxifiées et non pas sur vos authentifications locales.

Voici les étapes de cette mise en place :

Configuration du module

Dans la section module du fichier radius.conf, renseigner le nom du module et le nom du fichier contenant le filtre :

modules {
     ...
     attr_filter {
            attrsfile = ${confdir}/attrs
     }
     ...
}
Activation du module

Ce module doit être appelé AVANT le module realm dans la section authorize du fichier radius.conf :

authorize {
      preprocess
      attr_filter
      realm
      files
}
Appel de la fonction de filtrage

Appeler la fonction de filtrage dans la section post_proxy du fichier radius.conf :

post-proxy {
	attr_filter
	eap
}
Syntaxe du filtre

Une fois ceci mis en place, il reste à écrire les règles du filtrage. Pour ceci, il faut en comprendre le fonctionnement.
Voici les grandes lignes :

  • Les règles sont constituées de couple attribut/valeur
  • Chaque couple est comparé à la liste des règles
  • Si une règle ou plus n'est pas respecté, l'attribut concerné ne serait pas transmis
  • Les opérateurs sont :
             := - Set ( used to ensure a specific a/v is present )
             ==   -  Equal  ( exact )
             =*   -  Always Equal ( will allow all values for attribute )
             !*   -  Always Not Equal ( will block all values for attribute )
             !=   -  Not equal
             >=   -  Greater than or equal to
             <=   -  Less than or equal to
             >    -  Greater than
             <    -  Less than
             =~   -  Regular expression equal
             !~   -  Regular expression not equal
    
Filtre minimum

Dans le cadre d'eduroam, nous avons cherché à garder le minimum d'attribut nécessaire transmis à une borne, n'utilisant pas de VLAN, pour valider la connexion d'un client.

Ce qui nous préoccupe notamment, c'est de bloquer les attributs suivants :

      Tunnel-Type:0
      Tunnel-Medium-Type:0
      Tunnel-Private-Group-Id:0
Voici le contenu du fichier ${confdir}/attrs :
DEFAULT	
	EAP-Message =* ANY,
	State =* ANY,
	MS-MPPE-Recv-Key =* ANY,
	MS-MPPE-Send-Key =* ANY
Filtre minimum + affectation de VLAN

Vous pouvez utiliser le même principe de filtrage, puis ajouter vos propres valeurs d'attributs (notamment affectation de VLAN) dans la section post_proxy, et ceci avec la fonction attr_rewrite.

Plus d'informations concernant cette fonction de freeRADIUS dans le fichier de documentation : rlm_attr_filter