Tutorial, HowTo, How-To ...
Ce HowTo décrit l’installation d’un serveur Freeradius + MySQL sur une distribution Debian, version sarge (testing) ; ainsi qu’une interface web d’administration : Dialupadmin.
N’hésitez pas à m’envoyer un petit mail pour toute remarque et améliorer ce How-To.
Rq : les commentaires dans le code sont en italique : exemple de commentaire
Historique des modifications
- 11/06/2008 : nouveau tutorial pour l’installation de freeradius 2.0.4 : Installation de freeradius 2.0.4 + mysql sur une debian (testing)
- 07/07/2006 : addendum pour debian testing/etch
- 19/01/2006 : ajout d’1 chapitre sur l’installation de apache2-ssl suite à plusieurs questions sur sa configuration
- 20/12/2005 : ajout d’1 chapitre sur l’utilisation de la table ’nas’ de la base MySQL
Installation de Freeradius
# apt-get install freeradius
# apt-get install freeradius-dialupadmin
# apt-get install freeradius-mysql
Installation de MySQL
# apt-get install mysql-server
# apt-get install mysql-client
Configuration de MySQL
# echo "create database radius;" | mysql -u root -p
# echo "grant all on radius.* to radius@'%' identified by 'motdepasse_sql'; flush privileges;" | mysql -u root -p
# zcat /usr/share/doc/freeradius/examples/db_mysql.sql.gz | mysql -u root -p radius
Rq : (07/07/2006) dans la debian etch, freeradius>= 1.1.2-1, le fichier est /usr/share/doc/freeradius/examples/mysql.sql.gz donc vous devez désormais taper :
# zcat /usr/share/doc/freeradius/examples/mysql.sql.gz | mysql -u root -p radius
Création de comptes utilisateur
Vous pouvez choisir les méthodes d’authentification CHAP ou PAP. Pour connaître les avantages et inconvénients de chaque méthode, je vous invite à lire la FAQ 4.4 de Freeradius.
Créer un nouvel utilisateur (Thus0) avec un mot de passe stocké en clair (motdepasse) (authentification CHAP)
# echo "INSERT INTO radcheck(UserName,Attribute,op,Value) VALUES ('Thus0','User-Password','==','motdepasse');" | mysql -u root -p radius
Créer un utilisateur (Thus0) avec un mot de passe crypté (motdepasse) (authentification PAP)
# echo "INSERT INTO radcheck(UserName,Attribute,op,Value) VALUES ('Thus0','Crypt-Password','==',ENCRYPT('motdepasse')); " | mysql -u root -p radius
# echo "INSERT INTO radcheck(UserName,Attribute,op,Value) VALUES ('Thus0','Auth-Type',':=','Crypt-Local'); " | mysql -u root -p radius
Configuration de Freeradius
Modifier le fichier /etc/freeradius/sql.conf
sql {
driver = "rlm_sql_mysql"
server = "localhost"
login = "radius"
password = "motdepasse_sql"
radius_db = "radius"
[...]
# Set to 'yes' to read radius clients from the database ('nas' table)
readclient = yes
}
Modifier le fichier /etc/freeradius/radiusd.conf
$INCLUDE ${confdir}/sql.conf
authorize {
preprocess
chap
suffix
eap
#files
sql
}
authenticate {
Auth-Type PAP {
pap
}
Auth-Type CHAP {
chap
}
eap
}
accounting {
detail
radutmp
sql
}
session {
sql
}
Test de l’installation de freeradius
créer un NAS [1] pour tester en local au freeradius : modifier dans le fichier /etc/freeradius/clients.conf le secret partagé entre le NAS et le serveur radius :
client 127.0.0.1 {
#
# The shared secret use to "encrypt" and "sign" packets between
# the NAS and FreeRADIUS. You MUST change this secret from the
# default, otherwise it's not a secret any more!
#
# The secret can be any string, up to 32 characters in length.
#
#secret = testing123
secret = monsecret_nasradius
}
Lancer freeradius en mode console pour voir les messages de debug :
# /etc/init.d/freeradius stop
# freeradius -XXX -A
[...]
Debug: Listening on authentication *:1812
Debug: Listening on accounting *:1813
Debug: Listening on proxy *:1814
Info: Ready to process requests.
Utiliser l’outil radtest : la syntaxe est de la forme : radtest utilisateur mot_de_passe_utilisateur ip_serveur_radius numero_port_NAS secret_partage_NAS_radius
# radtest Thus0 motdepasse 127.0.0.1 0 monsecret_nasradius
Sending Access-Request of id 95 to 127.0.0.1:1812
User-Name = "Thus0"
User-Password = "motdepasse"
NAS-IP-Address = localhost
NAS-Port = 0
rad_recv: Access-Accept packet from host 127.0.0.1:1812, id=95, length=20
Vous devriez avoir une réponse Access-Accept si tout est bien configuré !
Dans les messages de debug de freeradius, vous devriez également voir les lignes suivantes :
[...]
rad_recv: Access-Request packet from host 127.0.0.1:51307, id=95, length=60
User-Name = "Thus0"
User-Password = "motdepasse"
NAS-IP-Address = 255.255.255.255
NAS-Port = 0
Debug: Processing the authorize section of radiusd.conf
Debug: modcall: entering group authorize for request 4
Debug: modsingle[authorize]: calling preprocess (rlm_preprocess) for request 4
Debug: modsingle[authorize]: returned from preprocess (rlm_preprocess) for request 4
Debug: modcall[authorize]: module "preprocess" returns ok for request 4
Debug: modsingle[authorize]: calling chap (rlm_chap) for request 4
Debug: modsingle[authorize]: returned from chap (rlm_chap) for request 4
Debug: modcall[authorize]: module "chap" returns noop for request 4
Debug: modsingle[authorize]: calling suffix (rlm_realm) for request 4
Debug: rlm_realm: No '@' in User-Name = "Thus0", looking up realm NULL
Debug: rlm_realm: No such realm "NULL"
Debug: modsingle[authorize]: returned from suffix (rlm_realm) for request 4
Debug: modcall[authorize]: module "suffix" returns noop for request 4
Debug: modsingle[authorize]: calling eap (rlm_eap) for request 4
Debug: rlm_eap: No EAP-Message, not doing EAP
Debug: modsingle[authorize]: returned from eap (rlm_eap) for request 4
Debug: modcall[authorize]: module "eap" returns noop for request 4
Debug: modsingle[authorize]: calling sql (rlm_sql) for request 4
Debug: radius_xlat: 'Thus0'
Debug: rlm_sql (sql): sql_set_user escaped user --> 'Thus0'
Debug: radius_xlat: 'SELECT id,UserName,Attribute,Value,op FROM radcheck WHERE Username = 'Thus0' ORDER BY id'
[...]
Debug: rlm_sql (sql): Released sql socket id: 3
Debug: modsingle[authorize]: returned from sql (rlm_sql) for request 4
Debug: modcall[authorize]: module "sql" returns ok for request 4
Debug: modcall: group authorize returns ok for request 4
[...]
Auth: Login OK: [Thus0/motdepasse] (from client localhost port 0)
Sending Access-Accept of id 228 to 127.0.0.1:51428
Debug: Finished request 4
Debug: Going to the next request
Debug: --- Walking the entire request list ---
Vous devriez avoir une ligne du type Sending Access-Accept of id 228 to 127.0.0.1:51428 si tout est bien configuré !
Dans ce cas, vous pouvez arrêter freeradius, en tapant Ctr+C puis relancer freeradius en tâche de fond :
# /etc/init.d/freeradius start
Installation de apache2-ssl
Il existe de nombreux tutoriaux détaillant l’installation de apache2-ssl. Ci-dessous, je résume les principales étapes :
Installer les packages debian nécessaires :
# apt-get install apache2 apache2-common apache2-utils
# apt-get install libapache2-mod-php4
Générer un certificat /etc/apache2/ssl/apache.pem pour le serveur web : lancer la commander suivante et répondre aux questions :
# apache2-ssl-certificate -days 365
creating selfsigned certificate
replace it with one signed by a certification authority (CA)
enter your ServerName at the Common Name prompt
If you want your certificate to expire after x days call this programm
with -days x
Generating a 1024 bit RSA private key
..............++++++
..........++++++
writing new private key to '/etc/apache2/ssl/apache.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [GB]:FR
State or Province Name (full name) [Some-State]:Paris
Locality Name (eg, city) []:Paris
Organization Name (eg, company; recommended) []:Pervasive
Organizational Unit Name (eg, section) []:
server name (eg. ssl.domain.tld; required!!!) []:www.pervasive-network.org
Email Address []:root@pervasive-network.org
Créer un fichier de configuration pour le serveur web :
# zcat /usr/share/doc/apache2.2-common/examples/apache2/extra/httpd-ssl.conf.gz > /etc/apache2/sites-available/ssl.conf
(Rq : dans les versions antérieures, le fichier était /usr/share/doc/apache2/examples/ssl-std.conf.gz)
Dans ce fichier, modifier la ligne suivante :
SSLCertificateFile /etc/apache2/ssl/apache.pem
Activer les modules (ssl php4 rewrite) et le fichier de conf ssl.conf :
# a2enmod ssl
# a2enmod php4
# a2enmod rewrite
# a2ensite ssl.conf
Installation de Freeradius DialupAdmin
Vérifier que le module php4-mysql est installé et activé (sinon vous aurez des pages blanches).
Installer la librairie php4-mysql :
# apt-get install php4-mysql
Activer la librairie php4-mysql :
Dans le fichier /etc/php4/apache2/php.ini, vérifier que la ligne extension=mysql.so n’est pas commentée.
Rq : sous Mandriva, le fichier à modifier est : /etc/php.ini
Dans le fichier /etc/apache2/sites-available/ssl.conf, rajouter les lignes suivantes :
Alias /dialupadmin/ "/usr/share/freeradius-dialupadmin/htdocs/"
<Directory /usr/share/freeradius-dialupadmin/htdocs>
#SSLVerifyClient require
#SSLVerifyDepth 5
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>
L’interface web dialupadmin sera alors accessible via l’URL : https://adresse_ip/dialupadmin
Modifier le fichier /etc/freeradius-dialupadmin/admin.conf :
general_base_dir: /usr/share/freeradius-dialupadmin
general_radiusd_base_dir: /usr/sbin
general_domain: paris-sansfil.fr
general_strip_realms : yes
general_raddb_dir: /etc/freeradius
general_clients_conf: /etc/freeradius/clients.conf
general_sql_attrmap: %{general_base_dir}/conf/sql.attrmap
general_accounting_attrs_file: %{general_base_dir}/conf/accounting.attrs
general_extra_ldap_attrmap: %{general_base_dir}/conf/extra.ldap-attrmap
general_radius_server: localhost
general_radius_server_port: 1812
# can be either pap or chap
# general_radius_server_auth_proto: pap
general_radius_server_auth_proto: chap
general_radius_server_secret: monsecret_nasradius
# can be one of crypt,md5,clear
general_encryption_method: clear
#
# can be one of mysql,pg where:
# mysq: MySQL database (port 3306)
# pg: PostgreSQL database (port 5432)
#
sql_type: mysql
sql_server: localhost
sql_port: 3306
# mettre le nom utilisateur (à modifier)
sql_username: radius
# mot de passe utilisateur (à modifier)
sql_password: motdepasse_sql
sql_database: radius
sql_accounting_table: radacct
sql_badusers_table: badusers
sql_check_table: radcheck
sql_reply_table: radreply
sql_user_info_table: userinfo
sql_groupcheck_table: radgroupcheck
sql_groupreply_table: radgroupreply
sql_usergroup_table: usergroup
sql_total_accounting_table: totacct
sql_nas_table: nas
sql_command: /usr/bin/mysql
general_snmpwalk_command: /usr/bin/snmpwalk
general_snmpget_command: /usr/bin/snmpget
sql_debug: false
Créer les tables MySQL :
# cd /usr/share/freeradius-dialupadmin/sql
# mysql -u radius -p radius < badusers.sql
# mysql -u radius -p radius < mtotacct.sql
# mysql -u radius -p radius < totacct.sql
# mysql -u radius -p radius < userinfo.sql
Dans les 2 fichiers /usr/share/freeradius-dialupadmin/bin/monthly/bin/monthly_tot_stats et /usr/share/freeradius-dialupadmin/bin/tot_stats, remplacer la ligne suivante :
$sql_password = ($sql_password == '') ? '' : "-p$sql_password";
par la ligne :
$sql_password = ($sql_password eq '') ? '' : "-p$sql_password";
Rajouter les 2 scripts précédents dans la crontab : cf. le fichier /usr/share/doc/freeradius-dialupadmin/examples/freeradius-dialupadmin.cron
Captures d’écran/Screenshots
Si tout est bien configuré, voici les screenshots que vous devriez obtenir avec Freeradius + MySQL et ChilliSpot...
Statistics

