FreeRadius

De OpenWikiBSD
Aller à : navigation, rechercher

Pour quoi faire ?

Du Wifi, du Wifi, du Wifi.... Certains dans les établissements scolaires sautent comme des cabris pour faire mumuse avec leur Smartphone ou pour éviter de débrancher l'imprimante de la salle des profs et lui piquer son câble réseau... (Bon, d'accord, je me retrouve un peu dans la première catégorie..)

Donc, du Wifi. OK Mais du vrai, pas du hotspot public en accès ouvert ou avec une clé WEP en 4 octet dont la passphrase commence par to et finit par to et qui sera affichée sur la machine à café de la salle des profs...

Et un MINIMUM de gestion des clients et de leur utilisateur...


Bref, afin d'installer un service Wifi pas trop troué, on installe un serveur Radius (en VM)....


Comment faire ?

Plusieurs possibilités existent, mais au final, le choix est pour le moins réduit :

  • Le mot de passe est stocké chiffré dans l'annuaire LDAP de manière non-reversible. Donc MS-CHAP côté authentification et PEAP côté protocole.
  • On ne veut pas avoir de certificat client à gérer, donc EAP-TLS.
  • On veut un algorithme de chiffrement robuste donc EAP-MD5 et assez ouvert dont la solidité ne repose pas exclusivement sur la solidité des mots de passe, donc LEAP.

Reste....tada ..

EAP-TTLS


Principe

