freeradius-3.0.x

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
freeradius-3.0.x [2019/06/07 14:13] arnaud.lauriou_renater.frfreeradius-3.0.x [2023/02/23 14:49] (Version actuelle) arnaud.lauriou@renater.fr
Ligne 1: Ligne 1:
-===== Configuration FreeRADIUS 3.0.X ===== +===== Configuration FreeRADIUS 3.0.X et 3.2.Y ===== 
- +<WRAP important 70%> 
-==== README v2019/05/20 ==== +Si vous procédez à une montée de version majeure, par exemple le passage de FreeRADIUS 2 à FreeRADIUS 3, ne reprenez pas vos anciens fichiers de configs tels quels, utilisez les nouveaux fichiers fournis par défaut avec la nouvelle version comme base de configuration. 
-Fichiers testés avec FreeRADIUS 3.0.19 dans le contexte suivant :+</WRAP> 
 +==== README v2023/02/23 ==== 
 +**Configurations testées avec FreeRADIUS des versions 3.0.19 à 3.0.26 et de 3.2.0 à 3.2.2** dans le contexte suivant :
  
 Rôles : SP + IdP Rôles : SP + IdP
Ligne 10: Ligne 12:
 EAP : PEAP/MSCHAPv2 (défaut) et TTLS/PAP EAP : PEAP/MSCHAPv2 (défaut) et TTLS/PAP
  
-Attribut : Operator-Name.+Ajout de l'attribut Operator-Name.
  
 Annuaire : Absent, à configurer pour votre site dans mods-enable/<annuaire> et à appeler dans la section 'authorize' du serveur virtuel responsable de l'authentification EAP (edoroam-inner-tunnel dans cet exemple). Annuaire : Absent, à configurer pour votre site dans mods-enable/<annuaire> et à appeler dans la section 'authorize' du serveur virtuel responsable de l'authentification EAP (edoroam-inner-tunnel dans cet exemple).
Ligne 17: Ligne 19:
   * Vos secrets   * Vos secrets
   * MONREALM : votre realm   * MONREALM : votre realm
-  * ETABLISSEMENT.TLD : peut être le même que MONREALM ou à défaut votre domaine dns +  * ETABLISSEMENT.TLD : peut être le même que MONREALM ou à défaut votre domaine DNS 
-  * Dans eap.conf : certificat du serveur et AC utilisés +  * Dans eap.conf : certificats du serveur et de l'AC utilisée
  
 ==== clients.conf ==== ==== clients.conf ====
 <code> <code>
 +# eduroam.fr
 client rad1.eduroam.fr { client rad1.eduroam.fr {
-    ipaddr                        = 193.49.160.187+    ipaddr                        = 194.57.7.15
     netmask                       = 32     netmask                       = 32
     secret                        =     secret                        =
Ligne 33: Ligne 35:
  }  }
 client rad2.eduroam.fr { client rad2.eduroam.fr {
-    ipaddr                        = 193.49.159.82+    ipaddr                        = 194.57.7.78
     netmask                       = 32     netmask                       = 32
     secret                        =     secret                        =
Ligne 41: Ligne 43:
     require_message_authenticator = yes     require_message_authenticator = yes
  }  }
-client AP1.ETABLISSEMENT.TLD {+# Mon site 
 +client AP01.ETABLISSEMENT.TLD {
     ipaddr                        = xx.xx.xx.xx     ipaddr                        = xx.xx.xx.xx
     netmask                       = 32     netmask                       = 32
     secret                        =     secret                        =
-    shortname                     = Borne-AP1+    shortname                     = Borne-AP01
     nastype   = other     nastype   = other
     virtual_server                = eduroam     virtual_server                = eduroam
     require_message_authenticator = yes     require_message_authenticator = yes
 +    Operator-Name                 = 1ETABLISSEMENT.TLD          # A déclarer uniquement pour les clients 
 +                                                                # locaux (borne, contrôleur) offrant le 
 +                                                                # service Wi-Fi. Doit commencer par '1'
 + }
 +client WLC01.ETABLISSEMENT.TLD {
 +    ipaddr                        = xx.xx.xx.xx
 +    netmask                       = 32
 +    secret                        =
 +    shortname                     = Controleur-WLC01
 +    nastype   = other
 +    virtual_server                = eduroam
 +    require_message_authenticator = yes
 +    Operator-Name                 = 1ETABLISSEMENT.TLD           # A déclarer uniquement pour les clients 
 +                                                                 # locaux (borne, contrôleur) offrant le 
 +                                                                 # service Wi-Fi. Doit commencer par '1'
  }  }
 </code> </code>