Online Users
Pour modifier la liste des NAS, il faut modifier le fichier : /usr/share/freeradius-dialupadmin/conf/naslist.conf. Rq (mise à jour le le mardi 20 décembre 2005) : il est également possible d’utiliser la table ’nas’ de la base MySQL : cf. le dernier chapitre ajouté à cet article).
Par exemple, pour mon PC où est installé le logiciel chillispot (portail captif) :
nas1_name: localhost-chillispot
nas1_model: Packard Bell with Debian testing
nas1_ip: 127.0.0.1
nas1_port_num: 16
nas1_community: public

User Statistics

Utilisation de la table ’nas’ de la base MySQL
article mis à jour le mardi 20 décembre 2005.
Ci-dessous, voici les étapes pour utiliser la table ’nas’ de la base MySQL :
dans le fichier /etc/freeradius/sql.conf, vérifier que la dernière ligne est décommentée :
readclient = yes
ajouter une nouvelle entrée dans la table ’nas’ (il faut mettre l’adresse IP dans la variable ’nasname’) :
soit en ligne de commande MySQL :
# echo "INSERT INTO nas(id,nasname,shortname,type,ports,secret,community,description) VALUES ('','127.0.0.1','nas1','other',NULL,'monsecret_nasradius','public','test de nas');" | mysql -u radius -p radius
(petit rappel : le mot de passe du tutorial pour l’utilisateur radius est motdepasse_sql)
soit en utilisant l’interface graphique de dialupadmin, en cliquant dans le menu "RADIUS Clients" et en remplissant les champs adéquats, par exemple :
NAS Name : 127.0.0.1
NAS Short Name : nas1
NAS Type : Other
NAS Ports Number :
NAS Secret : monsecret_nasradius
NAS SNMP community : public
NAS Description : test de nas
Prise en compte des modifications de la table ’nas’.
A la date de l’écriture de cet article, l’ajout d’une nouvelle entrée dans la table NAS n’est pas dynamique (la liste des NAS est construite au lancement de freeradius à partir du fichier /etc/freeradius/clients.conf et de la table sql ’nas’). Pour prendre en compte l’ajout du nouveau NAS, il faut soit :
- relancer le serveur freeradius :
# /etc/init.d/freeradius restart
- recharger la configuration du serveur freeradius :
Vérifier auparavant que les fichiers de configuration sont en lecture pour l’utilisateur sous lequel tourne le daemon freeradius :
# cd /etc/freeradius/
# chown root:freerad ./*
# chmod g+r ./*
Vous pouvez maintenant recharger la configuration du serveur :
# /etc/init.d/freeradius reload
Client de test pour Microsoft Windows
- Télécharger le logiciel NTRadPing