La connexion est chiffrée en WPA-Enterprise. En gros, un certificat serveur seul est utilisé pour chiffrer la connexion (EAP-TTLS) entre le poste client et le point d'accès Wifi (802.11b & g) qui va servir d'intermédiaire avec le serveur Radius. Ce dernier va alors interroger l'annuaire LDAP pour valider les identifiants de connexion. Très simple pour l'utilisateur (un tout petit peu moins pour l'administrateur ;-) ) et très sécurisé. Les clés de chiffrement sont à usage unique et à changement réguliers.

Le concept :[1]

Installation

  • OS :OpenBSD 4.5
    • Fichiers d'exemple : /usr/local/share/examples/freeradius
    • Fichier de conf : /etc/raddb/radiusd.conf
pkg_add -v http://ftp.arcane-networks.fr/pub/OpenBSD/$(uname -r)/packages/$(uname -m)/freeradius  


echo "if [ -x /usr/local/sbin/radiusd ]; then
	install -d -o _freeradius /var/run/radiusd
	echo -n ' radiusd';	/usr/local/sbin/radiusd
fi
" >> /etc/rc.local
  • Test :
/usr/local/sbin/radiusd -X

....

rlm_eap: SSL error error:02001002:system library:fopen:No such file or directory
rlm_eap_tls: Error reading certificate file /etc/raddb/certs/server.pem
rlm_eap: Failed to initialize type tls

Il manque le certificat serveur indispensable pour l'usage de radius. Ce n'est pas très grave; on sait déjà faire

Il faut coller le certificat serveur.pem dans /etc/raddb/certs/server.pem

et le certificat de l'AC, dans /etc/raddb/certs/ca.pem

cp radius.pem /etc/raddb/certs/server.pem
chmod 744 /etc/raddb/certs/server.pem

Puis faire de même avec le certificat de l'autorité de certification....

cp ca.pem /etc/raddb/certs/ca.pem
chmod 744 /etc/raddb/certs/ca.pem


Vérifiez quand même que tout colle bien côté X509, ça aidera à éviter les soucis ultérieurs :

 openssl verify -verbose  -CApath /etc/raddb/certs/ -CAfile /etc/raddb/certs/ca.pem /etc/raddb/certs/server.pem
/etc/raddb/certs/server.pem: OK



Important Si vous rencontrez toujours cette erreur:


  /usr/local/sbin/radiusd -X

blah blah

 rlm_eap: SSL error error:02001002:system library:fopen:No such file or directory
 rlm_eap_tls: Error reading certificate file /etc/raddb/certs/server.pem
 rlm_eap: Failed to initialize type tls

Sachez qu'il y a un souci dans l'install par défaut de freeradius\OpenBSD. Il manque deux fichiers

dd  if=/dev/urandom of=/etc/raddb/certs/random bs=1024 count=100
openssl dhparam -out /etc/raddb/certs/dh 1024


Et tout rentre dans l'ordre.

/usr/local/sbin/radiusd -X

doit à ce moment être en attente de connexion.

Configuration

Une bonne règle de base avec Feeradius : C'est un outil fort complexe, fort puissant et TRES facile à casser. On fera donc en sorte de ne modifier QUE le strict minimum...

Les fichiers importants

users

Il gère les.....utilisateurs, bravo !

  • Ajoutez un user test, pour le début
echo "
usertest Cleartext-Password := \"password\" 
" >> /etc/raddb/users


clients.conf

Il gère les clients au sens radius (les authenticator, les switches, les AP Wifi).

  • Copie de sauvegarde
cp /etc/raddb/clients.conf /etc/raddb/clients.conf.ORI
  • Ajout des AP Wifi, du serveur Nagios etc..
echo "
   
#Nagios
client Nagios {
secret = SECRETNAGIOS
shortname =  Nagios
ipaddr = @IP NAgios
}
  
#Wifi AP3
client AP3 {
secret = \"SECRET_AP3\"
shortname = AP3
ipaddr = @IP AP3
nastype     = other
}
  
# En local
client localhost {
       ipaddr = 127.0.0.1
       secret          = \"SECRETLOCAL\"
       require_message_authenticator = no
       shortname       = localhost
       nastype     = other
}
" > /etc/raddb/clients.conf

Où les SECRET_XX est le secret partagé entre l'authenticator et le serveur radius.

Si votre supplicant n'est pas correctement enregistré dans clients.conf :

Ignoring request to authentication address * port 1812 from unknown client @IP  port 54762

Réseau

Comme on a eu un souci avec les limitations du matériel , il a fallu aliaser (un petit néologisme pour la route) la carte réseau:

ifconfig em0 alias 192.168.1.9 netmask 255.255.255.0

La carte est donc aliasée (rebelote) :

ifconfig -a
  
em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
inet 172.16.0.223 netmask 0xffff0000 broadcast 172.16.255.255
inet 192.168.1.9 netmask 0xffffff00 broadcast 192.168.1.255

LDAP

Alors, selon cette page , seule l'authentification PAP serait utilisable avec une base d'utilisateurs stockée dans un annuaire OpenLDAP. Ce qu'undique également cette page.


Le schema est là :/usr/local/share/doc/freeradius/examples/openldap.schema

A coller sur le serveur LDAP (Un serveur SambaEdu3, serait bienvenu) dans /etc/ldap/schema/radius.schema

Puis ajouter à /etc/ldap/slapd.conf :

include         /etc/ldap/schema/radius.schema
pkg_add -v http://ftp.arcane-networks.fr/pub/OpenBSD/$(uname -r)/packages/$(uname -m)/freeradius-ldap

Décommenter ldap dans /etc/raddb/sites-enabled/inner-tunnel


Ajouts dans radiusd.conf, dans la section modules :

ldap ldap {
                server = "@IP_SRV_LDAP"
                identity = "cn=admin,BASE_DN"
                password = PASS_admin
                basedn = "BASE_DN"
                filter = "(|(|(uid=%{Stripped-User-Name:-%{User-Name}})(mail=%{Stripped-User-Name:-%{User-Name}}))(mail=%{Stripped-User-Name:-%
{User-Name}}@lyceenobel.org))"
                base_filter = "(objectclass=radiusprofile)"
                ldap_connections_number = 5
                timeout = 4
                timelimit = 3
                net_timeout = 1
                tls {
                        start_tls = no
                }
                dictionary_mapping = ${raddbdir}/ldap.attrmap
                auto_header = yes
                groupname_attribute = radiusGroupName
                groupmembership_filter = "(|(|(uid=%{Stripped-User-Name:-%{User-Name}})(mail=%{Stripped-User-Name:-%{User-Name}}))(mail=%{Strip
ped-User-Name:-%{User-Name}}@lyceenobel.org))"
                groupmembership_attribute = radiusGroupName
                access_attr = "uid"
###     password_attribute = userPassword
        set_auth_type = yes
        }

Enfin, ajouter dans users :

DEFAULT Ldap-UserDN := `uid=%{User-Name},ou=People,BASEDN`

Les logs

Syslog

On va loguer les tentatives de connexion des utilisateurs :

       #  Log authentication requests to the log file.
       #
       #  allowed values: {no, yes}
       #
       auth = no
       

devient

       auth = yes

On relance radius

On peut également loguer les mdp des tentatives de connexions, voire des connexions. Ca me parait TRES risqué d'un pt de vue légal..

   #  allowed values: {no, yes}
       #       
       auth_badpass = no
       auth_goodpass = no

