This is an old revision of the document!
Introduction largement inspirée du livre de S.Borderes:
http://www.eyrolles.com/Informatique/Livre/authentification-reseau-avec-radius-9782212120073
Le protocole Radius répond au Modele AAA:
Il établit une couche applicative au-dessus de la couche de transport UDP, sur les ports 1812 pour les 2 premiers A et 1813 pour l'Accounting. Le protocole est basé sur des echanges requetes/réponse entre le poste client (terminal) et le client Radius: un NAS ⇒ Network Access Server (switch, borne wifi etc …). Il n'y a jamais de communication directe entre le poste de travail et le serveur Radius .
Radius est fondés sur l'échange d'attributs et valeurs associés. Il en existe beaucoup (cf http://freeradius.org/rfc/attributes.html), on s’intéressera particulièrement à ceux-ci:
cinematique:
Aucun logiciel propre a radius n'est nécessaire sur le poste client
Là un logiciel “supplicant” est nécessaire sur le poste client terminal, car c'est lui qui va fournir au serveur radius, via le NAS, l'identité et le credential de l'utilisateur. Les échanges se font toujours via l’intermédiaire du NAS, et dans un premier temps, comme il n'y a pas encore d'acces réseau complet, seul le protocole d'authentification sera autorisé a circuler. Il s'agit du protocole EAP (Extensible Authentication Protocol).
cinematique:
il faut noter que les communications entre le poste terminal client et le NAS ne sont pas des communications IP, mais ethernet de bas niveau, ce sont des paquets EAP, EAP over LAN (EAPOL) en fillaire et EAPOW (Over Wan) pour le sans fil. Ensuite entre le NAS et le serveur Radius , ce sont des paquets radius transportés en UDP.
802.1X est la norme qui definit le fonctionnement “port controlé/port non controlé” (EAP seulement ou tout le reste) du NAS .
EAP est le protocole dedié au port non controlé (pas encore ouvert au trafic utile) EAP est un protocole de transport de protocoles d'authentification (TLS, TTLS, PEAP …), ce sont ces derniers qui definiront le type d'authentification et la maniere de la faire. Seuls le supplicant et le serveur Radius ont connaissance du protocole d'authentification
[root@radiustux2 /etc/raddb] $ rpm -qa | grep freeradius freeradius-2.1.3-2.el5 freeradius-utils-2.1.3-2.el5 freeradius-mysql-2.1.3-2.el5 freeradius-libs-2.1.3-2.el5 freeradius-ldap-2.1.3-2.el5 freeradius-perl-2.1.3-2.el5
Depuis les versions 1.x des changements de parametrages ont eu lieu dans les fichiers de configuration .
###################################################################### # As of 2.0.0, the "authorize", "authenticate", etc. sections # are in separate configuration files, per virtual host. # .... # See "sites-enabled/default" for some additional documentation. # .... # In 1.x, the "authorize", etc. sections were global in # radiusd.conf. As of 2.0, they SHOULD be in a server section. # # The server section with no virtual server name is the "default" # section. It is used when no server name is specified. ######################################################################
En effet
[root@radiustux2 /etc/raddb] $ cat radiusd.conf | egrep -v -e '[[:blank:]]*#|^$' | grep \$INCLUDE $INCLUDE proxy.conf $INCLUDE clients.conf $INCLUDE ${confdir}/modules/ $INCLUDE eap.conf $INCLUDE policy.conf $INCLUDE sites-enabled/
[root@radiustux2 /etc/raddb] $ ls -l sites-enabled/ total 0 lrwxrwxrwx 1 root radiusd 33 avr 20 17:13 control-socket -> ../sites-available/control-socket lrwxrwxrwx 1 root radiusd 26 avr 20 17:13 default -> ../sites-available/default lrwxrwxrwx 1 root radiusd 31 avr 20 17:13 inner-tunnel -> ../sites-available/inner-tunnel
[root@radiustux2 /etc/raddb] $ tail -8 clients.conf client 157.159.17.19 { secret = secret shortname = c3550-7.19 } client 157.159.17.138 { secret = secret shortname = HPswc01 }
Un simple example en mac-based, declaration d'un PC par son adresse MAC et mot de passe = @MAC .
[root@radiustux2 /etc/raddb] $ cat users ... #PC PAT 4031 005004B7252E Auth-Type := Local, Cleartext-Password := "005004B7252E" Tunnel-type = VLAN, Tunnel-Medium-Type = IEEE-802, Tunnel-Private-Group-ID = 15 ...
Lancement du serveur radius en mode debug (-X)
[root@radiustux2 /etc/raddb] $ /usr/sbin/radiusd -X FreeRADIUS Version 2.1.3, for host i686-redhat-linux-gnu, built on Apr 20 2009 at 16:54:11 ... Module: Linked to module rlm_files Module: Instantiating files files { usersfile = "/etc/raddb/users" ... Listening on authentication address * port 1812 ... Ready to process requests.
[root@radiustux2 /] $ radtest 005004B7252E 005004B7252E 157.159.10.55 16 secret Sending Access-Request of id 169 to 157.159.10.55 port 1812 User-Name = "005004B7252E" User-Password = "005004B7252E" NAS-IP-Address = 157.159.10.55 NAS-Port = 16 rad_recv: Access-Accept packet from host 157.159.10.55 port 1812, id=169, length=36 Tunnel-Type:0 = VLAN Tunnel-Medium-Type:0 = IEEE-802 Tunnel-Private-Group-Id:0 = "15"
Log coté radiusd -X au meme instant:
rad_recv: Access-Request packet from host 157.159.10.55 port 32769, id=81, length=64 User-Name = "005004B7252E" User-Password = "005004B7252E" NAS-IP-Address = 157.159.10.55 NAS-Port = 16 +- entering group authorize {...} ++[preprocess] returns ok [auth_log] expand: /var/log/radius/radacct/%{Client-IP-Address}/auth-detail-%Y%m%d -> /var/log/radius/radacct/157.159.10.55/auth-detail-20090429 [auth_log] /var/log/radius/radacct/%{Client-IP-Address}/auth-detail-%Y%m%d expands to /var/log/radius/radacct/157.159.10.55/auth-detail-20090429 [auth_log] expand: %t -> Wed Apr 29 17:26:48 2009 ++[auth_log] returns ok ++[chap] returns noop ++[mschap] returns noop [suffix] No '@' in User-Name = "005004B7252E", looking up realm NULL [suffix] No such realm "NULL" ++[suffix] returns noop [eap] No EAP-Message, not doing EAP ++[eap] returns noop ++[unix] returns notfound [files] users: Matched entry 005004B7252E at line 204 ++[files] returns ok ++[expiration] returns noop ++[logintime] returns noop [pap] Found existing Auth-Type, not changing it. ++[pap] returns noop Found Auth-Type = Local WARNING: Please update your configuration, and remove 'Auth-Type = Local' WARNING: Use the PAP or CHAP modules instead. User-Password in the request is correct. +- entering group post-auth {...} ++[exec] returns noop Sending Access-Accept of id 81 to 157.159.10.55 port 32769 Tunnel-Type:0 = VLAN Tunnel-Medium-Type:0 = IEEE-802 Tunnel-Private-Group-Id:0 = "15" Finished request 0. Going to the next request Waking up in 4.9 seconds.
Exmple d'une simple demande d'authentification basée sur l'adresse MAC
fichier de configuration *users* de freeradius
[root@radiustux2 /etc/raddb] $ more users #PC PAT 4031 #005004B7252E Auth-Type := Local, Cleartext-Password := "005004B7252E" 005004B7252E Cleartext-Password := "005004B7252E" Tunnel-type = VLAN, Tunnel-Medium-Type = IEEE-802, Tunnel-Private-Group-ID = 15
attention a l'odre des entrées dans ce fichier, j'ai eu pas mal de soucis tout simplement parce que j'avais ajouté cette entré d'exemple en fin de fichier et que des directives par defaut invalidaient mon test , j'ai resolu mes pb en remontant en debut de fichier cette declaration d'adresse MAC ! cf thrad : http://www.mail-archive.com/freeradius-users@lists.freeradius.org/msg54148.html
Dépilement de la reponse freeradius (radiusd -X )
Listening on authentication address * port 1812 Listening on accounting address * port 1813 Listening on command file /var/run/radiusd/radiusd.sock Listening on proxy address * port 1814 Ready to process requests. rad_recv: Access-Request packet from host 157.159.7.138 port 1025, id=13, length=195 Framed-MTU = 1480 NAS-IP-Address = 157.159.7.138 NAS-Identifier = "Sw-C01" User-Name = "005004B7252E" Service-Type = Framed-User Framed-Protocol = PPP NAS-Port = 20 NAS-Port-Type = Ethernet NAS-Port-Id = "20" Called-Station-Id = "00-1c-2e-b4-f2-6c" Calling-Station-Id = "00-50-04-b7-25-2e" Connect-Info = "CONNECT Ethernet 100Mbps Full duplex" CHAP-Password = 0x007095bd0c5363d28dbf8b72533936e2ed Message-Authenticator = 0x24ce3e78be79f6c62a8be0f7161f7492 +- entering group authorize {...} ++[preprocess] returns ok [suffix] No '@' in User-Name = "005004B7252E", looking up realm NULL [suffix] No such realm "NULL" ++[suffix] returns noop [eap] No EAP-Message, not doing EAP ++[eap] returns noop [files] users: Matched entry 005004B7252E at line 3 ++[files] returns ok [pap] No clear-text password in the request. Not performing PAP. ++[pap] returns noop WARNING: Please update your configuration, and remove 'Auth-Type = Local' WARNING: Use the PAP or CHAP modules instead. CHAP-Password is correct. +- entering group post-auth {...} [echo] expand: %{NAS-Identifier} -> Sw-C01 [echo] expand: %{NAS-Port} -> 20 Exec-Program output: Exec-Program: returned: 0 ++[echo] returns ok Sending Access-Accept of id 13 to 157.159.7.138 port 1025 Tunnel-Type:0 = VLAN Tunnel-Medium-Type:0 = IEEE-802 Tunnel-Private-Group-Id:0 = "15" Finished request 0. Going to the next request Waking up in 4.9 seconds. rad_recv: Accounting-Request packet from host 157.159.7.138 port 1031, id=14, length=111 Acct-Session-Id = "001300000015" Acct-Status-Type = Start Acct-Authentic = RADIUS Acct-Delay-Time = 0 NAS-Port = 20 Calling-Station-Id = "00-50-04-B7-25-2E" Service-Type = Framed-User NAS-IP-Address = 157.159.7.138 NAS-Identifier = "Sw-C01" User-Name = "005004B7252E" +- entering group preacct {...} ++[preprocess] returns ok [acct_unique] Hashing 'NAS-Port = 20,Client-IP-Address = 157.159.7.138,NAS-IP-Address = 157.159.7.138,Acct-Session-Id = "001300000015",User-Name = "005004B7252E"' [acct_unique] Acct-Unique-Session-ID = "6a012a76d447c0ad". ++[acct_unique] returns ok ++[files] returns noop +- entering group accounting {...} [detail] expand: /var/log/radius/radacct/%{Client-IP-Address}/detail-%Y%m%d -> /var/log/radius/radacct/157.159.7.138/detail-20090506 [detail] /var/log/radius/radacct/%{Client-IP-Address}/detail-%Y%m%d expands to /var/log/radius/radacct/157.159.7.138/detail-20090506 [detail] expand: %t -> Wed May 6 16:56:26 2009 ++[detail] returns ok ++[unix] returns ok [radutmp] expand: /var/log/radius/radutmp -> /var/log/radius/radutmp [radutmp] expand: %{User-Name} -> 005004B7252E ++[radutmp] returns ok [attr_filter.accounting_response] expand: %{User-Name} -> 005004B7252E attr_filter: Matched entry DEFAULT at line 12 ++[attr_filter.accounting_response] returns updated Sending Accounting-Response of id 14 to 157.159.7.138 port 1031 Finished request 1. Cleaning up request 1 ID 14 with timestamp +48 Going to the next request Waking up in 4.9 seconds. Cleaning up request 0 ID 13 with timestamp +48 Ready to process requests.
Le client reçoit bien une adresse dans le VLAN15 (157.159.15.X)
[root@elgringo ~]# /etc/init.d/network restart [root@elgringo ~]# ifconfig eth0 Link encap:Ethernet HWaddr 00:50:04:B7:25:2E inet adr:157.159.15.64 Bcast:157.159.15.255 Masque:255.255.255.0