- NTRadPing
[1] Network Access Server
Commentaires
1. mardi 3 mai 2005 à 22:24,
2. mercredi 11 mai 2005 à 11:42, par winnie31
3. mardi 24 mai 2005 à 10:29, par Logarithme
4. vendredi 27 mai 2005 à 11:30, par Logarithme
5. samedi 27 août 2005 à 18:22, par Laurent
6. mercredi 7 septembre 2005 à 11:39, par systech
7. samedi 17 septembre 2005 à 17:11, par thierry_net
8. mercredi 2 novembre 2005 à 11:42, par Riphper
9. lundi 19 décembre 2005 à 10:37, par Nico :: Nico
10. mardi 17 janvier 2006 à 10:57, par xiringuito
11. lundi 23 janvier 2006 à 10:03, par superthx
12. mardi 24 janvier 2006 à 21:33, par superthx
13. mardi 24 janvier 2006 à 23:41, par superthx
14. lundi 30 janvier 2006 à 19:27,
15. mercredi 22 février 2006 à 09:31, par raphael
16. mercredi 1er mars 2006 à 16:56, par wildback
17. mardi 14 mars 2006 à 17:25, par Tarentino
18. lundi 3 avril 2006 à 23:51, par Alexandre Devely :: WifiRadis
19. vendredi 7 avril 2006 à 15:23,
20. lundi 24 avril 2006 à 18:03, par Jeralex
21. vendredi 5 mai 2006 à 11:03, par julien
22. jeudi 18 mai 2006 à 03:57, par Dino
23. jeudi 18 mai 2006 à 17:46, par Dino
24. mardi 23 mai 2006 à 13:21, par h..vincent
25. mercredi 24 mai 2006 à 11:53, par Jack
26. mercredi 31 mai 2006 à 12:26,
27. dimanche 3 septembre 2006 à 02:10, par amin_jaf
28. mercredi 13 décembre 2006 à 15:08,
29. lundi 2 avril 2007 à 11:03, par Fan
30. mercredi 4 avril 2007 à 19:37,
31. mercredi 25 avril 2007 à 23:36,
32. mardi 24 juillet 2007 à 03:25, par Francesco
33. samedi 25 août 2007 à 17:56, par gJhHCAQYlgafXhhmaj :: mTgTDkobXBKgjlOoI
34. dimanche 26 août 2007 à 21:55, par YkXOtgITYAzWRcvKGF :: jXojumdWMVjJZeynB
35. lundi 27 août 2007 à 02:27, par NGATvCfhxpdDXTM :: qgivEgAvPRjkCf
36. lundi 27 août 2007 à 08:21, par FtnIWvHgNouv :: nIPSlAHsqNYyZ
37. mercredi 29 août 2007 à 06:32, par YefPTzMJRawDOPJIk :: QyTwTcqNDb
38. mercredi 29 août 2007 à 06:33, par KNSIGjDGKliJFW :: bHahokWEQu
39. jeudi 30 août 2007 à 07:39, par oSYtUGTrMKf :: xaIOYbLtxeE
40. jeudi 27 septembre 2007 à 22:29, par jmax
41. mardi 5 février 2008 à 09:42, par calamar83
42. mercredi 6 février 2008 à 09:43, par Thus0
43. samedi 23 février 2008 à 11:05, par Olivier Marquant
44. mardi 26 février 2008 à 17:30, par Crapule
45. mardi 4 mars 2008 à 01:19, par Thus0
46. mardi 4 mars 2008 à 13:45, par Crapule
47. mercredi 12 mars 2008 à 16:34, par Thirode