Moi, je ne me risquerais à loguer ces données.

Ce qui donne :

tail -n 500  -f /var/log/radius/radius.log |grep Login

Login OK: [user1] (from client AP4 port 33 cli @MAC1 via TLS tunnel)
Login OK: [user1] (from client AP4 port 33 cli @MAC1)
Login OK: [schwarzp] (from client AP4 port 33 cli @MAC via TLS tunnel)
Login OK: [schwarzp] (from client AP4 port 33 cli @MAC)

MySQL

mysql
create database radius;
grant all on radius.* to USER@localhost identified by 'PASSWORD';
exit
mysql radius <  /usr/local/share/examples/freeradius/sql/mysql/schema.sql

Adapter sql.conf avec les variables de cx.

Ajouter dans /etc/raddb/radiusd.conf, à la fin :

post-auth {
Post-Auth-Type ACCEPT {
               # User OK
       sql
}
Post-Auth-Type REJECT {
           # Login failed: log to SQL database.
           sql
       }
   }

Le fichier contenant les commandes SQL est /etc/raddb/sql/mysql/dialup.conf


Ce qui donne à la fin :

mysql> select * from radpostauth;
+----+-----------+------------------------------------------------------------------+--------------------+---------------------+
| id | username  | pass                                                             | reply              | authdate            |
+----+-----------+------------------------------------------------------------------+--------------------+---------------------+
|  1 | teste     | 0x46313041383633343035344138453741463342363634313135324243343642 | Access-Reject      | 2010-06-10 15:23:54 | 
|  2 | teste     | 0x46313041383633343035344138453741463342363634313135324243343642 | Access-Reject      | 2010-06-10 15:25:58 | 
|  3 | teste     | 0x46313041383633343035344138453741463342363634313135324243343642 | Access-Reject      | 2010-06-10 15:53:28 | 
|  4 | teste     | 0x46313041383633343035344138453741463342363634313135324243343642 | Access-Reject      | 2010-06-10 16:10:57 | 
|  5 | teste     | 0x46313041383633343035344138453741463342363634313135324243343642 | Access-Reject      | 2010-06-10 16:27:25 | 
|  6 | teste     | 0x46313041383633343035344138453741463342363634313135324243343642 | Access-Reject      | 2010-06-10 16:29:07 | 
|  7 | usertest  | password                                                         | Access-Reject      | 2010-06-10 18:21:42 | 
|  8 | usertest  | password                                                         | Access-Reject      | 2010-06-10 18:22:47 | 
+----+-----------+------------------------------------------------------------------+--------------------+---------------------+

Oui, je logue les mdp, enfin leur hash, mais ça me pose souci néanmoins. De plus il faut voir comment loguer les CX réussies.

Monter son FreeWifi-like à soi

Et si aviez envie de faire comme Free ? Tout plein d'AP partout en France (ou ailleurs) et une base d'authentification unique ? Un AP estampillécompatible openBSD-edu.net et vous pouvez vous loguer avec vos identifiants de l'annuaire LDAP distant de plusieurs centaines (milliers ??) de km ?

Trop de la balle!

  • Vous demandez à votre AP d'utiliser comme serveur Radius la patte LAN de votre routeur NAT.
  • Vous redirigez toute requête entrante sur la patte LAN en UDP/1812 vers l@IP publique de votre établissement
rdr pass log on $Interface_LAN proto udp from $PLageIP_WIFI to $@IP_LAN_PEDA  port radius   -> $@WAN_EPLE port radius
  • Sur le routeur de l'établissement, vous faites la manip inverse
rdr pass on $INterface_WAN proto udp from $La_Liste_des_@IP_atutorisees to $@IP_WAN port radius -> $@IP_SRV_RADIUS  port radius


Cerise sur le gateau, si vous utilisez le même SSID qu'au bahut,...c'est totalement transparent! Je vous promet un beau succès d'estime avec vos collègues dont le smartphone configuré pour l'établissement marche à l'identique chez vous et......leur permet de regarder la coupe du monde de foot (Spéciale dédicace Luton ;-) )

Pour info, seule l'auth radius va faire sa centaine de km aller-retour, les paquets suivants ne suivent que VOTRE ligne ADSL, avec le débit qui va bien.

Debug

  • /usr/local/sbin/radiusd -X

