[TUTO] Borne d'accès wifi avec authentification Radius+LDAP - Internet & Réseaux
TomsGuide.com : 700 000 inscrits répondent à toutes vos questions high-tech et informatique.
Pour obtenir de l'aide, inscrivez-vous gratuitement !
 




Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet : [TUTO] Borne d'accès wifi avec authentification Radius+LDAP
 
I am not a number (not BSD, not Cluf, not MAC), I'
Profil : IDNaute
Plus d'informations

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 :

Code :
  1. 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 !!

Spoiler :

Edit modo : je suis d'avis contraire



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 :

Code :
  1. apt-get install openssl libssl libssl-dev libldap2-dev g++ build-essential debian-builder libstdc++6.4-1-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 :

Code :
  1. ./configure --prefix=/usr --libdir=/usr/lib --with-experimental-modules
  2. make


puis en root

Code :
  1. 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 :

Code :
  1. radiusd -X
  2. FreeRADIUS Version 2.1.1, for host i686-pc-linux-gnu, built on Sep 30 2008 at 07:25:52
  3. Copyright (C) 1999-2008 The FreeRADIUS server project and contributors.
  4. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
  5. PARTICULAR PURPOSE.
  6. You may redistribute copies of FreeRADIUS under the terms of the
  7. GNU General Public License v2.
  8. Starting - reading configuration files ...
  9. including configuration file /usr//etc/raddb/radiusd.conf
  10. bla bla .......
  11. listen {
  12.         type = "acct"
  13.         ipaddr = *
  14.         port = 0
  15. }
  16. Listening on authentication address * port 1812
  17. Listening on accounting address * port 1813
  18. Listening on proxy address * port 1814
  19. 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 :

Code :
  1. client localhost {
  2.           # Cette partie permet l'authentification de la borne
  3.           # au près du service Radius si la borne est sur la
  4.           # même machine.
  5.         ipaddr = 127.0.0.1
  6.         secret = !unmotdepassetrèstrèsfort!
  7.         require_message_authenticator = no
  8.         shortname = localhost
  9.         #
  10.         # The nastype tells 'checkrad.pl' which NAS-specific method to
  11.         #  use to query the NAS for simultaneous use.
  12.         #
  13.         #  Permitted NAS types are:
  14.         #
  15.         #      cisco
  16.         #      computone
  17.         #      livingston
  18.         #      max40xx
  19.         #      multitech
  20.         #      netserver
  21.         #      pathras
  22.         #      patton
  23.         #      portslave
  24.         #      tc
  25.         #      usrhiper
  26.         #      other          # for all other types
  27.         #
  28.         nastype = other # localhost isn't usually a NAS...
  29. }
  30. client adrIP/mask {
  31.           # Cette partie permet l'authentification de la borne
  32.           # au près du service Radius si la borne est sur l'
  33.           # adresse réseau adrIP/mask.
  34.         secret          = !unmotdepassetrèstrèsfort!
  35.         shortname      = private-network-2 # un nom quelconque de ce réseau
  36. }



Le fichier radiusd.conf :

Nous allons modifier que la partie « journaux ».

Code :
  1. #
  2. #  Logging section.  The various "log_*" configuration items
  3. #  will eventually be moved here.
  4. #
  5. log {
  6. .... bla bla ...
  7.         #
  8.         stripped_names = yes
  9.         #  Log authentication requests to the log file.
  10.         #
  11.         #  allowed values: {no, yes}
  12.         #
  13.         auth = yes
  14.         #  Log passwords with the authentication requests.
  15.         #  auth_badpass  - logs password if it's rejected
  16.         #  auth_goodpass - logs password if it's correct
  17.         #
  18.         #  allowed values: {no, yes}
  19.         #
  20.         auth_badpass = yes
  21.         auth_goodpass = yes
  22. }




Le fichier modules/ldap :