Ligne 58: Ligne 76:
 home_server rad1.eduroam.fr { home_server rad1.eduroam.fr {
         type            = auth         type            = auth
-        ipaddr          = 193.49.160.187+        ipaddr          = 194.57.7.15
         port            = 1812         port            = 1812
         secret          =         secret          =
-        require_message_authenticator = yes 
         response_window = 20         response_window = 20
         zombie_period   = 40         zombie_period   = 40
Ligne 70: Ligne 87:
 home_server rad2.eduroam.fr { home_server rad2.eduroam.fr {
         type            = auth         type            = auth
-        ipaddr          = 193.49.159.82+        ipaddr          = 194.57.7.78
         port            = 1812         port            = 1812
         secret          =         secret          =
-        require_message_authenticator = yes 
         response_window = 20         response_window = 20
         zombie_period   = 40         zombie_period   = 40
Ligne 95: Ligne 111:
 } }
 </code> </code>
-==== serveur virtuel par defaut : sites-available/eduroam ====+==== serveur virtuel par défaut : sites-available/eduroam ====
 <code> <code>
 server eduroam {  server eduroam { 
Ligne 108: Ligne 124:
                 port = 0                 port = 0
         }         }
 +
      
         authorize {         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                 filter_username
- if ("%{client:shortname}" !~ /rad[1-2]\.eduroam\.fr/) { +                 
-                  update request { +                # Ajout de l'attribut Operator-Name pour toute requête provenant d'un client  
-                        Operator-Name := "1ETABLISSEMENT.TLD" +                # ayant la variable 'Operator-Name' déclarée (voir clients.conf) 
-                  } +                operator-name 
-                }+                
                 auth_log                 auth_log
                 suffix                 suffix
 +                
 +                # Rejet des authentifications sans realm
                 if (Realm == "NULL") {                 if (Realm == "NULL") {
                         update request {                         update request {
Ligne 124: Ligne 148:
                         reject                         reject
                 }                 }
 +                
 +                # On accepte uniquement EAP. ie: les demandes d'authentifications en RADIUS simple
 +                # (PAP, CHAP, MSCHAP) ne sont pas acceptées
  eap  eap
         }         }
 +
    
         authenticate {         authenticate {
 +                # Uniquement le module eap  
  eap  eap
         }         }
 +
    
         preacct {         preacct {
                 suffix                 suffix
         }         }
 +
    
         accounting {         accounting {
         }         }
 +
    
         post-auth {         post-auth {
Ligne 144: Ligne 176:
  }  }
         }         }
 +
    
         pre-proxy {         pre-proxy {
Ligne 151: Ligne 184:
                 }                 }
         }         }
 +
    
         post-proxy {         post-proxy {
Ligne 165: Ligne 199:
         auth_log         auth_log
         eap         eap
-        files     # pour le compte de test eduroam.fr+        files     # pour le compte de test eduroam.fr s'il est déclaré dans le fichier local users
         mschap         mschap
         pap         pap
Ligne 189: Ligne 223:
 } }
 </code> </code>
-Rendez accessibles ces 2 serveurs virtuels (si votre service freeradius est dédié à eduroam, supprimer les autres serveurs virtuels présents dans sites-enabled, sinon adapter votre configuration) :+\\ 
 +Rendez accessibles ces 2 serveurs virtuels. Si votre service FreeRADIUS est dédié à eduroam, supprimez les autres serveurs virtuels présents dans le répertoire sites-enabled. Sinonadaptez votre configuration : dans la section <listen> le couple formé par @IP + port UDP d'écoute (0 dans cet exemple signifie le port par défaut: 1812 pour les authentifications, 1813 pour l'accountingdoit être unique, il ne peut pas apparaître dans plusieurs serveurs virtuels.\\  
 +Pour activer ces serveurs virtuels :
 <code> <code>
 cd sites-enabled; ln -s ../sites-available/eduroam; ln -s ../sites-available/eduroam-inner-tunnel cd sites-enabled; ln -s ../sites-available/eduroam; ln -s ../sites-available/eduroam-inner-tunnel
 </code> </code>