Il faut surabuser de cette commande ! Elle est extrêmement explicite et verbeuse. IL est déconseillé de poser une question sur la liste freeradius-users@lists.freeradius.org sans donner la sortie de cette commande


  • Attention, dans ce mode , les logs ne sont pas envoyés sur le fichier de logs (/var/log/radius/radius.log, par défaut)
  • Une fois lancée la commande précédente, essayez :
 radtest testuser password 127.0.0.1 1812 testing123
  • Si la réponse est une suite de
Sending Access-Request of id 194 to 127.0.0.1 port 1812
	User-Name = "testuser"
	User-Password = "password"
	NAS-IP-Address = 127.0.0.1
	NAS-Port = 1812
.
.
.
radclient: no response from server for ID 194 socket 5

Alors radius ne tourne pas

  • Si la réponse est
Sending Access-Request of id 194 to 127.0.0.1 port 1812
	User-Name = "testuser"
	User-Password = "password"
	NAS-IP-Address = 127.0.0.1
	NAS-Port = 1812
rad_recv: Access-Reject packet from host 127.0.0.1 port 1812, id=44, length=20

Alors radius tourne ! C'est un bon début

  • Si la réponse est
Sending Access-Request of id 194 to 127.0.0.1 port 1812
	User-Name = "testuser"
	User-Password = "password"
	NAS-IP-Address = 127.0.0.1
	NAS-Port = 1812
rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=89, length=20

Alors radius tourne et votre user a le droit de se connecter.. Regardez : Access-Accept !

Vous êtes sur la bonne voie.


  • Si jamais ça ne marche toujours pas; une dernière solution :

[2]

Vous collez les logs de radiusd -X dans le formulaire et une colorisation syntaxique avec analyse des logs vous fournit pas mal de réponses.


Soucis rencontrés

  • Le message d'erreur qui m'a le cassé les pieds ...
WARNING: You set Proxy-To-Realm = LOCAL, but the realm does not exist!  Cancelling invalid proxy request.
WARNING: Please update your configuration, and remove 'Auth-Type = Local'
WARNING: Use the PAP or CHAP modules instead. 


WARNING: You set Proxy-To-Realm = LOCAL, but the realm does not exist!  Cancelling invalid proxy request. 

J'ai essayé d'ajouter

DEFAULT EAP-Type == PEAP, Proxy-To-Realm := LOCAL

ou

bart     Auth-Type := MS-CHAP, Cleartext-Password == "pass"

à users

Sans trop de succès... D'où une réinstall (de Freeradius, pas de l'OS...) très rapide.

Les clients, AP Wifi, Switches....

AP WIFI

On utilise des linksys WRT54G& WAP54G (Quasiment le même prix, mais pas de https pour l'interface web, bof bof). Il faut les configurer ainsi : OpenWRT pour avoir l'usage par PacketFence de l'AP

Config

Par défo les WRT54G sont en 192.168.1.1

Par défo les WAP54G sont en 192.168.1.245

Setup

Name : APX

Hostname : APX

Domain: Lyceenobel.org

DHCP

@IP :192.168.1.10X/24

DHCP Server : disable

Wireless

Mode :Mixed

SSID : Nobel

Broadcast SSID : Enable

Security mode : WPA Enterprise

TKIP

@IP RAdius : 192.168.1.99

POrt 1812

Shared_key  :-)


Administration

Mdp

https only

wireless access Enable

remote mgmt no

upnp no


  • On utilise les ports LAN et pas le port WAN (appelé Internet)
  • Basic Setup :
    • DHCP server Disabled
    • Local IP : C'est le GROS souci. On ne peut pas changer le masque comme on veut. Résultat, il faut coller un alias en 192.168.1.0/24 sur la patte du serveur radius. Ce n'est pas très grave, les clients utilisant le plan d'adressage que vous souhaitez.
  • Wireless :
    • WPA Entreprise & TKIP (AES à tester..)
    • @IP du radius et le port (UDP/1812 par défaut)
    • Shared key : C'est le fameux SECRET_XX rentré dans le clients.conf
    • Filtrage Mac, pour un AP permettant aux profs d'utiliser leur portable ou leur smartphone, ça me semble irréaliste..


  • Administration :
    • Forcer le httpS (pas dispo sur les WAP54G ...)
    • Changer le mdp
    • Désactiver Upnp et le remote management..

Itinérance (Roaming) :

Les AP sont configurés pour gérer les déplacements. Si vous commencez à rédiger un article pour le portail du lycée dans la cour et que vous traversez le hall pour aller prendre un café en salle des profs, les AP successifs vont se relayer l'authentification et vous allez poursuivre votre travail.

Portables