Code :
  1. ldap {
  2.         #
  3.         #  Note that this needs to match the name in the LDAP
  4.         #  server certificate, if you're using ldaps.
  5.         server = "nomdhote"
  6.         identity = "cn=admin,dc=DOMAIN,dc=local"
  7.         password = !motdepasseadminldap!
  8.         basedn = "dc=DOMAIN,dc=local"
  9.         filter = "(&(uid=%{Stripped-User-Name:-%{User-Name}})(dialupAccess=yes))"
  10.         # Cela implique qu'il faut que cel soit un utilisateur LDAP et qu'il y est
  11.         # l'attribut dialupAccess=yes
  12.         base_filter = "(objectclass=radiusprofile)"
  13. .... bla bla ....
  14.         # default_profile = "cn=radprofile,ou=dialup,dc=dom-sln,dc=local"
  15.         # profile_attribute = "radiusProfileDn"
  16.         access_attr = "dialupAccess"
  17.           # Cet attribut LDAP nous permettra de filtrer les utilisateurs autorisés
  18.           # ou pas ! Si dialupAccess alors autorisés, sinon pas !
  19.           # Là il vous faudra ajouter cet attribut à chaque compte utilisateur,
  20.           # de l'annuaire, autorisé à se connecter à la borne
  21.           # J'essayerais par les groupes ! ;) Voir plus bas !
  22.         # Mapping of RADIUS dictionary attributes to LDAP
  23. .... bla bla ...
  24.         password_attribute = userPassword
  25.         #  Un-comment the following to disable Novell
  26. .... bla bla ....
  27. }




Le fichier site-enabled/default :

Nous modifions la partie « authorize » et « authenticate ».

Code :
  1. authorize {
  2. .... bla bla ....
  3.         #
  4.         #  The ldap module will set Auth-Type to LDAP if it has not
  5.         #  already been set
  6.         ldap
  7. .... bla bla ....
  8.     #
  9.     # Use the checkval module
  10.     checkval
  11. .... bla bla ....
  12. }
  13. .....
  14. authenticate {
  15. .... bla bla ....
  16.         # Uncomment it if you want to use ldap for authentication
  17.         #
  18.         # Note that this means "check plain-text password against
  19.         # the ldap database", which means that EAP won't work,
  20.         # as it does not supply a plain-text password.
  21.         Auth-Type LDAP {
  22.                 ldap
  23.         }
  24.         #
  25.         #  Allow EAP authentication.
  26.         eap
  27. }




Le fichier sites-enabled/inner-tunnel :

Nous modifions la partie « autorize » et « authenticate ».

Code :
  1. authorize {
  2. .... bla bla ....
  3.         #
  4.         #  The ldap module will set Auth-Type to LDAP if it has not
  5.         #  already been set
  6.         ldap
  7. .... bla bla ....
  8.     #
  9.     # Use the checkval module
  10.     checkval
  11. .... bla bla ....
  12. }
  13. .... bla bla ....
  14. authenticate {
  15. .... bla bla ....
  16.         # Uncomment it if you want to use ldap for authentication
  17.         #
  18.         # Note that this means "check plain-text password against
  19.         # the ldap database", which means that EAP won't work,
  20.         # as it does not supply a plain-text password.
  21.         Auth-Type LDAP {
  22.                 ldap
  23.         }
  24.         #
  25.         #  Allow EAP authentication.
  26.         eap
  27. }




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 :

