Menu

Service mobilité pour la communauté RENATER


Configuration FreeRADIUS 3.0.X

README v2020/09/01

Fichiers testés avec FreeRADIUS version 3.0.19, 3.0.20 et 3.0.21 dans le contexte suivant :

Rôles : SP + IdP

Accounting : local, pas de relai aux proxies nationaux

EAP : PEAP/MSCHAPv2 (défaut) et TTLS/PAP

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

Remplacer :

  • Vos secrets
  • MONREALM : votre realm
  • ETABLISSEMENT.TLD : peut être le même que MONREALM ou à défaut votre domaine dns
  • Dans eap.conf : certificats du serveur et de l'AC utilisée

clients.conf

client rad1.eduroam.fr {
    ipaddr                        = 194.57.7.15
    netmask                       = 32
    secret                        =
    shortname                     = rad1.eduroam.fr
    nastype			  = other
    virtual_server                = eduroam
    require_message_authenticator = yes
 }
client rad2.eduroam.fr {
    ipaddr                        = 194.57.7.78
    netmask                       = 32
    secret                        =
    shortname                     = rad2.eduroam.fr
    nastype			  = other
    virtual_server                = eduroam
    require_message_authenticator = yes
 }
client AP1.ETABLISSEMENT.TLD {
    ipaddr                        = xx.xx.xx.xx
    netmask                       = 32
    secret                        =
    shortname                     = Borne-AP1
    nastype			  = other
    virtual_server                = eduroam
    require_message_authenticator = yes
 }

proxy.conf

proxy server {
	default_fallback = no
}
home_server rad1.eduroam.fr {
        type            = auth
        ipaddr          = 194.57.7.15
        port            = 1812
        secret          =
        require_message_authenticator = yes
        response_window = 20
        zombie_period   = 40
        status_check    = status-server
        check_interval  = 20
        num_answers_to_alive = 3
}
home_server rad2.eduroam.fr {
        type            = auth
        ipaddr          = 194.57.7.78
        port            = 1812
        secret          =
        require_message_authenticator = yes
        response_window = 20
        zombie_period   = 40
        status_check    = status-server
        check_interval  = 20
        num_answers_to_alive = 3
}
home_server_pool pool-eduroam-fr {
	type = fail-over
	home_server = rad1.eduroam.fr
	home_server = rad2.eduroam.fr
}
realm MONREALM {
	 nostrip
}
realm NULL {
}
realm "~.+$" {
        auth_pool = pool-eduroam-fr
        nostrip
}

serveur virtuel par defaut : sites-available/eduroam

server eduroam { 
        listen {
                type = "auth"
                ipaddr = *
                port = 0
        }
        listen {
                type = "acct"
                ipaddr = *
                port = 0
        }
  
        authorize {
                filter_username
                # Force le format de l'attribut calling_station_id (CSI) pour avoir la même 
                # syntaxe des @MAC quelque soit le NAS utilisé
                rewrite_calling_station_id
                # Ajout de l'attribut Operator-Name pour toute requête ne provenant pas 
                # des proxy eduroam.fr
		if ("%{client:shortname}" !~ /rad[1-2]\.eduroam\.fr/) {
                  update request {
                        Operator-Name := "1ETABLISSEMENT.TLD"
                  }
                }
                auth_log
                suffix
                # Rejet des authentifications sans realm
                if (Realm == "NULL") {
                        update request {
                                &Module-Failure-Message += 'Rejected: Realm is NULL'
                        }
                        reject
                }
		eap
        }
 
        authenticate {
		eap
        }
 
        preacct {
                suffix
        }
 
        accounting {
        }
 
        post-auth {
                reply_log
                Post-Auth-Type REJECT {
                        reply_log
			}
        }
 
        pre-proxy {
                pre_proxy_log
                if("%{Packet-Type}" != "Accounting-Request") {
                        attr_filter.pre-proxy
                }
        }
 
        post-proxy {
                post_proxy_log
                attr_filter.post-proxy
        }
}

serveur virtuel responsable de l'authentification EAP : sites-available/eduroam-inner-tunnel

server eduroam-inner-tunnel {
authorize {
        auth_log
        eap
        files     # pour le compte de test eduroam.fr
        mschap
        pap
}
authenticate {
	Auth-Type PAP {
		pap
	}
	Auth-Type MS-CHAP {
		mschap
	}
	eap
}
post-auth {
	reply_log
	Post-Auth-Type REJECT {
		reply_log
		update outer.session-state {
			&Module-Failure-Message := &request:Module-Failure-Message
		}
	}
}
}

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) :

cd sites-enabled; ln -s ../sites-available/eduroam; ln -s ../sites-available/eduroam-inner-tunnel

EAP : mods-available/eap

eap {
	default_eap_type = peap
	timer_expire     = 60
	ignore_unknown_eap_types = no
	cisco_accounting_username_bug = no
	max_sessions = ${max_requests}
	tls-config tls-common {
		private_key_file = ${certdir}/<CERTIF>.key
 		certificate_file = ${certdir}/<CERTIF>.crt
		ca_file = ${cadir}/<CA>.crt
	        dh_file = ${certdir}/dh
		random_file = /dev/urandom
		ca_path = ${cadir}
		cipher_list = "DEFAULT"
                ecdh_curve = "prime256v1"
                
                # 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).
                #
                # tls_min_version est à adapter à votre parc de clients : la version 1.2 est fortement 
                # recommandée mais sachez que de nombreux OS plus ou moins récents (smartphones 
                # Android/iOS, windows 8, distribution Linux vieillissante, ...) utilisent encore la 
                # version 1.0 avec EAP (même s'il ne l'utilise plus pour du https par exemple).
                #
                # tls_max_version doit être à 1.2 (pas encore de standard pour EAP avec TLS 1.3)
                # 
                # Sans la définition de ces paramètres, freeRADIUS utilisera la version TLS la plus 
                # haute proposée par la librairie OpenSSL : 1.3 avec OpenSSL >= 1.1.1
                #
                # Exemple pour accepter des méthodes EAP avec TLS de la version 1.0 à la version 1.2 :
                tls_min_version = "1.0"
                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 {
			enable = no
		}
		verify {
		}
		ocsp {
			enable = no
		}
	}
	ttls {
		tls = tls-common
		default_eap_type = pap
		copy_request_to_tunnel = yes
		use_tunneled_reply = yes
		virtual_server = "eduroam-inner-tunnel"
	}
	peap {
		tls = tls-common
		default_eap_type = mschapv2
		copy_request_to_tunnel = yes
		use_tunneled_reply = yes
		virtual_server = "eduroam-inner-tunnel"
	}
	mschapv2 {
	}
}

Attributs

Dans mods-config/attr_filter/pre-proxy, assurez vous que les paramètres suivants sont bien présents :

DEFAULT
...
        Calling-Station-Id =* ANY,
        Operator-Name =* ANY,
        Chargeable-User-Identity =* ANY,
...

Dans mods-config/attr_filter/post-proxy, assurez vous que les paramètres suivants sont bien présents :

DEFAULT
...
        User-Name =* ANY,
        Chargeable-User-Identity =* ANY,
...

Chargeable-User-Identity

Configuration pour cet attribut.


{tr:about_reveal}