Cette doc est tirée de celle produite pour mon ancien lycée; il faut donc que je l'adapte...C'est en cours.

Linux

Gnome

Vous utilisez NetworkManager, et vous avez déjà incorporé le certificat de l'AC, une fois pour toutes.


  • Une fois le Wifi allumé, vous détectez le SSID Nobel :

NetworkManager-Nobel.jpg

  • Vous fournissez vos identifiants habituels du SI:

NetworkManager-credentials.jpg

  • L'attribution des paramètres réseau...

NetworkManager-dhcp.jpg


  • Vous êtes connecté (de manière permanente).

NetworkManager-OK.jpg

NetworkManager-OK-WLAN.jpg

Kde

Non-testé, mais devrait fonctionner sans trop de souci.

Windows

Comme à son habitude, lorsqu'elle arrive sur un marché concurrentiel, la firme de Redmond réinvente la roue plutôt que d'utiliser des standards existants. Microsoft a ainsi inventé PEAP, sous-copie de EAP-TTLS, standard préalable, imposant par là-même à ses utilisateurs des acrobaties inutiles. ....Mais ils ont l'habitude de payer cher pour un service dégradé,ces utilisateurs.Pourquoi changer ?


XP, Vista et Seven ne possèdent pas de client TTLS de base, il faut en télécharger un. Un logiciel gratuit pour usage non commercial (SecureW2) existait, mais une nouvelle politique de licence rend les nouvelles payantes.....

Utilisons donc l'ancienne.. L'ancienne version ne fonctionne pas; il faut utiliser la nouvelle (3.4.0).

Il y a deux possibilités :

- Vous téléchargez sur le site, la dernière version, fonctionnelle 1 mois. Et oui, après ça risque de ne plus fonctionner.

- Le lycée achète une licence globale.

1. Téléchargez le soft.

1.bis. Téléchargez le certificat racine (Clic droit/Enregistrer la cible du lien sous...)

  • Récupérez les certificats de l'AC et du serveur Radius (au format der) en les plaçant dans

- Placer tous les certificats dans le magasin suivant

- Parcourir

- Afficher les magasins physiques

- Autorités de certification racines de confiance

- Ordinateur local


2. Installez le biniou. (Attention, il faut avoir une connexion réseau filaire pour activer le tout.)

Choisissez EAP-TTLS

3. Redémarrez l'ordi.

4.Suivez cette doc

Login & Mdp : Ceux du lycée

Domaine: Rien du tout



Debug

Received an invalid server certificate, please verify your certificate configuration

Vous n'avez pas intégré, au magasin, les bons certificats:

  • Récupérez les certificats de l'AC et du serveur Radius (au format der) en les plaçant dans

- Placer tous les certificats dans le magasin suivant

- Parcourir

- Afficher les magasins physiques

- Autorités de certification racines de confiance

- Ordinateur local

MacOSX Non testé

Smartphone

Il vous faudra, évidemment, une connexion Wifi sur le téléphone..

Iphone

  • Une fois le Wifi allumé, vous détectez le SSID Nobel :

Iphone-Nobel.jpg

  • Vous fournissez vos identifiants habituels du SI:

Iphone-credentials.jpg

  • On vous demande d'accepter le certificat de serveur Radius faraday.lyceenobel.org

Iphone-CA.jpg

...Que vous vérifiez (Plus de détails) par acquis de conscience :

Iphone-X509v3.jpg

La signature DOIT correspondre.

  • Vous êtes connecté (de manière permanente).

Iphone-OK.jpg

Android Non testé

Samsung Non testé

Réseau / Propriétés 802.1X / EAP-TTLS

Nokia Non testé

Non-fonctionel pour le moment


  • Une fois le Wifi allumé, vous détectez le SSID Nobel :

Nokia-Nobel.jpg

Surveillance

Si vous jouez avec radius, il va vite devenir critique...On le surveille ??

Nagios est donc évidemment l'outil adhoc.

Dans /etc/nagios3/objects/service.cfg

######### Radius #####
define service{
use generic-service
hostgroup_name     radius_servers
service_description Radius
check_command check_radius!USER!PASS
}

et dans /etc/nagios-plugins/config/radius.cfg

# 'check_radius' command definition
define command{

command_name check_radius command_line /usr/lib/nagios/plugins/check_radius -F /etc/radiusclient/radiusclient.conf -H '$HOSTADDRESS$' -P 1812 -u '$ARG1$' -p '$ARG2$' }

Ne fonctionne pas ...encore