Code :
  1. interface=nominterface (eth0, ath0, ra0, etc...)
  2. ssid=VotreESSID
  3. driver=votrepilote (madwifi, ndiswrapper, wext, wired, etc...)
  4. logger_syslog=-1
  5. logger_syslog_level=4
  6. logger_stdout=--1
  7. logger_stdout_level=4
  8. debug=4
  9. ctrl_interface_group=0
  10. # Comment gérer les adresses MAC (adresse Hardware des cartes réseaux)
  11. # C'est une sécurité qui peut facilement être contournée, mais est
  12. # néanmoins pratique, car elle est facile à mettre en place
  13. # En effet, hostAPd va vérifier l'adresse MAC de la carte Wifi qui fait une
  14. # demande d'accès et pourra alors, sur cette seule adresse, soit continuer le
  15. # processus d'identification, soit s'arrêter et refuser la carte.
  16. # Les paramètres possibles sont les suivants :
  17. # 0 : Tout accepter à moins qu'elle ne soit dans la liste noire
  18. # 1 : Tout refuser, à moins qu'elle ne soit dans la liste blanche
  19. # 2 : Vérifier l'adresse auprès d'un serveur RADIUS (honnêtement, pour son réseau local, ça ne sert à rien)
  20. # Le meilleur paramètre pour commencer est 1. Ça réduit de beaucoup les risques de piratage.
  21. macaddr_acl=2
  22. #deny_mac_file=/etc/hostapd/hostapd.deny
  23. #accept_mac_file=/etc/hostapd/hostapd.accept
  24. ieee8021x=1
  25. own_ip_addr= adrIP
  26. nas_identifier=nomdhote
  27. auth_server_addr= adrIP
  28. auth_server_port=1812
  29. auth_server_shared_secret=!unmotdepassetrèstrèsfort!
  30. acct_server_addr= adrIP
  31. acct_server_port=1813
  32. acct_server_shared_secret=!unmotdepassetrèstrèsfort!
  33. radius_acct_interim_interval=6
  34. wpa=3
  35. wpa_key_mgmt=WPA-EAP
  36. wpa_pairwise=TKIP CCMP
  37. wpa_group_rekey=300
  38. 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

Code :
  1. #!/bin/sh
  2. # Création de la carte ath0 et du point d'accès debian-AP
  3. echo "Création de la carte ath0 et du point d'accès debian-AP";
  4. ifconfig NomCarte down;
  5. wlanconfig NomCarte destroy;
  6. wlanconfig NomCarte create wlandev wifi0 wlanmode ap;
  7. echo "Veuillez patienter...";
  8. sleep 2;
  9. echo "Activation de ath0";
  10. ifconfig NomCarte mtu 1492 adrIP netmask mask up;
  11. kill `pidof radiusd`;
  12. radiusd;
  13. killall hostapd;
  14. /usr/sbin/hostapd -B -P /var/run/hostapd.pid -dd -K -t /etc/hostapd/hostapd.conf.wpa2-enterprise;
  15. echo "Veuillez patienter...";
  16. sleep 1;
  17. echo "Mise en place des options du point d'accès debian-AP";
  18. iwconfig NomCarte key restricted;
  19. iwconfig NomCarte nickname "unNickName";
  20. echo "Veuillez patienter...";
  21. sleep 1;
  22. echo "Mise en place des options DHCP";
  23. /etc/init.d/dhcp3-server restart;
  24. echo "Veuillez patienter...";
  25. sleep 1;
  26. iwconfig NomCarte channel VotreCanal;
  27. echo "Veuillez patienter...";
  28. sleep 1;
  29. echo "Mise en place du routage NAT internet";
  30. echo 1 > /proc/sys/net/ipv4/ip_forward;
  31. iptables -t nat -A POSTROUTING -o NomCarteInternet -j MASQUERADE;
  32. /etc/init.d/samba restart;




Configuration du serveur DHCP

Le fichier se trouve : /etc/dhcpd3/dhcpd.conf :

Code :
  1. ddns-update-style none;
  2. option domain-name "DOMAIN.local";
  3. default-lease-time 600;
  4. max-lease-time 7200;
  5. # If this DHCP server is the official DHCP server for the local
  6. # network, the authoritative directive should be uncommented.
  7. authoritative;
  8. # Use this to send dhcp log messages to a different log file (you also
  9. # have to hack syslog.conf to complete the redirection).
  10. log-facility local7;
  11. # wifi
  12. subnet adrIPrz netmask mask {
  13.         range IP1 IP2;
  14.         option domain-name-servers IPDNS1, IPDNS2, IPDNS3;
  15.         option routers adrIP;
  16.         option broadcast-address adrIPbroadcast;
  17.         default-lease-time 600;
  18.         max-lease-time 7200;
  19. }




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.

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 :