-==== EAP : mods-available/eap ====+==== Module EAP : mods-available/eap ====
 <code> <code>
 eap { eap {
- default_eap_type = peap+        # Informations générales communes aux méthodes EAP utilisées 
 + default_eap_type = peap                         # Méthode EAP par défaut
  timer_expire     = 60  timer_expire     = 60
  ignore_unknown_eap_types = no  ignore_unknown_eap_types = no
Ligne 202: Ligne 239:
  max_sessions = ${max_requests}  max_sessions = ${max_requests}
  tls-config tls-common {  tls-config tls-common {
 +                # La clée privée de votre certificat
  private_key_file = ${certdir}/<CERTIF>.key  private_key_file = ${certdir}/<CERTIF>.key
 +                
 +                # Votre certificat
   certificate_file = ${certdir}/<CERTIF>.crt   certificate_file = ${certdir}/<CERTIF>.crt
 +                
 +                # La chaîne de certification de l'autorité de certification (AC) ayant signée votre
 +                # certificat. svp lire https://www.eduroam.fr/certifs
 +                # Exemple avec l'AC TCS Sectigo version courte qui a 1 certificat intermédiaire et 
 +                # 1 certificat racine.
 +                # La chaîne de certification "<CA>.crt" est alors constituée du certificat intermédiaire :
 +                # C = NL, O = GEANT Vereniging, CN = GEANT OV RSA CA 4
 +                # 
 +                # Coté supplicant, on déploie le certificat racine sur tous les terminaux :
 +                # C = US, ST = New Jersey, L = Jersey City, O = The USERTRUST Network, 
 +                # CN = USERTrust RSA Certification Authority
 +                #
  ca_file = ${cadir}/<CA>.crt  ca_file = ${cadir}/<CA>.crt
-         dh_file = ${certdir}/dh +                 
- random_file = /dev/urandom+                # Si OpenSSL >= 1.1.0, le paramètre dh_file est inutile, sinon décommenter la ligne suivante 
 +         #dh_file = ${certdir}/dh 
  ca_path = ${cadir}  ca_path = ${cadir}
- cipher_list = "DEFAULT"+ 
 +                # La liste des suites de chiffrement utilisables entre OpenSSL et le supplicant. 
 +                # Cette liste est variable en fonction des distributions, on se base sur 
 +                # la liste DEFAULT que l'on peut limiter en excluant certaines suites  
 +                # comme SSLv3 et celles de type 'Pre-Shared Key' (PSK) par exemple : 
 +                # cipher_list = "DEFAULT !SSLv3 !PSK" 
 +                # Vous pouvez comparer ces listes avec les commandes : openssl ciphers -v '<LISTE>' 
 +                # 
 +                # Note : Si vous acceptez TLS < 1.2 (voir + bas) alors, avec une version d'OS récente, 
 +                # il faudra peut être préciser à OpenSSL d'utiliser une liste moins restrictive : 
 +                # cipher_list = "DEFAULT@SECLEVEL=1" pour OpenSSL < 3.x 
 +                # cipher_list = "DEFAULT@SECLEVEL=0" pour OpenSSL >= 3.x 
 +                # 
 + cipher_list = "DEFAULT !SSLv3 !PSK" 
 + 
 +                # On laisse OpenSSL gérer les courbes elliptiques utilisées 
 +                ecdh_curve = "" 
 +                 
 +                # Si votre serveur utilise OpenSSL >= 1.1.0 alors il faut définir les paramètres  
 +                # tls_min_version et tls_max_version.  
 +                # Les choix possibles sont : 1.0, 1.1, 1.2 et 1.3 (1.3 à partir de freeRADIUS >= 3.0.19). 
 +                # 
 +                # Il est fortement recommandé d'utiliser TLS version 1.2 
 +                #  
 +                # Sachez cependant que certains périphériques anciens utilisent encore la version 1.0 pour 
 +                # leur supplicant EAP (même s'il ne l'utilise plus pour du https par exemple). 
 +                # tls_min_version est donc à adapter à votre parc de clients. 
 +                # 
 +                # tls_max_version doit être à 1.2 (TLS 1.3 est uniquement supporté par certains supplicants pour  
 +                # EAP-TLS (certificats personnels), pas encore pour les autres méthodes EAP). 
 +                # Sans la définition de ce paramètre, freeRADIUS utilisera la version TLS la plus  
 +                # haute proposée par la librairie OpenSSL : 1.3 avec OpenSSL >= 1.1.1 
 +                # 
 +                # Exemple pour accepter uniquement les méthodes EAP avec TLS en version 1.2 : 
 +                tls_min_version = "1.2" 
 +                tls_max_version = "1.2" 
 +                 
 +                # Vous pouvez valider le cache si vous souhaitez avoir des re-authentifications EAP 
 +                # plus rapides (voir doc freeRADIUS à ce sujet), il est désactivé dans cet exemple.
  cache {  cache {
  enable = no  enable = no
Ligne 218: Ligne 310:
  }  }
  }  }
 +
 +        # Déclaration des méthodes EAP utilisées, dans cet exemple : TTLS/PAP et PEAP/MSCHAPv2.
 +        # Surtout ne pas indiquer d'autres méthodes EAP inutilisées et/ou pas configurées, en particulier 
 +        # les méthodes obsolètes comme LEAP (retirée de freeRADIUS depuis la version 3.0.22) et MD5 ne
 +        # doivent pas être listées.
  ttls {  ttls {
  tls = tls-common  tls = tls-common
- default_eap_type = pap+                default_eap_type = pap                  # Dans cet exemple on fait du PAP dans TTLS
  copy_request_to_tunnel = yes  copy_request_to_tunnel = yes
  use_tunneled_reply = yes  use_tunneled_reply = yes
Ligne 227: Ligne 324:
  peap {  peap {
  tls = tls-common  tls = tls-common
- default_eap_type = mschapv2+                default_eap_type = mschapv2              # Dans cet exemple on fait du MSCHAPv2 dans PEAP
  copy_request_to_tunnel = yes  copy_request_to_tunnel = yes
  use_tunneled_reply = yes  use_tunneled_reply = yes
Ligne 237: Ligne 334:
 </code> </code>
 ==== Attributs ==== ==== Attributs ====
-Dans mods-config/attr_filter/pre-proxy, assurez vous que les paramètres suivants sont bien présents :+Dans mods-config/attr_filter/pre-proxy, assurez vous que les attributs suivants sont bien présents :
 <code> <code>
 DEFAULT DEFAULT
 ... ...
 +        User-Name =* ANY,
 +        EAP-Message =* ANY,
 +        Message-Authenticator =* ANY,
 +        NAS-IP-Address =* ANY,
 +        NAS-Identifier =* ANY,
 +        State =* ANY,
 +        Proxy-State =* ANY,
         Calling-Station-Id =* ANY,         Calling-Station-Id =* ANY,
 +        Called-Station-Id =* ANY,
         Operator-Name =* ANY,         Operator-Name =* ANY,
         Chargeable-User-Identity =* ANY,         Chargeable-User-Identity =* ANY,
 ... ...
 </code> </code>
-Dans mods-config/attr_filter/post-proxy, assurez vous que les paramètres suivants sont bien présents :+Dans mods-config/attr_filter/post-proxy, assurez vous que les attributs suivants sont bien présents :
 <code> <code>
 DEFAULT DEFAULT
Ligne 254: Ligne 359:
 ... ...
 </code> </code>
 +==== radiusd.conf ====
 +Très peu de modifications sont nécessaires dans ce fichier, on ajoute juste des traces pour les authentifications car elles peuvent contenir des infos intéressantes.\\
 +Assurez vous aussi que le paramètre //status_server// est bien activé, c'est normalement le cas par défaut. Les requêtes status-server sont utilisées par les proxies nationaux pour déterminer l'état de votre serveur.
 +<code>
 +log {
 +   ...
 +   auth = yes
 +}
  
 +security {
 +   ...
 +   status_server = yes
 +}
 +</code>
 +
 +==== Traces (section optionnelle) ====
 +Si vous voulez des traces supplémentaires, c'est à dire avec des attributs spécifiques comme par exemple l'attribut **Operator-Name**, il faut explicitement les demander avec le module //linelog//, on ne peut pas modifier les informations tracées par défaut.\\
 +Exemple pour un site fournisseur d'identité eduroam : tracer l'attribut Operator-Name, @MAC du supplicant, l'identité interne de l'utilisateur et savoir si l'authentification a réussie ou pas.\\ 
 +Créer le fichier mods-available/eduroam_logging avec :
 +<code>
 +linelog eduroam_inner_log {
 +#   syslog
 +    filename = ${logdir}/eduroam.log
 +    permissions = 0640
 +    format = ""
 +    reference = "inner_auth_log.%{%{reply:Packet-Type}:-format}"
 +    inner_auth_log {
 +        Access-Accept = "%t : eduroam-inner-auth (%n) #VISINST=%{request:Operator-Name}#USER=%{User-Name}#CSI=%{%{Calling-Station-Id}:-Unknown Caller Id}#RESULT=OK#"
 +        Access-Reject = "%t : eduroam-inner-auth (%n) #VISINST=%{request:Operator-Name}#USER=%{User-Name}#CSI=%{%{Calling-Station-Id}:-Unknown Caller Id}#RESULT=FAIL#"
 +    }
 +}
 +# <filename> : doit être différent du fichier de logs par défaut pour éviter des pbs d'accès concurrent
 +# %t : horodatage de la trace
 +# %n : numéro de requête, il sera identique à celui contenu dans les logs par défaut
 +</code>
 +Activer ce module :
 +<code>
 +cd mods-enabled; ln -s ../mods-available/eduroam_logging
 +</code>
 +Enfin il faut appeler le module, puisque dans cet exemple on veut l'identité interne de l'utilisateur, on peut le faire dans la section post-auth du serveur virtuel interne (eduroam-inner-tunnel) :
 +<code>
 +post-auth {
 +     ...
 +     eduroam_inner_log
 +     ...
 +     Post-Auth-Type REJECT {
 +             ...
 +             eduroam_inner_log
 +             ...
 +     }
 +     ...
 +}
 +</code>
 ==== Chargeable-User-Identity ==== ==== Chargeable-User-Identity ====
 [[freeradius-cui-3.0.X|Configuration]] pour  cet attribut. [[freeradius-cui-3.0.X|Configuration]] pour  cet attribut.

{tr:about_reveal}