[Comment] [TUTO] Borne d'accès wifi avec authentification Radius+LDAP
Dernière réponse : dans Connexions réseau et internet
1. Attentes
Nous voulons avoir une borne wifi qui fasse du WPA2-Enterprise (WPA TKIP ou CCMP)
* C'est à dire que le client WIFI demande une adresse IP à la borne.
* La borne envoie au serveur Radius le login/mdp saisis par le client.
* Le serveur Radius regarde quelle «base de données» il doit interroger pour cette borne.
* Il contacte le serveur LDAP pour tester la validité du login/mdp saisi par le client et pour déterminer les droits de ce dernier (ici l'autorisation de connexion).
* En fonction de la réponse reçu, le radius autorise la connexion du client ou non.
2. Pré requis et Conseils
Ce tutoriel fonctionne sur les distributions suivantes:
* Debian Etch
Ce guide a été fait avec une Debian Etch. (choix personnel)
* Il vous faut un annuaire LDAP installé, configuré et fonctionnel
Personnellement j'ai donc utilisé OpenLDAP avec smbldap-tools, qui permet de construire la base d'architecture d'un annuaire !
* Une carte wifi qui accepte le mode AP (ou master), les cartes avec les chipset Atheros le font !
Afin que ce guide corresponde totalement à votre environnement, je vous conseille de modifier le niveau de priorité de Debconf. Sur la nouvelle Debian Etch et sur Ubuntu le niveau de Debconf est à «Élevé», ce qui réduit sensiblement le nombre de questions qui vous ait posé lors de l'installation d'un paquet. On va donc passer le niveau à «Intermédiaire» voir à «Basse» pour contrôler un maximum les paramètres.
Pour cela tapez en root :
Choisissez "Dialogue" puis «Intermédiaire» ou «Basse»
Je vous conseille grandement d'utiliser le même mot de passe que celui de votre utilisateur root à chaque fois qu'on vous demande un mot de passe. Cela évitera les erreurs !! (lors des tests, à changer dès que cela fonctionne)
16-10-2010 : J'ajoute que depuis, mon avis sur le sujet est plus en adéquation avec le modo...
3. Installation du serveur Freeradius
En effet cela est valable pendant les tests. Par la suite une politique de mots de passe est préférable !
Installation
Il vous faut récupérer le code source de Freeradius ! En effet un problème de licence d'un des modules de Freeradius (rlm_eap_tls) fait que celui-ci ne se trouve pas dans le paquet fourni avec la Debian !
freeradius-server-2.1.1.tar.gz
ou ici pou ceux qui veulent ce documenter :Site officiel
Je passe les détails de la compilation en dehors du fait qu'il faut certains paquets pour compiler du code :
Les versions de ces paquets sont ceux de Debian Etch au moment de mon installation. (Aujourd'hui 01/09/2008).
libssl-dev et openssl 0.9.8c-4etch3
Décompressez l'archive dans un dossier, allez dans le dossier extrait et tapez les commandes suivantes :
puis en root
Cela installera, les exécutables dans /usr/bin, les fichiers de configurations dans /usr/etc, les journaux dans /usr/log/raddb.
Tests
Vous pouvez dès à présent tester le serveur freeradius avec la ligne de commande suivante :
Attention : Lors du premier lancement il y a création des certificats. Ce sont ceux par défaut. Ils se trouvent dans /usr/etc/raddb/certs. Ils sont utilisés dans le fichier modules/inner-eap.
En root :
Votre serveur Radius écoute et attend !
Vous pouvez l'arrêter avec CTRL+C
Si des erreurs apparaissent, vérifiez bien vos paramètres et consultez les logs.
Configuration de Freeradius
Nous allons modifier quelques fichiers : clients.conf, radiusd.conf, modules/ldap, site-enabled/default, site-enabled/inner-tunnel.
Tout d'abord le fichier clients.conf :
Le fichier radiusd.conf :
Nous allons modifier que la partie « journaux ».
Le fichier modules/ldap :
Le fichier site-enabled/default :
Nous modifions la partie « authorize » et « authenticate ».
Le fichier sites-enabled/inner-tunnel :
Nous modifions la partie « autorize » et « authenticate ».
Normalement votre serveur Radius est près... Vous devriez pouvoir lancer radius -X, pour vérifier les alertes !
4. Installation de la borne
Installation
Vous pouvez suivre le tutos rapide : AP
Il faut installer les mêmes paquets... hostapd...
Configuration de la borne AP
Le fichier /etc/hostapd/hostapd.conf :
Création du script de lancement de la borne AP
Nous créons un script bash qui lancera les commandes de destruction, construction, configuration et de paramètres de la borne AP. Ce script sera dans /etc/init.d
Configuration du serveur DHCP
Le fichier se trouve : /etc/dhcpd3/dhcpd.conf :
5. Adaptation de notre annuaire
Nous devons ajouté l' ObjectClass = radiusProfile à nos comptes utilisateurs. Pour cela au par avant il faut ajouter le schéma Radius à notre annuaire.
Le schéma se trouve dans : /làoùvousavezdécompressélesource/freeradius-server-$version/doc/examples/openldap.schema.
Renommez le en freeradius.schema et mettez le dans /etc/ldap/schema.
Redémarrez le processus LDAP : # /etc/init.d/slapd restart
Et ajouter l'attribut « dialupAccess », j'ai mis la valeur « yes », mais peu importe.
Faites le avec phpLDAPadmin ou ApacheDirectoryStudio.
J'ai aussi modifié le script perl smbldap-useradd pour ajouter cet attribut.
Modifiez cette partie à partir de la ligne 330 :
En :
6. Comptabilité Radius :
Radius offre la possibilité de faire de la comptabilité (appelé accounting). En effet on peut enregistrer un certain nombre de données informatives telles que :
L'heure de connexion, l'identifiant, par quel NAS (borne), le nombre d'octets entrants/sortants, etc...
Ceci peut-être pratique si vous avez à facturer ou tout simplement compter les connexions !
Pour cela rien de plus simple(*).
1. Création d'une base de données avec les tables.
2. Modification de la configuration Radius et redémarrage de celui-ci.
Création de la base :
L'installation : # apt-get install mysql-server-5.0
On vous demande le mot de passe qu'il faut mettre à l'administrateur de MySQL
Création de la base de données « radius » :
Dans le répertoire d'installation de radius et mysql, il y a un fcihier /usr/etc/raddb/sql/mysql/schema.sql, nous allons l'utiliser pour créer les tables, etc...
Deux tables nous intéresserons : radpostauth et radacct.
Modification de Radius :
Nous allons modifier le fichier site-enable/default
Dans la partie « accounting » : concerne la table « radacct »
Dans la partie « post-auth» : concerne la table « radpostauth »
(*) : Oui pourquoi cette étoile...
Et bien voilà, le rien de plus simple a durée 5-6 jours, en effet dans le hostapd.conf j'avais renseigné deux fois la même variable impliquant l'oublie d'une autre !
La variable renseignée deux fois était : auth_server_shared_secret
Au lieu de renseigner auth_server_shared_secret et acct_server_shared_secret !!!
Il n'y avait donc pas de valeur pour acct_server_shared_secret, donc pas d' « accounting » !!!! :-/
Remarque : l'accounting ne sert pas à grand chose si, personne n'a accès aux données.
Pour cela nous allons installer un serveur web avec les modules PHP et MySQL :
Redémarrez apache : #/etc/init.d/apache2 restart
Les pages apache sont mises dans /var/www. Nous allons donc créer un répertoire "radius" pour y placer les pages "accounting". Ce répertoire doit être en lecture pour le processus d'apache tournant sous "www-data".
Nous allons créer trois pages PHP :
- page de connexion à MySQL pour la base de données "radius".
- page d'entré récapitulant toutes les sessions radius et de sélection des utilisateurs.
- page de résultats de la sélection.
La page de connexion BDD config.inc.db.php :
La page par défaut index.php :
La page de résultats resultat.php :
Ce qui devrait donner :
La page par défaut :
![]()
La page résultats :
![]()
7. Conclusion
J'ai tenté rapidement de faire un tuto simple, style copier/coller, pour n'aller qu'a l'essentiel !
Mais je vous recommande de vous documenter ! Vous trouverez ici et là des tutos qui vous indiquent de mettre dans le fichier « users » la valeur :
DEFAULT Auth-Type == LDAP
Fall-Through = 0
Ceci est faux comme le dit le développeur principale de Freeradius !
http://readlist.com/lists/lists.freeradius.org/freeradi...
http://deployingradius.com/documents/protocols/oracles....
http://deployingradius.com/blog/
8. Bibliographie
http://www.editions-eyrolles.com/Livre/9782212120073/au...
http://lists.shmoo.com/pipermail/hostap/2005-September/...
http://linux.sys-con.com/node/46902
http://fr.wikipedia.org/wiki/Wi-Fi_Protected_Access#WPA...
http://www.nantes-wireless.org/actu/article.php3?id_art...
http://crip-agalan.ujf-grenoble.fr/technique/Radius/fre...
http://www.keller.com/wifi/CNIT107HW7.html
http://ubuntuforums.org/showthread.php?t=151781
http://cisler.net/writing/rad.html
http://www.davidgis.fr/blog/index.php?2008/01/19/276-fr...
http://vuksan.com/linux/dot1x/802-1x-LDAP.html
http://smhteam.info/wiki/index.linux.php5?wiki=Configur...
http://deployingradius.com/documents/protocols/oracles....
8. Légende
!unmotdepassefort! est un mot de passe de 8 caractères alpha-numériques au moins !
!unmotdepassetrèstrèsfort! est un mot de passe d'au moins 16 caractères alpha-numériques ! (C'est lui qu'il ne faut pas qu'on réussisse à casser !!!). Pour exemple le miens était : f55d75ac2fitib16_tilu
DOMAIN : Est le nom de domaine tronqué de l'annuaire. Construit à partir de domain.local.
Désengagement : Ce tuto n'est pas suivre si vous ne connaissez pas comment vous en sortir. En effet le service Radius sous Linux contient au moins un vingtaine de fichiers. Il vous sera très difficile de retomber sur vos pieds si vous mettez le bazar dans les fichiers ! Bref prudence et documentez-vous !
Nous voulons avoir une borne wifi qui fasse du WPA2-Enterprise (WPA TKIP ou CCMP)
* C'est à dire que le client WIFI demande une adresse IP à la borne.
* La borne envoie au serveur Radius le login/mdp saisis par le client.
* Le serveur Radius regarde quelle «base de données» il doit interroger pour cette borne.
* Il contacte le serveur LDAP pour tester la validité du login/mdp saisi par le client et pour déterminer les droits de ce dernier (ici l'autorisation de connexion).
* En fonction de la réponse reçu, le radius autorise la connexion du client ou non.
2. Pré requis et Conseils
Ce tutoriel fonctionne sur les distributions suivantes:
* Debian Etch
Ce guide a été fait avec une Debian Etch. (choix personnel)
* Il vous faut un annuaire LDAP installé, configuré et fonctionnel
Personnellement j'ai donc utilisé OpenLDAP avec smbldap-tools, qui permet de construire la base d'architecture d'un annuaire !
* Une carte wifi qui accepte le mode AP (ou master), les cartes avec les chipset Atheros le font !
Afin que ce guide corresponde totalement à votre environnement, je vous conseille de modifier le niveau de priorité de Debconf. Sur la nouvelle Debian Etch et sur Ubuntu le niveau de Debconf est à «Élevé», ce qui réduit sensiblement le nombre de questions qui vous ait posé lors de l'installation d'un paquet. On va donc passer le niveau à «Intermédiaire» voir à «Basse» pour contrôler un maximum les paramètres.
Pour cela tapez en root :
dpkg-reconfigure debconf
Choisissez "Dialogue" puis «Intermédiaire» ou «Basse»
Je vous conseille grandement d'utiliser le même mot de passe que celui de votre utilisateur root à chaque fois qu'on vous demande un mot de passe. Cela évitera les erreurs !! (lors des tests, à changer dès que cela fonctionne)
Spoiler
Edit modo : je suis d'avis contraire
16-10-2010 : J'ajoute que depuis, mon avis sur le sujet est plus en adéquation avec le modo...
3. Installation du serveur Freeradius
En effet cela est valable pendant les tests. Par la suite une politique de mots de passe est préférable !
Installation
Il vous faut récupérer le code source de Freeradius ! En effet un problème de licence d'un des modules de Freeradius (rlm_eap_tls) fait que celui-ci ne se trouve pas dans le paquet fourni avec la Debian !
freeradius-server-2.1.1.tar.gz
ou ici pou ceux qui veulent ce documenter :Site officiel
Je passe les détails de la compilation en dehors du fait qu'il faut certains paquets pour compiler du code :
apt-get install openssl libssl libssl-dev libldap2-dev g++ build-essential debian-builder libstdc++6.4-1-dev libmysqlclient15-dev
Les versions de ces paquets sont ceux de Debian Etch au moment de mon installation. (Aujourd'hui 01/09/2008).
libssl-dev et openssl 0.9.8c-4etch3
Décompressez l'archive dans un dossier, allez dans le dossier extrait et tapez les commandes suivantes :
./configure --prefix=/usr --libdir=/usr/lib --with-experimental-modules
make
puis en root
make install
Cela installera, les exécutables dans /usr/bin, les fichiers de configurations dans /usr/etc, les journaux dans /usr/log/raddb.
Tests
Vous pouvez dès à présent tester le serveur freeradius avec la ligne de commande suivante :
Attention : Lors du premier lancement il y a création des certificats. Ce sont ceux par défaut. Ils se trouvent dans /usr/etc/raddb/certs. Ils sont utilisés dans le fichier modules/inner-eap.
En root :
radiusd -X
FreeRADIUS Version 2.1.1, for host i686-pc-linux-gnu, built on Sep 30 2008 at 07:25:52
Copyright (C) 1999-2008 The FreeRADIUS server project and contributors.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
You may redistribute copies of FreeRADIUS under the terms of the
GNU General Public License v2.
Starting - reading configuration files ...
including configuration file /usr//etc/raddb/radiusd.conf
bla bla .......
listen {
type = "acct"
ipaddr = *
port = 0
}
Listening on authentication address * port 1812
Listening on accounting address * port 1813
Listening on proxy address * port 1814
Ready to process requests.
Votre serveur Radius écoute et attend !
Vous pouvez l'arrêter avec CTRL+C
Si des erreurs apparaissent, vérifiez bien vos paramètres et consultez les logs.
Configuration de Freeradius
Nous allons modifier quelques fichiers : clients.conf, radiusd.conf, modules/ldap, site-enabled/default, site-enabled/inner-tunnel.
Tout d'abord le fichier clients.conf :
client localhost {
# Cette partie permet l'authentification de la borne
# au près du service Radius si la borne est sur la
# même machine.
ipaddr = 127.0.0.1
secret = !unmotdepassetrèstrèsfort!
require_message_authenticator = no
shortname = localhost
#
# The nastype tells 'checkrad.pl' which NAS-specific method to
# use to query the NAS for simultaneous use.
#
# Permitted NAS types are:
#
# cisco
# computone
# livingston
# max40xx
# multitech
# netserver
# pathras
# patton
# portslave
# tc
# usrhiper
# other # for all other types
#
nastype = other # localhost isn't usually a NAS...
}
client adrIP/mask {
# Cette partie permet l'authentification de la borne
# au près du service Radius si la borne est sur l'
# adresse réseau adrIP/mask.
secret = !unmotdepassetrèstrèsfort!
shortname = private-network-2 # un nom quelconque de ce réseau
}
Le fichier radiusd.conf :
Nous allons modifier que la partie « journaux ».
#
# Logging section. The various "log_*" configuration items
# will eventually be moved here.
#
log {
.... bla bla ...
#
stripped_names = yes
# Log authentication requests to the log file.
#
# allowed values: {no, yes}
#
auth = yes
# Log passwords with the authentication requests.
# auth_badpass - logs password if it's rejected
# auth_goodpass - logs password if it's correct
#
# allowed values: {no, yes}
#
auth_badpass = yes
auth_goodpass = yes
}
Le fichier modules/ldap :
ldap {
#
# Note that this needs to match the name in the LDAP
# server certificate, if you're using ldaps.
server = "nomdhote"
identity = "cn=admin,dc=DOMAIN,dc=local"
password = !motdepasseadminldap!
basedn = "dc=DOMAIN,dc=local"
filter = "(&(uid=%{Stripped-User-Name:-%{User-Name}})(dialupAccess=yes))"
# Cela implique qu'il faut que cel soit un utilisateur LDAP et qu'il y est
# l'attribut dialupAccess=yes
base_filter = "(objectclass=radiusprofile)"
.... bla bla ....
# default_profile = "cn=radprofile,ou=dialup,dc=dom-sln,dc=local"
# profile_attribute = "radiusProfileDn"
access_attr = "dialupAccess"
# Cet attribut LDAP nous permettra de filtrer les utilisateurs autorisés
# ou pas ! Si dialupAccess alors autorisés, sinon pas !
# Là il vous faudra ajouter cet attribut à chaque compte utilisateur,
# de l'annuaire, autorisé à se connecter à la borne
# J'essayerais par les groupes ! ;) Voir plus bas !
# Mapping of RADIUS dictionary attributes to LDAP
.... bla bla ...
password_attribute = userPassword
# Un-comment the following to disable Novell
.... bla bla ....
}
Le fichier site-enabled/default :
Nous modifions la partie « authorize » et « authenticate ».
authorize {
.... bla bla ....
#
# The ldap module will set Auth-Type to LDAP if it has not
# already been set
ldap
.... bla bla ....
#
# Use the checkval module
checkval
.... bla bla ....
}
.....
authenticate {
.... bla bla ....
# Uncomment it if you want to use ldap for authentication
#
# Note that this means "check plain-text password against
# the ldap database", which means that EAP won't work,
# as it does not supply a plain-text password.
Auth-Type LDAP {
ldap
}
#
# Allow EAP authentication.
eap
}
Le fichier sites-enabled/inner-tunnel :
Nous modifions la partie « autorize » et « authenticate ».
authorize {
.... bla bla ....
#
# The ldap module will set Auth-Type to LDAP if it has not
# already been set
ldap
.... bla bla ....
#
# Use the checkval module
checkval
.... bla bla ....
}
.... bla bla ....
authenticate {
.... bla bla ....
# Uncomment it if you want to use ldap for authentication
#
# Note that this means "check plain-text password against
# the ldap database", which means that EAP won't work,
# as it does not supply a plain-text password.
Auth-Type LDAP {
ldap
}
#
# Allow EAP authentication.
eap
}
Normalement votre serveur Radius est près... Vous devriez pouvoir lancer radius -X, pour vérifier les alertes !
4. Installation de la borne
Installation
Vous pouvez suivre le tutos rapide : AP
Il faut installer les mêmes paquets... hostapd...
Configuration de la borne AP
Le fichier /etc/hostapd/hostapd.conf :
interface=nominterface (eth0, ath0, ra0, etc...)
ssid=VotreESSID
driver=votrepilote (madwifi, ndiswrapper, wext, wired, etc...)
logger_syslog=-1
logger_syslog_level=4
logger_stdout=--1
logger_stdout_level=4
debug=4
ctrl_interface_group=0
# Comment gérer les adresses MAC (adresse Hardware des cartes réseaux)
# C'est une sécurité qui peut facilement être contournée, mais est
# néanmoins pratique, car elle est facile à mettre en place
# En effet, hostAPd va vérifier l'adresse MAC de la carte Wifi qui fait une
# demande d'accès et pourra alors, sur cette seule adresse, soit continuer le
# processus d'identification, soit s'arrêter et refuser la carte.
# Les paramètres possibles sont les suivants :
# 0 : Tout accepter à moins qu'elle ne soit dans la liste noire
# 1 : Tout refuser, à moins qu'elle ne soit dans la liste blanche
# 2 : Vérifier l'adresse auprès d'un serveur RADIUS (honnêtement, pour son réseau local, ça ne sert à rien)
# Le meilleur paramètre pour commencer est 1. Ça réduit de beaucoup les risques de piratage.
macaddr_acl=2
#deny_mac_file=/etc/hostapd/hostapd.deny
#accept_mac_file=/etc/hostapd/hostapd.accept
ieee8021x=1
own_ip_addr= adrIP
nas_identifier=nomdhote
auth_server_addr= adrIP
auth_server_port=1812
auth_server_shared_secret=!unmotdepassetrèstrèsfort!
acct_server_addr= adrIP
acct_server_port=1813
acct_server_shared_secret=!unmotdepassetrèstrèsfort!
radius_acct_interim_interval=6
wpa=3
wpa_key_mgmt=WPA-EAP
wpa_pairwise=TKIP CCMP
wpa_group_rekey=300
wpa_gmk_rekey=6400
Création du script de lancement de la borne AP
Nous créons un script bash qui lancera les commandes de destruction, construction, configuration et de paramètres de la borne AP. Ce script sera dans /etc/init.d
#!/bin/sh
# Création de la carte ath0 et du point d'accès debian-AP
echo "Création de la carte ath0 et du point d'accès debian-AP";
ifconfig NomCarte down;
wlanconfig NomCarte destroy;
wlanconfig NomCarte create wlandev wifi0 wlanmode ap;
echo "Veuillez patienter...";
sleep 2;
echo "Activation de ath0";
ifconfig NomCarte mtu 1492 adrIP netmask mask up;
kill `pidof radiusd`;
radiusd;
killall hostapd;
/usr/sbin/hostapd -B -P /var/run/hostapd.pid -dd -K -t /etc/hostapd/hostapd.conf.wpa2-enterprise;
echo "Veuillez patienter...";
sleep 1;
echo "Mise en place des options du point d'accès debian-AP";
iwconfig NomCarte key restricted;
iwconfig NomCarte nickname "unNickName";
echo "Veuillez patienter...";
sleep 1;
echo "Mise en place des options DHCP";
/etc/init.d/dhcp3-server restart;
echo "Veuillez patienter...";
sleep 1;
iwconfig NomCarte channel VotreCanal;
echo "Veuillez patienter...";
sleep 1;
echo "Mise en place du routage NAT internet";
echo 1 > /proc/sys/net/ipv4/ip_forward;
iptables -t nat -A POSTROUTING -o NomCarteInternet -j MASQUERADE;
/etc/init.d/samba restart;
Configuration du serveur DHCP
Le fichier se trouve : /etc/dhcpd3/dhcpd.conf :
ddns-update-style none;
option domain-name "DOMAIN.local";
default-lease-time 600;
max-lease-time 7200;
# If this DHCP server is the official DHCP server for the local
# network, the authoritative directive should be uncommented.
authoritative;
# Use this to send dhcp log messages to a different log file (you also
# have to hack syslog.conf to complete the redirection).
log-facility local7;
# wifi
subnet adrIPrz netmask mask {
range IP1 IP2;
option domain-name-servers IPDNS1, IPDNS2, IPDNS3;
option routers adrIP;
option broadcast-address adrIPbroadcast;
default-lease-time 600;
max-lease-time 7200;
}
5. Adaptation de notre annuaire
Nous devons ajouté l' ObjectClass = radiusProfile à nos comptes utilisateurs. Pour cela au par avant il faut ajouter le schéma Radius à notre annuaire.
Le schéma se trouve dans : /làoùvousavezdécompressélesource/freeradius-server-$version/doc/examples/openldap.schema.
Renommez le en freeradius.schema et mettez le dans /etc/ldap/schema.
Redémarrez le processus LDAP : # /etc/init.d/slapd restart
Et ajouter l'attribut « dialupAccess », j'ai mis la valeur « yes », mais peu importe.
Faites le avec phpLDAPadmin ou ApacheDirectoryStudio.
J'ai aussi modifié le script perl smbldap-useradd pour ajouter cet attribut.
Modifiez cette partie à partir de la ligne 330 :
} else {
$add = $ldap_master->add ("uid=$userName,$config{usersdn}",
attr => [
'objectclass' => ['top','person', 'organizationalPerson', 'inetOrgPerson','posixAccount','shadowAccount'],
'cn' => "$userCN",
'sn' => "$userSN",
'givenName' => "$givenName",
'uid' => "$userName",
'uidNumber' => "$userUidNumber",
'gidNumber' => "$userGidNumber",
'homeDirectory' => "$userHomeDirectory",
'loginShell' => "$config{userLoginShell}",
'gecos' => "$config{userGecos}",
'userPassword' => "{crypt}x"
]
);
}
En :
} else {
$add = $ldap_master->add ("uid=$userName,$config{usersdn}",
attr => [
'objectclass' => ['top','person', 'organizationalPerson', 'inetOrgPerson','posixAccount','shadowAccount','radiusProfile'],
'cn' => "$userCN",
'sn' => "$userSN",
'givenName' => "$givenName",
'uid' => "$userName",
'uidNumber' => "$userUidNumber",
'gidNumber' => "$userGidNumber",
'homeDirectory' => "$userHomeDirectory",
'loginShell' => "$config{userLoginShell}",
'gecos' => "$config{userGecos}",
'userPassword' => "{crypt}x",
'dialupAccess' => "Si pas d acces effacez cet attribut !"
]
);
}
6. Comptabilité Radius :
Radius offre la possibilité de faire de la comptabilité (appelé accounting). En effet on peut enregistrer un certain nombre de données informatives telles que :
L'heure de connexion, l'identifiant, par quel NAS (borne), le nombre d'octets entrants/sortants, etc...
Ceci peut-être pratique si vous avez à facturer ou tout simplement compter les connexions !
Pour cela rien de plus simple(*).
1. Création d'une base de données avec les tables.
2. Modification de la configuration Radius et redémarrage de celui-ci.
Création de la base :
L'installation : # apt-get install mysql-server-5.0
On vous demande le mot de passe qu'il faut mettre à l'administrateur de MySQL
Création de la base de données « radius » :
# mysql -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 173
Server version: 5.0.32-Debian_7etch6-log Debian etch distribution
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> create database radius;
Query OK, 1 row affected (0.01 sec)
mysql> quit
Bye
Dans le répertoire d'installation de radius et mysql, il y a un fcihier /usr/etc/raddb/sql/mysql/schema.sql, nous allons l'utiliser pour créer les tables, etc...
# mysql -p radius < /usr/etc/raddb/sql/mysql/schema.sql
Enter password:
Deux tables nous intéresserons : radpostauth et radacct.
Modification de Radius :
Nous allons modifier le fichier site-enable/default
Dans la partie « accounting » : concerne la table « radacct »
accounting {
...
#
# Log traffic to an SQL database.
#
# See "Accounting queries" in sql.conf
sql
...
}
Dans la partie « post-auth» : concerne la table « radpostauth »
post-auth {
...
#
# After authenticating the user, do another SQL query.
#
# See "Authentication Logging Queries" in sql.conf
sql
...
}
(*) : Oui pourquoi cette étoile...
Et bien voilà, le rien de plus simple a durée 5-6 jours, en effet dans le hostapd.conf j'avais renseigné deux fois la même variable impliquant l'oublie d'une autre !
La variable renseignée deux fois était : auth_server_shared_secret
Au lieu de renseigner auth_server_shared_secret et acct_server_shared_secret !!!
Il n'y avait donc pas de valeur pour acct_server_shared_secret, donc pas d' « accounting » !!!! :-/
Remarque : l'accounting ne sert pas à grand chose si, personne n'a accès aux données.
Pour cela nous allons installer un serveur web avec les modules PHP et MySQL :
# apt-get install apache2-mpm-prefork php5-mysql php5-ldap libapache2-mod-php5
Redémarrez apache : #/etc/init.d/apache2 restart
Les pages apache sont mises dans /var/www. Nous allons donc créer un répertoire "radius" pour y placer les pages "accounting". Ce répertoire doit être en lecture pour le processus d'apache tournant sous "www-data".
# mkdir /var/www/radius
# chmod 755 /var/www/radius
Nous allons créer trois pages PHP :
- page de connexion à MySQL pour la base de données "radius".
- page d'entré récapitulant toutes les sessions radius et de sélection des utilisateurs.
- page de résultats de la sélection.
La page de connexion BDD config.inc.db.php :
<?php
// L'hôte sur le quel est la base de donn?e
$host="localhost";
// Le login superuser de MySQL
$user="root";
// Son mots de passe
$pass="motdepasseadminmysql";
// Le nom de la base de données
$DB="radius";
// Connexion à MySQL sur $host
$message = "échec de la connexion.<br>";
$message = $message . "Le serveur est inaccessible, ou le service de base de données est arrêtée ...<br>";
$message = $message . "Veuillez contacter l'administrateur<br>";
$message = $message;
$link = mysql_connect($host, $user, $pass) or die($message);
// S?lection de la base $DB
$message = "échec de la base de données.<br>";
$message = $message . "La base de donn?es est inaccessible...<br>";
$message = $message . "Veuillez contacter l'administrateur<br>";
$message = $message;
$sel = mysql_select_db($DB) or die($message);
?>
La page par défaut index.php :
<?php
// // Connexion la base de donnée
include ("conf.inc.db.php");
// La requète
$sql = "SELECT * FROM radacct ORDER BY radacctid DESC";
?>
<body bgcolor="#B4B3C6">
<h1><p align=center><strong><u>Radius Accounting</u></strong></p></h1>
<?PHP
$req = mysql_query($sql) or die('Requète mal formulïée');
echo "<table border='1' align='center' bgcolor='#ADADAD'><tbody bgcolor='Gray'>";
echo "<tr bgcolor='Silver'>";
echo "<td>Identifiant Comptable</td>";
echo "<td>Nom utilisateur</td>";
echo "<td>KOctets entrés</td>";
echo "<td>KOctets sortis</td>";
echo "<td>Heure et date début</td>";
echo "<td>Heure et date fin</td>";
echo "</tr>";
while($data = mysql_fetch_assoc($req))
{
$koin=round (intval ($data['acctinputoctets'])/1024, 2); //plus agréable en Ko
$koout=round (intval ($data['acctoutputoctets'])/1024, 2); //plus agréable en Ko
if ($data['acctstoptime']=='') {
$data['acctstoptime']="<font color='Red'>Session en cours</font>";
}
echo "<tr bgcolor='#00C0C0'>";
echo "<td>".$data['radacctid']."</td>";
echo "<td>".$data['username']."</td>";
echo "<td>".$koin."</td>";
echo "<td>".$koout."</td>";
echo "<td>".$data['acctstarttime']."</td>";
echo "<td>".$data['acctstoptime']."</td>";
echo "</tr>";
}
echo "</tbody></table>";
?>
<br><br>
<center>
Choisissez un utilisateur :
<FORM method="POST" action="resultat.php" name="formulaire" class="txt">
<SELECT name="username">
<?PHP
$sql = 'SELECT DISTINCT username from radacct ORDER by username';
$req = mysql_query($sql) or die('Requète mal formulïée');
//echo '<option></option>';
while($data = mysql_fetch_assoc($req))
{
if ($data['username'] != "") {
echo "<option value=\"".htmlentities($data['username'])."\">".htmlentities($data['username'])."</option>";
}
}
?>
</select>
<INPUT type="submit" name="recherche" value="Afficher">
</FORM>
</center>
</body>
La page de résultats resultat.php :
<?php
// // Connexion la base de donnée
include ("conf.inc.db.php");
// Réccupération des variable postées
$username = $_POST['username'];
?>
<body bgcolor="#B4B3C6">
<h1><p align=center><strong><u>Radius Accounting</u></strong></p></h1>
<?PHP
$sql = "SELECT * FROM radacct WHERE username='$username'";
$req = mysql_query($sql) or die('Requète mal formulïée 1');
echo "<table border='1' align='center' bgcolor='#ADADAD'><tbody bgcolor='Gray'>";
echo "<tr bgcolor='Silver'>";
echo "<td>Identifiant Comptable</td>";
echo "<td>Nom utilisateur</td>";
echo "<td>KOctets entrés</td>";
echo "<td>KOctets sortis</td>";
echo "<td>Heure et date début</td>";
echo "<td>Heure et date fin</td>";
echo "</tr>";
while($data = mysql_fetch_assoc($req))
{
$koin=round (intval ($data['acctinputoctets'])/1024, 2);
$koout=round (intval ($data['acctoutputoctets'])/1024, 2);
if ($data['acctstoptime']=='') {
$data['acctstoptime']="<font color='Red'>Session en cours</font>";
}
echo "<tr bgcolor='#00C0C0'>";
echo "<td>".$data['radacctid']."</td>";
echo "<td>".$data['username']."</td>";
echo "<td>".$koin."</td>";
echo "<td>".$koout."</td>";
echo "<td>".$data['acctstarttime']."</td>";
echo "<td>".$data['acctstoptime']."</td>";
echo "</tr>";
}
echo "</tbody></table>";
?>
<br><br>
<center>
Choisissez un utilisateur :
<FORM method="POST" action="resultat.php" name="formulaire" class="txt">
<SELECT name="username">
<?PHP
$sql = 'SELECT DISTINCT username from radacct ORDER by username';
$req = mysql_query($sql) or die('Requète mal formulïée');
//echo '<option></option>';
while($data = mysql_fetch_assoc($req))
{
if ($data['username'] != "") {
echo "<option value=\"".htmlentities($data['username'])."\">".htmlentities($data['username'])."</option>";
}
}
?>
</select>
<INPUT type="submit" name="recherche" value="Afficher">
</FORM>
</center>
<br><br>
<center>
<FORM method="POST" action="index.php">
<INPUT type="submit" name="reset" value="Revenir">
</FORM>
</center>
</body>
Ce qui devrait donner :
La page par défaut :

La page résultats :

7. Conclusion
J'ai tenté rapidement de faire un tuto simple, style copier/coller, pour n'aller qu'a l'essentiel !
Mais je vous recommande de vous documenter ! Vous trouverez ici et là des tutos qui vous indiquent de mettre dans le fichier « users » la valeur :
DEFAULT Auth-Type == LDAP
Fall-Through = 0
Ceci est faux comme le dit le développeur principale de Freeradius !
http://readlist.com/lists/lists.freeradius.org/freeradi...
http://deployingradius.com/documents/protocols/oracles....
http://deployingradius.com/blog/
8. Bibliographie
http://www.editions-eyrolles.com/Livre/9782212120073/au...
http://lists.shmoo.com/pipermail/hostap/2005-September/...
http://linux.sys-con.com/node/46902
http://fr.wikipedia.org/wiki/Wi-Fi_Protected_Access#WPA...
http://www.nantes-wireless.org/actu/article.php3?id_art...
http://crip-agalan.ujf-grenoble.fr/technique/Radius/fre...
http://www.keller.com/wifi/CNIT107HW7.html
http://ubuntuforums.org/showthread.php?t=151781
http://cisler.net/writing/rad.html
http://www.davidgis.fr/blog/index.php?2008/01/19/276-fr...
http://vuksan.com/linux/dot1x/802-1x-LDAP.html
http://smhteam.info/wiki/index.linux.php5?wiki=Configur...
http://deployingradius.com/documents/protocols/oracles....
8. Légende
!unmotdepassefort! est un mot de passe de 8 caractères alpha-numériques au moins !
!unmotdepassetrèstrèsfort! est un mot de passe d'au moins 16 caractères alpha-numériques ! (C'est lui qu'il ne faut pas qu'on réussisse à casser !!!). Pour exemple le miens était : f55d75ac2fitib16_tilu
DOMAIN : Est le nom de domaine tronqué de l'annuaire. Construit à partir de domain.local.
Désengagement : Ce tuto n'est pas suivre si vous ne connaissez pas comment vous en sortir. En effet le service Radius sous Linux contient au moins un vingtaine de fichiers. Il vous sera très difficile de retomber sur vos pieds si vous mettez le bazar dans les fichiers ! Bref prudence et documentez-vous !
Autres pages sur : tuto borne acces wifi authentification radius ldap
Lassé par la pub ? Créez un compte
Lassé par la pub ? Créez un compte
- Contenus similaires :
Tags :
- ForumWifi authentification radius
- ForumWifi authentification
- ForumWifi authentification radius ki cone
- ForumBorne wifi radius
- ForumAuthentification wifi radius
- ForumTransformer son pc en borne wifi
- ForumPc en borne wifi
- ForumAuthentification radius wifi
- ForumDistance borne wifi
- ForumTuto radius wifi
- Voir plus