Code :
  1. } else {
  2.         $add = $ldap_master->add ("uid=$userName,$config{usersdn}",
  3.                                     attr => [
  4.                                               'objectclass' => ['top','person', 'organizationalPerson', 'inetOrgPerson','posixAccount','shadowAccount'],
  5.                                               'cn'  => "$userCN",
  6.                                               'sn'  => "$userSN",
  7.                                               'givenName'  => "$givenName",
  8.                                               'uid'  => "$userName",
  9.                                               'uidNumber'  => "$userUidNumber",
  10.                                               'gidNumber'  => "$userGidNumber",
  11.                                               'homeDirectory'  => "$userHomeDirectory",
  12.                                               'loginShell'  => "$config{userLoginShell}",
  13.                                               'gecos'  => "$config{userGecos}",
  14.                                               'userPassword'  => "{crypt}x"
  15.                                             ]
  16.                                 );
  17. }




En :

Code :
  1. } else {
  2.         $add = $ldap_master->add ("uid=$userName,$config{usersdn}",
  3.                                     attr => [
  4.                                               'objectclass' => ['top','person', 'organizationalPerson', 'inetOrgPerson','posixAccount','shadowAccount','radiusProfile'],
  5.                                               'cn'  => "$userCN",
  6.                                               'sn'  => "$userSN",
  7.                                               'givenName'  => "$givenName",
  8.                                               'uid'  => "$userName",
  9.                                               'uidNumber'  => "$userUidNumber",
  10.                                               'gidNumber'  => "$userGidNumber",
  11.                                               'homeDirectory'  => "$userHomeDirectory",
  12.                                               'loginShell'  => "$config{userLoginShell}",
  13.                                               'gecos'  => "$config{userGecos}",
  14.                                               'userPassword'  => "{crypt}x",
  15.                                               'dialupAccess'  => "Si pas d acces effacez cet attribut !"
  16.                                             ]
  17.                                 );
  18. }




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

Code :
  1. # mysql -p
  2. Enter password:
  3. Welcome to the MySQL monitor.  Commands end with ; or \g.
  4. Your MySQL connection id is 173
  5. Server version: 5.0.32-Debian_7etch6-log Debian etch distribution
  6. Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
  7. mysql> create database radius;
  8. Query OK, 1 row affected (0.01 sec)
  9. mysql> quit
  10. 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...

Code :
  1. # mysql -p radius < /usr/etc/raddb/sql/mysql/schema.sql
  2. 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 »

Code :
  1. accounting  {
  2. ...
  3.         #
  4.         #  Log traffic to an SQL database.
  5.         #
  6.         #  See "Accounting queries" in sql.conf
  7.         sql
  8. ...
  9. }




Dans la partie « post-auth» : concerne la table « radpostauth »

Code :
  1. post-auth {
  2. ...
  3.         #
  4.         #  After authenticating the user, do another SQL query.
  5.         #
  6.         #  See "Authentication Logging Queries" in sql.conf
  7.         sql
  8. ...
  9. }



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

Code :
  1. # 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".

Code :
  1. # mkdir /var/www/radius
  2. # 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 :

Code :
  1. <?php
  2. // L'hôte sur le quel est la base de donn?e
  3. $host="localhost";
  4. // Le login superuser de MySQL
  5. $user="root";
  6. // Son mots de passe
  7. $pass="motdepasseadminmysql";
  8. // Le nom de la base de données
  9. $DB="radius";
  10. // Connexion à MySQL sur $host
  11. $message = "&#233;chec de la connexion.<br>";
  12. $message = $message . "Le serveur est inaccessible, ou le service de base de données est arrêtée ...<br>";
  13. $message = $message . "Veuillez contacter l'administrateur<br>";
  14. $message = $message;
  15. $link = mysql_connect($host, $user, $pass) or die($message);
  16. // S?lection de la base $DB
  17. $message = "&#233;chec de la base de données.<br>";
  18. $message = $message . "La base de donn?es est inaccessible...<br>";
  19. $message = $message . "Veuillez contacter l'administrateur<br>";
  20. $message = $message;
  21. $sel = mysql_select_db($DB) or die($message);
  22. ?>



La page par défaut index.php :

Code :
  1. <?php
  2. // // Connexion la base de donnée
  3. include ("conf.inc.db.php" );
  4. // La requète
  5. $sql = "SELECT * FROM radacct ORDER BY radacctid DESC";
  6. ?>
  7. <body bgcolor="#B4B3C6">
  8. <h1><p align=center><strong><u>Radius Accounting</u></strong></p></h1>
  9. <?PHP
  10. $req = mysql_query($sql) or die('Requ&#232;te mal formulï&#233;e');
  11. echo "<table border='1' align='center' bgcolor='#ADADAD'><tbody bgcolor='Gray'>";
  12. echo "<tr bgcolor='Silver'>";
  13. echo "<td>Identifiant Comptable</td>";
  14. echo "<td>Nom utilisateur</td>";
  15. echo "<td>KOctets entr&#233;s</td>";
  16. echo "<td>KOctets sortis</td>";
  17. echo "<td>Heure et date d&#233;but</td>";
  18. echo "<td>Heure et date fin</td>";
  19. echo "</tr>";
  20. while($data = mysql_fetch_assoc($req))
  21.     {
  22. $koin=round (intval  ($data['acctinputoctets'])/1024, 2); //plus agréable en Ko
  23. $koout=round (intval  ($data['acctoutputoctets'])/1024, 2); //plus agréable en Ko
  24. if ($data['acctstoptime']=='') {
  25. $data['acctstoptime']="<font color='Red'>Session en cours</font>";
  26. }
  27.     echo "<tr bgcolor='#00C0C0'>";
  28.     echo "<td>".$data['radacctid']."</td>";
  29.     echo "<td>".$data['username']."</td>";
  30.     echo "<td>".$koin."</td>";
  31.     echo "<td>".$koout."</td>";
  32.     echo "<td>".$data['acctstarttime']."</td>";
  33.     echo "<td>".$data['acctstoptime']."</td>";
  34.     echo "</tr>";
  35.     }
  36. echo "</tbody></table>";
  37. ?>
  38. <br><br>
  39. <center>
  40. Choisissez un utilisateur :
  41. <FORM method="POST" action="resultat.php" name="formulaire" class="txt">
  42. <SELECT name="username">
  43.                 <?PHP
  44.                 $sql = 'SELECT DISTINCT username from radacct ORDER by username';
  45.         $req = mysql_query($sql) or die('Requ&#232;te mal formulï&#233;e');
  46.                 //echo '<option></option>';
  47.                 while($data = mysql_fetch_assoc($req))
  48.                 {
  49.                 if ($data['username'] != "" ) {
  50.                         echo "<option value=\"".htmlentities($data['username'])."\">".htmlentities($data['username'])."</option>";
  51.                 }
  52.                 }
  53.                 ?>
  54. </select>
  55. <INPUT type="submit" name="recherche" value="Afficher">
  56. </FORM>
  57. </center>
  58. </body>



La page de résultats resultat.php :

Code :
  1. <?php
  2. // // Connexion la base de donnée
  3. include ("conf.inc.db.php" );
  4. // Réccupération des variable postées
  5. $username = $_POST['username'];
  6. ?>
  7. <body bgcolor="#B4B3C6">
  8. <h1><p align=center><strong><u>Radius Accounting</u></strong></p></h1>
  9. <?PHP
  10. $sql = "SELECT * FROM radacct WHERE username='$username'";
  11. $req = mysql_query($sql) or die('Requ&#232;te mal formulï&#233;e 1');
  12. echo "<table border='1' align='center' bgcolor='#ADADAD'><tbody bgcolor='Gray'>";
  13. echo "<tr bgcolor='Silver'>";
  14. echo "<td>Identifiant Comptable</td>";
  15. echo "<td>Nom utilisateur</td>";
  16. echo "<td>KOctets entr&#233;s</td>";
  17. echo "<td>KOctets sortis</td>";
  18. echo "<td>Heure et date d&#233;but</td>";
  19. echo "<td>Heure et date fin</td>";
  20. echo "</tr>";
  21. while($data = mysql_fetch_assoc($req))
  22.     {
  23. $koin=round (intval  ($data['acctinputoctets'])/1024, 2);
  24. $koout=round (intval  ($data['acctoutputoctets'])/1024, 2);
  25. if ($data['acctstoptime']=='') {
  26. $data['acctstoptime']="<font color='Red'>Session en cours</font>";
  27. }
  28.     echo "<tr bgcolor='#00C0C0'>";
  29.     echo "<td>".$data['radacctid']."</td>";
  30.     echo "<td>".$data['username']."</td>";
  31.     echo "<td>".$koin."</td>";
  32.     echo "<td>".$koout."</td>";
  33.     echo "<td>".$data['acctstarttime']."</td>";
  34.     echo "<td>".$data['acctstoptime']."</td>";
  35.     echo "</tr>";
  36.     }
  37. echo "</tbody></table>";
  38. ?>
  39. <br><br>
  40. <center>
  41. Choisissez un utilisateur :
  42. <FORM method="POST" action="resultat.php" name="formulaire" class="txt">
  43. <SELECT name="username">
  44.                 <?PHP
  45.                 $sql = 'SELECT DISTINCT username from radacct ORDER by username';
  46.         $req = mysql_query($sql) or die('Requ&#232;te mal formulï&#233;e');
  47.                 //echo '<option></option>';
  48.                 while($data = mysql_fetch_assoc($req))
  49.                 {
  50.                 if ($data['username'] != "" ) {
  51.                         echo "<option value=\"".htmlentities($data['username'])."\">".htmlentities($data['username'])."</option>";
  52.                 }
  53.                 }
  54.                 ?>
  55. </select>
  56. <INPUT type="submit" name="recherche" value="Afficher">
  57. </FORM>
  58. </center>
  59. <br><br>
  60. <center>
  61. <FORM method="POST" action="index.php">
  62. <INPUT type="submit" name="reset" value="Revenir">
  63. </FORM>
  64. </center>
  65. </body>



Ce qui devrait donner :
La page par défaut :
http://www.system-linux.net/config/freeradius-ldap-hostapd/freeradius-ldap-webgui-accounting-13.png

La page résultats :
http://www.system-linux.net/config/freeradius-ldap-hostapd/freeradius-ldap-webgui-accounting-14.png


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.fr [...] 10880.html

http://deployingradius.com/documen [...] acles.html

http://deployingradius.com/blog/



8. Bibliographie
http://www.editions-eyrolles.com/L [...] vec-radius
http://lists.shmoo.com/pipermail/h [...] 11481.html
http://linux.sys-con.com/node/46902
http://fr.wikipedia.org/wiki/Wi-Fi [...] ccess#WPA2
http://www.nantes-wireless.org/act [...] _article=8
http://crip-agalan.ujf-grenoble.fr [...] galan.html
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. [...] t-openldap
http://vuksan.com/linux/dot1x/802-1x-LDAP.html
http://smhteam.info/wiki/index.lin [...] ReseauWifi
http://deployingradius.com/documen [...] acles.html

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 !


Message édité par lolotux le 07-11-2008 à 12:47:41
Liens sponsorisés


Inscrivez-vous ou connectez-vous pour masquer ceci.

Fenrir
Profil : Modérateur
Plus d'informations

Si vous avez des commentaires, des remarques, des questions, ...

C'est ICI que ça ce passe ;)


---------------
Pub/piratage/spam/villes virtuelles/... --> BAN, je ne cherche pas à comprendre
Merci d'éditer vos titres (pas de titre en majuscule, [RESOLU] quand c'est le cas)
Fenrir
Profil : Modérateur
Plus d'informations

Ce sujet a été réouvert par Maith


---------------
Pub/piratage/spam/villes virtuelles/... --> BAN, je ne cherche pas à comprendre
Merci d'éditer vos titres (pas de titre en majuscule, [RESOLU] quand c'est le cas)

  FORUM Infos-du-Net » Internet & Réseaux » [TUTO] Borne d'accès wifi avec authentification Radius+LDAP

Aller à :
 

Liens