Outils pour utilisateurs

Outils du site


Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
310lansecure:30_radius:10_freeradius1 [le 03/03/2009 à 18:48] – édition externe 127.0.0.1310lansecure:30_radius:10_freeradius1 [le 30/06/2018 à 15:55] (Version actuelle) prof
Ligne 1: Ligne 1:
-====== FreeRADIUS ====== +====== FreeRADIUS  ====== 
- +(2.0.4 sur Debian Lenny).
-===== Avertissement ===== +
-Tout ce qui suit n'est valable que pour FreeRADIUS Version 1.1.3, fourni avec Debian Etch ! +
- +
-FreeRADIUS Version 2.0.4, qui vient avec Lenny présente de nombreuses différences et les manipulations présentées ici ne lui sont pas facilement transposables. Je travaille à la mise à jour de ce chapitre, un peu de patience donc, pour les utilisateurs de FreeRADIUS 2.0.x.+
  
 ===== Avant de commencer... ===== ===== Avant de commencer... =====
  
-RADIUS (Remote Authentication Dial-In User Service) est un vaste programme. Pour essayer de faire simple (donc schématique et incomplet), ce service est capable :+RADIUS (Remote Authentication Dial-In User Service) est un vaste programme. Pour essayer de faire simple (donc schématique et incomplet), ce service est capable :
  
-  * d'authentifier un utilisateur distant, suivant de multiples modes plus ou moins sécurisés, en s'appuyant sur une base de connaissances allant du simple fichier texte à l'annuaire LDAP, en passant par une base de données de type SQL, +  * d'authentifier un utilisateur distant, suivant de multiples modes plus ou moins sécurisés, en s'appuyant sur une base de connaissances allant du simple fichier texte à l'annuaire LDAP, en passant par une base de données de type SQL ; 
-  * d'enregistrer des informations sur chaque « login »,+  * d'enregistrer des informations sur chaque « login » ;
   * de renvoyer au demandeur des paramètres variés pouvant, suivant le cas, être une configuration IP, un numéro de LAN virtuel etc.   * de renvoyer au demandeur des paramètres variés pouvant, suivant le cas, être une configuration IP, un numéro de LAN virtuel etc.
  
-Etudier dans le détail toutes les possibilités de RADIUS est hors de la portée de cet exposé. (c'est, de toutes façons, également hors de ma propre portée). Nous nous contenterons ici de le mettre en ?uvre dans les deux cas qui nous intéressent :+Étudier dans le détail toutes les possibilités de RADIUS est hors de la portée de cet exposé. (c'est, de toutes façons, également hors de ma propre portée). Nous nous contenterons ici de le mettre en œuvre dans les deux cas qui nous intéressent :
  
-  * authentification depuis leur adresse MAC des stations « connues » sur notre réseau filaire, en utilisant un système de type « login/password », avec le protocole CHAP (Challenge-Handshake Authentication Protocol), éventuellement en assignant un numéro de VLAN suivant la machine,+  * authentification depuis leur adresse MAC des stations « connues » sur notre réseau filaire, en utilisant un système de type « login/password », avec le protocole CHAP (Challenge-Handshake Authentication Protocol), éventuellement en assignant un numéro de VLAN suivant la machine ;
   * authentification avec un certificat x.509 sur le réseau Wi-Fi, en utilisant EAP-TLS.   * authentification avec un certificat x.509 sur le réseau Wi-Fi, en utilisant EAP-TLS.
  
-Installer et surtout configurer un serveur radius pour la première fois a quelque chose d'assez rebutant, voire repoussant. Nous allons passer un peu de temps à détailler cette opération, ceci aidera probablement ceux qui n'ont encore jamais tenté l'aventure. Nous utilisons FreeRADIUS sur une Debian Etch.+Installer et surtout configurer un serveur radius pour la première fois a quelque chose d'assez rebutant, voire repoussant. Nous allons passer un peu de temps à détailler cette opération, ceci aidera probablement ceux qui n'ont encore jamais tenté l'aventure. Nous utilisons FreeRADIUS sur une Debian Lenny.
  
 FreeRadius peut fonctionner en s'appuyant uniquement sur des fichiers texte. Ce n'est pas forcément ce qu'il y a de plus simple à gérer, si l'on doit manipuler un grand nombre de clients. Ici, nous utiliserons MySQL pour stocker les adresses MAC des clients. Outre la souplesse qu'apportent des outils comme phpmyadmin pour gérer la liste des clients, cette solution offre l'avantage de ne pas nécessiter de redémarrage de FreeRADIUS à chaque modification de la base. FreeRadius peut fonctionner en s'appuyant uniquement sur des fichiers texte. Ce n'est pas forcément ce qu'il y a de plus simple à gérer, si l'on doit manipuler un grand nombre de clients. Ici, nous utiliserons MySQL pour stocker les adresses MAC des clients. Outre la souplesse qu'apportent des outils comme phpmyadmin pour gérer la liste des clients, cette solution offre l'avantage de ne pas nécessiter de redémarrage de FreeRADIUS à chaque modification de la base.
- 
 ===== Installation de Freeradius ===== ===== Installation de Freeradius =====
 +Pour des raisons de compatibilité de licences, FreeRadius est compilé par défaut sur Debian (Lenny) sans le support de TLS. TLS nous servira pour le WPA2. Nous allons donc reconstruire un paquet binaire à partir du paquet source, en tenant compte de cet usage.
  
-Pour des raisons de compatibilité de licencesFreeRadius est compilé par défaut sur Debian sans le support de TLS (ni de Postgresql). TLS nous servira pour le WPA2. Nous allons donc reconstruire un paquet binaire à partir du paquet source, en tenant compte de cet usage.+**Notons que ceci n'a plus lieu d'être sur Squeezece qui simplifiera notre tâche, l'installation du binaire standard suffira à nos besoins.**
  
 ==== Préparatifs ==== ==== Préparatifs ====
  
-Nous aurons besoin de quelques outils de compilation et de gestion des paquets source :+Nous aurons besoin de quelques outils de compilation et de gestion des paquets source :
  
-  # apt-get install build-essential+  # aptitude install build-essential
   ...   ...
-  # apt-get install apt-src+  # aptitude install apt-src
  
-Puis nous devons mettre à jour la liste des paquets source :+Puis nous devons mettre à jour la liste des paquets source :
  
   # apt-src update   # apt-src update
Ligne 46: Ligne 42:
  
 Nous devons retrouver dans notre répertoire : Nous devons retrouver dans notre répertoire :
- +<code> 
-  # ls -l +# ls -l 
-  total 2552 +total 2908 
-  drwxr-xr-x 15 root root 4096 2007-01-11 16:35 freeradius-1.1.3 +drwxr-xr-x 15 root root    4096 mar  4 15:14 freeradius-2.0.4+dfsg 
-  -rw-r--r-- 1 root root 15130 2006-09-01 20:07 freeradius_1.1.3-3.diff.gz +-rw-r--r--  1 root root    4860 sep  7 20:02 freeradius_2.0.4+dfsg-6.diff.gz 
-  -rw-r--r-- 1 root root 975 2006-09-01 20:07 freeradius_1.1.3-3.dsc +-rw-r--r--  1 root root    1476 sep  7 20:02 freeradius_2.0.4+dfsg-6.dsc 
-  -rw-r--r-- 1 root root 2587376 2006-09-01 20:07 freeradius_1.1.3.orig.tar.gz+-rw-r--r--  1 root root 2953674 mai 19  2008 freeradius_2.0.4+dfsg.orig.tar.gz 
 +</code>
  
 ==== Configuration de la compilation ==== ==== Configuration de la compilation ====
 +Dans le répertoire ''~/build_freeradius/freeradius-2.0.4+dfsg/debian'' nous avons un fichier nommé « rules », qui contient les directives de compilation. Nous allons devoir modifier ce fichier.
  
-Dans le répertoire ''~/build_freeradius/freeradius-1.1.3/debian'' nous avons un fichier nommé « rules », qui contient les directives de compilationDans ce fichier, nous trouvons dans les premières lignes, quelques informations qui nous intéressent :+Voici la première partie qui nous intéresse : 
 +<html><pre class="code"> 
 + ./configure $(confflags) \ 
 + --prefix=/usr \ 
 + --exec-prefix=/usr \ 
 + --mandir=$(mandir) \ 
 + --sysconfdir=/etc \ 
 + --libdir=$(libdir) \ 
 + --datadir=/usr/share \ 
 + --localstatedir=/var \ 
 + --with-raddbdir=$(raddbdir) \ 
 + --with-logdir=/var/log/$(package) \ 
 + --enable-ltdl-install=no --enable-strict-dependencies \ 
 + --with-large-files --with-udpfromto --with-edir \ 
 + --enable-developer \ 
 + --config-cache \ 
 +<span class="hly"> --without-rlm_eap_tls \ 
 + --without-rlm_eap_ttls \ 
 + --without-rlm_eap_peap \</span> 
 + --without-rlm_eap_tnc \ 
 + --without-rlm_otp \ 
 + --with-rlm_sql_postgresql_lib_dir=`pg_config --libdir` \ 
 + --with-rlm_sql_postgresql_include_dir=`pg_config --includedir` \ 
 +<span class="hly"> --without-openssl \</span> 
 + --without-rlm_eap_ikev2 \ 
 + --without-rlm_sql_oracle \ 
 + --without-rlm_sql_unixodbc \ 
 + --with-system-libtool 
 +</pre></html> 
 +Les lignes surlignées sont celles qu'il faut supprimer pour obtenir le support de TLSNous devons donc aboutir à ceci : 
 +<code> 
 + ./configure $(confflags) \ 
 + --prefix=/usr \ 
 + --exec-prefix=/usr \ 
 + --mandir=$(mandir) \ 
 + --sysconfdir=/etc \ 
 + --libdir=$(libdir) \ 
 + --datadir=/usr/share \ 
 + --localstatedir=/var \ 
 + --with-raddbdir=$(raddbdir) \ 
 + --with-logdir=/var/log/$(package) \ 
 + --enable-ltdl-install=no --enable-strict-dependencies \ 
 + --with-large-files --with-udpfromto --with-edir \ 
 + --enable-developer \ 
 + --config-cache \ 
 + --without-rlm_eap_tnc \ 
 + --with-rlm_sql_postgresql_lib_dir=`pg_config --libdir` \ 
 + --with-rlm_sql_postgresql_include_dir=`pg_config --includedir` \ 
 + --without-rlm_eap_ikev2 \ 
 + --without-rlm_sql_oracle \ 
 + --without-rlm_sql_unixodbc \ 
 + --with-system-libtool 
 +</code> 
 +Ce serait tout si le concepteur du paquet n'avait pas mis un petit test pour bloquer la compilation s'il traine un lien vers OpenSSL lors de l'édition des liensIl faut repérer ce test et l'inhiber. Le voici : 
 +<code> 
 + for pkg in ${pkgs} ; do \ 
 +   if dh_shlibdeps -p $$pkg -- -O 2>/dev/null | grep -q libssl; then \ 
 +     echo "$$pkg links to openssl" ;\ 
 +     exit 1 ;\ 
 +   fi ;\ 
 + done 
 +</code>
  
-  # If you want to use SSL and/or the postgres module, comment +Il suffit de commenter la ligne ''exit 1;\'' comme ceci : 
-  # out these two lines and uncomment the two after +<code> 
-  # You will also need to add a Build-Depends on libssl-dev and libpq-dev + for pkg in ${pkgs} ; do \ 
-  # and remove the Build-Conflicts on libssl-dev +   if dh_shlibdeps -p $$pkg -- -O 2>/dev/null | grep -libssl; then \ 
-  # Finally you need to cat debian/control.postgresql &gt;&gtdebian/control+     echo "$$pkg links to openssl" ;
 +#     exit 1 ;
 +   fi ;\ 
 + done 
 +</code> 
 +Du côté de la compilation, nous sommes parés.
  
-Tant que nous y sommes, ajoutons le support de Postgresqlce qui simplifiera la manipulation et permettra à ceux qui préfèrentd'utiliser Postgresql plutôt que MySQL.+Voici donc le fichier « rules » tel qu'il doit finalement se présenter : 
 +<html><pre class="code"> 
 +#!/usr/bin/make -f 
 +# -*- makefile -*- 
 +# Sample debian/rules that uses debhelper. 
 +
 +# This file was originally written by Joey Hess and Craig Small. 
 +# As a special exceptionwhen this file is copied by dh-make into a 
 +# dh-make output fileyou may use that output file without restriction. 
 +# This special exception was added by Craig Small in version 0.37 of dh-make. 
 +
 +# Modified to make a template file for a multi-binary package with separated 
 +# build-arch and build-indep targets  by Bill Allombert 2001
  
-La première modification est facile à réaliser :+# Uncomment this to turn on verbose mode. 
 +export DH_VERBOSE=1
  
-  #buildssl=--without-rlm_eap_peap --without-rlm_eap_tls --without-rlm_eap_ttls --without-rlm_otp  +.NOTPARALLEL:
-            --without-rlm_sql_postgresql --without-snmp +
-  #modulelist=krb5 ldap sql_mysql sql_iodbc +
-   +
-  buildssl=--with-rlm_sql_postgresql_lib_dir=`pg_config --libdir`  +
-           --with-rlm_sql_postgresql_include_dir=`pg_config --includedir` +
-  modulelist=krb5 ldap sql_mysql sql_iodbc sql_postgresql+
  
-La seconde est peut-être moins évidente si l'on ne sait pas qu'il faut modifier dans le fichier ''~/build_freeradius/freeradius-1.1.3/debian/control'' le ''Build-Depends:'' comme suit : +SHELL           =/bin/bash
-<html><pre class="code"> +
-Source: freeradius +
-Build-Depends: debhelper (&gt;= 5), libltdl3-dev, libpam0g-dev, libmysqlclient15-dev | libmysqlclient-dev, libgdbm-dev, libldap2-dev, libsasl2-dev, libiodbc2-dev, libkrb5-dev, snmp, autotools-dev, dpatch (&gt;= 2), libperl-dev, libtool, dpkg-dev (&gt;= 1.13.19), <span class="hly">libssl-dev, libpq-dev</span> +
-Build-Conflicts: +
-</pre></html>+
  
-Enfin, il faut ajouter à ce fichier le contenu de control.postgresql :+package         = freeradius 
 +freeradius_dir  = $(CURDIR)/debian/tmp/
  
-  # cd ~/build_freeradius/freeradius-1.1.3/debian +mandir          = /usr/share/man 
-  # cat control.postgresql >> control+libdir          = /usr/lib/$(package) 
 +logdir          = /var/log/$(package) 
 +pkgdocdir       = /usr/share/doc/$(package) 
 +raddbdir        = /etc/$(package)
  
-Comme nous avons un peu bousculé les dépendances et les conflits, nous devons réparer ça :+modulelist=krb5 ldap sql_mysql sql_iodbc sql_postgresql 
 +pkgs=$(shell dh_listpackages)
  
-  apt-get install libssl-dev libpq-dev+This has to be exported to make some magic below work. 
 +export DH_OPTIONS
  
-=== Se protéger des mises à jour de apt-get upgrade ===+# These are used for cross-compiling and for saving the configure script 
 +# from having to guess our platform (since we know it already) 
 +export DEB_HOST_GNU_TYPE  ?$(shell dpkg-architecture -qDEB_HOST_GNU_TYPE) 
 +export DEB_BUILD_GNU_TYPE ?$(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)
  
-Si nous compilons maintenant le paquet binairenous obtiendrons des paquets ayant le même nom (version comprise)que les binaires de la distribution, et les mises à jour futures ne manqueront pas de nous remplacer notre construction à la première occasion.+ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) 
 + CFLAGS += -O0 
 +else 
 + CFLAGS += -O2 
 +endif
  
-Une solution élégante consiste à obtenir des paquets binaires, avec un nom différent. Pour ce fairenous pouvons agir dans le fichier ''~/build_freeradius/freeradius-1.1.3/debian/changelog'' en ajoutant quelques lignes en tête du fichier. Par exemple : +ifeq ($(DEB_BUILD_GNU_TYPE)$(DEB_HOST_GNU_TYPE)) 
-<html><pre class="code"> + confflags +--build $(DEB_HOST_GNU_TYPE) 
-<span class="hly">freeradius (1.1.3-3tlsunstable; urgency=low+else 
 + confflags +--build $(DEB_BUILD_GNU_TYPE) --host $(DEB_HOST_GNU_TYPE) 
 +endif
  
-* Add TLS support for compilation+config.status: configure 
 + dh_testdir
  
--- Christian Caleca &lt;for.spam.only@eme-enseignement.fr&gt; Fri11 Jan 2007 15:46:11 +0100</span>+ifeq (config.sub.dist,$(wildcard config.sub.dist)) 
 + rm config.sub 
 +else 
 + mv config.sub config.sub.dist 
 +endif 
 +ifeq (config.guess.dist,$(wildcard config.guess.dist)) 
 + rm config.guess 
 +else 
 + mv config.guess config.guess.dist 
 +endif 
 + ln -s /usr/share/misc/config.sub config.sub 
 + ln -s /usr/share/misc/config.guess config.guess 
 +
  
-freeradius (1.1.3-3unstable; urgency=medium+ ./configure $(confflags) \ 
 + --prefix=/usr \ 
 + --exec-prefix=/usr \ 
 + --mandir=$(mandir
 + --sysconfdir=/etc \ 
 + --libdir=$(libdir) \ 
 + --datadir=/usr/share \ 
 + --localstatedir=/var \ 
 + --with-raddbdir=$(raddbdir) \ 
 + --with-logdir=/var/log/$(package) \ 
 + --enable-ltdl-install=no --enable-strict-dependencies \ 
 + --with-large-files --with-udpfromto --with-edir \ 
 + --enable-developer \ 
 + --config-cache \ 
 + --without-rlm_eap_tnc \ 
 + --with-rlm_sql_postgresql_lib_dir=`pg_config --libdir` \ 
 + --with-rlm_sql_postgresql_include_dir=`pg_config --includedir` \ 
 + --without-rlm_eap_ikev2 \ 
 + --without-rlm_sql_oracle \ 
 + --without-rlm_sql_unixodbc \ 
 + --with-system-libtool
  
-* Fix POSIX compliance problem in init script. Closes: #403384.+#Architecture  
 +build: build-arch build-indep
  
--- Mark Hymers &lt;mark@hymers.orgue.uk&gtSat16 Dec 2006 20:45:11 +0000+build-arch: build-arch-stamp 
 +build-arch-stamp: config.status 
 + $(MAKE)  
 + touch $@ 
 + 
 +build-indep: build-indep-stamp 
 +build-indep-stamp: config.status 
 + touch $@ 
 + 
 +clean: 
 + dh_testdir 
 + dh_testroot 
 + rm -f build-arch-stamp build-indep-stamp  
 + rm -f config.cache config.log 
 +  
 + [ ! -d src/modules/lib ] || rm -fr src/modules/lib || true 
 + [ ! -d src/binary ] || rm -fr src/binary || true 
 + 
 + # Add here commands to clean up after the build process. 
 +ifeq (Make.inc,$(wildcard Make.inc)) 
 + $(MAKE) distclean 
 +endif 
 +ifeq (config.sub.dist,$(wildcard config.sub.dist)) 
 + rm -f config.sub 
 + mv config.sub.dist config.sub 
 +endif 
 +ifeq (config.guess.dist,$(wildcard config.guess.dist)) 
 + rm -f config.guess 
 + mv config.guess.dist config.guess 
 +endif 
 + dh_clean  
 + 
 +install: install-indep install-arch 
 +install-indep: build-indep-stamp 
 + dh_testdir 
 + dh_testroot 
 + dh_installdirs -i 
 + 
 + $(MAKE) -C dialup_admin DIALUP_PREFIX=/usr/share/freeradius-dialupadmin \ 
 +                         DIALUP_DOCDIR=/usr/share/doc/freeradius-dialupadmin \ 
 +                         DIALUP_CONFDIR=/etc/freeradius-dialupadmin \ 
 +                         R=$(freeradius_dir) install 
 + 
 + mv $(freeradius_dir)/usr/share/freeradius-dialupadmin/bin/dialup_admin.cron \ 
 +        $(freeradius_dir)/usr/share/freeradius-dialupadmin/bin/freeradius-dialupadmin.cron 
 + mv $(freeradius_dir)/usr/share/doc/freeradius-dialupadmin/Changelog \ 
 +        $(freeradius_dir)/usr/share/doc/freeradius-dialupadmin/changelog 
 + 
 + install -m0644 debian/apache2.conf $(freeradius_dir)/etc/freeradius-dialupadmin/ 
 + 
 + dh_install -i --sourcedir=$(freeradius_dir) 
 + dh_installdocs -p freeradius-dialupadmin dialup_admin/README 
 + 
 +install-arch: build-arch-stamp 
 + dh_testdir 
 + dh_testroot 
 + dh_installdirs -s 
 + test -d $(freeradius_dir)/usr/lib/freeradius || mkdir -p $(freeradius_dir)/usr/lib/freeradius 
 + ln -s rlm_sql.so $(freeradius_dir)/usr/lib/freeradius/librlm_sql.so 
 + $(MAKE) install R=$(freeradius_dir) 
 +  
 + # rename radius binary to play nicely with others 
 + mv $(freeradius_dir)/usr/sbin/radiusd $(freeradius_dir)/usr/sbin/$(package) 
 + mv $(freeradius_dir)/$(mandir)/man8/radiusd.8 $(freeradius_dir)/$(mandir)/man8/$(package).8 
 +  
 + dh_install --sourcedir=$(freeradius_dir) -p libfreeradius2 
 + dh_install --sourcedir=$(freeradius_dir) -p libfreeradius-dev 
 + 
 + for mod in ${modulelist}do \ 
 +   pkg=$${mod##sql_} ; \ 
 +   dh_install --sourcedir=$(freeradius_dir) -p freeradius-$$pkg ; \ 
 +   rm -f $(freeradius_dir)/usr/lib/freeradius/rlm_$$mod*.so ; \ 
 + done 
 + 
 + dh_install --sourcedir=$(freeradius_dir) -p freeradius-utils 
 + dh_install --sourcedir=$(freeradius_dir) -p freeradius 
 +  
 + dh_strip -a --dbg-package=freeradius-dbg 
 + 
 + dh_makeshlibs -a -n 
 + for pkg in ${pkgs} ; do \ 
 +   if dh_shlibdeps -p $$pkg -- -O 2>/dev/null | grep -q libssl; then \ 
 +     echo "$$pkg links to openssl" ;\ 
 +#     exit 1 ;\ 
 +   fi ;\ 
 + done 
 + dh_shlibdeps 
 + 
 +binary-common: 
 + dh_testdir 
 + dh_testroot 
 + dh_installchangelogs  
 + dh_installdocs 
 + dh_installexamples 
 + dh_installlogrotate  
 + dh_installpam --name=radiusd  
 + dh_installinit --noscripts 
 + dh_installman 
 + dh_lintian 
 + dh_link 
 + dh_compress -Xexamples 
 + dh_fixperms 
 + dh_installdeb 
 + dh_gencontrol 
 + dh_md5sums 
 + dh_builddeb 
 + 
 +# Build architecture independant packages using the common target. 
 +binary-indep: build-indep install-indep 
 + $(MAKE) -f debian/rules DH_OPTIONS=-i binary-common 
 + 
 +# Build architecture dependant packages using the common target. 
 +binary-arch: build-arch install-arch 
 + $(MAKE) -f debian/rules DH_OPTIONS=-s binary-common 
 + 
 +binary: binary-arch binary-indep 
 +.PHONY: build clean binary-indep binary-arch binary install install-indep install-arch  
 +</pre></html> 
 + 
 +==== Le fichier « control » ==== 
 +Nous devons ici ajouter la dépendance à la librairie ''libssl-dev''
 +<html><pre class="code"> 
 +Source: freeradius 
 +<span class="hly">Build-Depends: autotools-devdebhelper (>= 6.0.7), libgdbm-dev, libiodbc2-dev, libkrb5-dev, libldap2-dev, libltdl3-dev, libmysqlclient15-dev | libmysqlclient-dev, libpam0g-dev, libpcap-dev, libperl-dev, libpq-dev, libsasl2-dev, libsnmp-dev, libtool, python-dev, libssl-dev</span> 
 +Sectionnet 
 +Priorityoptional 
 +Maintainer: Stephen Gran <sgran@debian.org> 
 +Uploaders: Mark Hymers <mhy@debian.org> 
 +Standards-Version: 3.7.3
 ... ...
 </pre></html> </pre></html>
-Il nous reste à construire les binaires :+Et nous assurer qu'elle est bien présente sur notre système : 
 +  aptitude install libssl-dev
  
-  # cd ~/build_freeradius 
-  # apt-src build freeradius 
-  ... 
-  ... 
-  ... 
-  I: Successfully built in /root/build_freeradius/freeradius-1.1.3 
-  # ls -l | grep deb$ 
-  -rw-r--r-- 1 root root 761896 2007-01-11 18:10 freeradius_1.1.3-3tls_i386.deb 
-  -rw-r--r-- 1 root root 114398 2007-01-11 18:09 freeradius-dialupadmin_1.1.3-3tls_all.deb 
-  -rw-r--r-- 1 root root 31892 2007-01-11 18:10 freeradius-iodbc_1.1.3-3tls_i386.deb 
-  -rw-r--r-- 1 root root 32586 2007-01-11 18:10 freeradius-krb5_1.1.3-3tls_i386.deb 
-  -rw-r--r-- 1 root root 46894 2007-01-11 18:10 freeradius-ldap_1.1.3-3tls_i386.deb 
-  -rw-r--r-- 1 root root 31836 2007-01-11 18:10 freeradius-mysql_1.1.3-3tls_i386.deb 
-  -rw-r--r-- 1 root root 32280 2007-01-11 18:10 freeradius-postgresql_1.1.3-3tls_i386.deb 
  
-Nous n'avons ici besoin que de deux de ces paquets :+==== construction des binaires ==== 
 +Il nous reste à construire les paquets binaires : 
 +  cd ~/build_freeradius 
 +  apt-src build freeradius 
 +Une fois la compilation terminée, normalement sans message d'erreur, nous obtenons la liste des paquets qui suit. Nous n'avons pas besoin de les installer tous ici, puisque nous n'utiliserons que MySQL : 
 +<html><pre class="code"> 
 +ls -l *.deb 
 +<span class="hly">-rw-r--r-- 1 root root 513228 fév 22 16:20 freeradius_2.0.4+dfsg-6_i386.deb 
 +-rw-r--r-- 1 root root 205030 fév 22 16:21 freeradius-common_2.0.4+dfsg-6_all.deb</span> 
 +-rw-r--r-- 1 root root 949458 fév 22 16:20 freeradius-dbg_2.0.4+dfsg-6_i386.deb 
 +-rw-r--r-- 1 root root 132748 fév 22 16:21 freeradius-dialupadmin_2.0.4+dfsg-6_all.deb 
 +-rw-r--r-- 1 root root  17184 fév 22 16:20 freeradius-iodbc_2.0.4+dfsg-6_i386.deb 
 +-rw-r--r-- 1 root root  18082 fév 22 16:20 freeradius-krb5_2.0.4+dfsg-6_i386.deb 
 +-rw-r--r-- 1 root root  34426 fév 22 16:20 freeradius-ldap_2.0.4+dfsg-6_i386.deb 
 +<span class="hly">-rw-r--r-- 1 root root  24874 fév 22 16:20 freeradius-mysql_2.0.4+dfsg-6_i386.deb</span> 
 +-rw-r--r-- 1 root root  35364 fév 22 16:20 freeradius-postgresql_2.0.4+dfsg-6_i386.deb 
 +<span class="hly">-rw-r--r-- 1 root root  71282 fév 22 16:20 freeradius-utils_2.0.4+dfsg-6_i386.deb 
 +-rw-r--r-- 1 root root  85212 fév 22 16:20 libfreeradius2_2.0.4+dfsg-6_i386.deb</span> 
 +-rw-r--r-- 1 root root 103672 fév 22 16:20 libfreeradius-dev_2.0.4+dfsg-6_i386.deb 
 +</pre></html>
  
-  # dpkg -i freeradius_1.1.3-3tls_i386.deb freeradius-mysql_1.1.3-3tls_i386.deb+==== Installation des paquets utiles ==== 
 +La commande ''dpkg''
 +<code> 
 +dpkg -i libfreeradius2_2.0.4+dfsg-6_i386.deb freeradius-common_2.0.4+dfsg-6_all.deb freeradius_2.0.4+dfsg-6_i386.deb freeradius-mysql_2.0.4+dfsg-6_i386.deb freeradius-utils_2.0.4+dfsg-6_i386.deb 
 +</code>
  
-Vérifions que Freeradius est bien lancé :+==== Se protéger des mises à jour de « aptitude » ==== 
 +Si nous compilons maintenant le paquet binaire, nous obtiendrons des paquets ayant le même nom (version comprise), que les binaires de la distribution, et les mises à jour futures ne manqueront pas de nous remplacer notre construction à la première occasion.
  
-  # ps aux | grep radius +Une solution consiste à utiliser l'outil ''dpkg'' pour gérer la sélection des paquets installés. Faisons d'abord un : 
-  freerad 4118 0.0 0.8 44608 2224 ? Ssl 18:16 0:00 /usr/sbin/freeradius+  :~# dpkg --get-selections > packages 
 +De manière à obtenir le fichier ''packages'' qu'il nous faudra éditerSi nous recherchons les paquets relatifs à Freeradius qui sont installés (au cas où nous aurions des trous dans la mémoire) : 
 +<code> 
 +aptitude search freeradius | grep ^i 
 +i   freeradius                      - a high-performance and highly configurable 
 +i   freeradius-common               - FreeRadius common files                    
 +i   freeradius-mysql                - MySQL module for FreeRADIUS server         
 +i   freeradius-utils                - FreeRadius client utilities                
 +i   libfreeradius2                  - FreeRADIUS shared library 
 +</code>
  
-Nous devons maintenant préparer une base Mysql et configurer FreeRadius pour qu'il s'en serve.+Nous retrouvons dans le fichier ''packages'' que nous avons créé, les mêmes paquets :
  
-===== Configuration de Mysql =====+<code> 
 +cat packages | grep radius 
 +freeradius install 
 +freeradius-common install 
 +freeradius-mysql install 
 +freeradius-utils install 
 +libfreeradius2 install 
 +</code>
  
-Nous supposons que Mysql est correctement installéNous utilisons ici :+Nous devons éditer ce fichier en remplaçant l'information ''install'' par ''hold'', qui indiquera à ''apt'' que ces paquets ne doivent pas être touchés lors des mises à jourAprès édition, nous devons avoir : 
 +<code> 
 +cat packages | grep radius 
 +freeradius hold 
 +freeradius-common hold 
 +freeradius-mysql hold 
 +freeradius-utils hold 
 +libfreeradius2 hold 
 +</code>
  
-  # mysql -V +Il nous reste à entrer ces nouvelles informations dans la base de donnée des paquets installés :
-  mysql Ver 14.12 Distrib 5.0.30, for pc-linux-gnu (i486) using readline 5.2+
  
-Création de la Base « radius » et de l'utilisateur du même nom :+  :~# dpkg --set-selections < packages
  
-  # mysql -u root -p +Si tout s'est bien passéla vérification suivante doit donner :
-  Enter password: +
-  Welcome to the MySQL monitor. Commands end with ; or \g. +
-  Your MySQL connection id is 12 +
-  Server version: 5.0.30-Debian_3-log Debian etch distribution +
-   +
-  Type 'help;' or '\h' for help. Type '\c' to clear the buffer. +
-   +
-  mysql> create database radius; +
-  Query OK1 row affected (0.04 sec) +
-   +
-  mysql> grant all on radius.* to radius@'localhost' identified by 'epikoi'; +
-  Query OK, 0 rows affected (0.06 sec) +
-   +
-  mysql> exit +
-  Bye+
  
-La base est créée mais elle reste vide. Pour créer les tables, le paquet freeradius-mysql nous donne le schéma dans ''/usr/share/doc/freeradius/examples/mysql.sql.gz'' :+<code> 
 + aptitude search freeradius | grep ^i 
 +ih  freeradius                      - a high-performance and highly configurable 
 +ih  freeradius-common               - FreeRadius common files                    
 +ih  freeradius-mysql                - MySQL module for FreeRADIUS server         
 +ih  freeradius-utils                - FreeRadius client utilities                
 +ih  libfreeradius2                  - FreeRADIUS shared library 
 +</code>
  
-  # zcat /usr/share/doc/freeradius/examples/mysql.sql.gz | mysql -u root -p radius +Le ''h'' qui suit le ''i'' indique bien que ces paquets sont désormais protégés des mises à jour.
-  Enter password: +
-  #+
  
-Tout semble s'être correctement passéVérification :+===== Configuration ===== 
 +==== Création de la base MySQL ==== 
 +Nous voulons ici faire quelque chose de « simple ». Il sera toujours temps de compliquer les choses une fois que la solution minimale aura été validée. Notre base MySQL contiendra la liste des « utilisateurs » (chez nous des adresses MAC), la liste des « authenticators » (nos switchs et notre borne WI-FI) et éventuellement une liste d'utilisateurs autorisés à utiliser le WI-FI, nous verrons plus loin pourquoi.
  
-  # mysql -u radius -p +FreeRADIUS n'aura donc à manipuler cette base qu'en lecture, il n'aura rien à écrire dedans. Nous allons donc créer une base ''radius'' et un utilisateur ''radius'' qui ne pourra que faire des ''SELECT'' dans cette base. De cette manière, si notre serveur FreeRADIUS venait à être compromis, il ne pourrait pas facilement transformer la base en foutoir. 
-  Enter password: + 
-  Welcome to the MySQL monitor. Commands end with ; or \g. +Nous utilisons ici : 
-  Your MySQL connection id is 48 +  # mysql -V 
-  Server version: 5.0.30-Debian_3-log Debian etch distribution+  mysql  Ver 14.12 Distrib 5.0.51a, for debian-linux-gnu (i486) using readline 5.2 
 + 
 +Création de la base : 
 +  # mysql -u root -p 
 +  Enter password:  
 +  Welcome to the MySQL monitor.  Commands end with ; or \g. 
 +  Your MySQL connection id is 42 
 +  Server version: 5.0.51a-24 (Debian)
      
   Type 'help;' or '\h' for help. Type '\c' to clear the buffer.   Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
      
-  mysql> connect radius +  mysql> CREATE DATABASE radius; 
-  Reading table information for completion of table and column names +  Query OK, 1 row affected (0.01 sec) 
-  You can turn off this feature to get a quicker startup with -A +Création de l'utilisateur 
-   +  CREATE USER 'radius'@'localhost' IDENTIFIED BY 'epikoi'; 
-  Connection id49 +  GRANT SELECT ON radius . * TO 'radius'@'localhost'; 
-  Current database: radius +Pour la création des tables, FreeRADIUS propose des fichiers SQL qui vont nous aider ici. Ils se trouvent dans ''/etc/freeradius/sql/mysql/''. Le principal fichier s'appelle ''schema.sql'' et crée les tables les plus importantes : 
-   +  * ''radacct'' (inutilisée dans notre cas) ; 
-  mysql> show tables; +  * ''radcheck'' ; 
-  +------------------+ +  * ''radgroupcheck'' ; 
-  | Tables_in_radius | +  * ''radgroupreply'' (inutilisée dans notre cas) ; 
-  +------------------+ +  * ''radreply'' (inutilisée dans notre cas) ; 
-  | nas              | +  * ''radusergroup'' ; 
-  | radacct          | +  * ''radpostauth'' (inutilisée dans notre cas). 
-  radcheck         | +Le second s'appelle ''nas.sql'' et n'ajoute qu'une seule table ''nas''. Cette table est destinée à contenir les ''authenticators'' (nas)Nous pourrions nous en passer et utiliser un simple fichier texte à la place, d'autant que cette table n'est lue qu'une seule fois au déparrage de FreeRADIUS (contrairement à toutes les autreset n'apporte donc pas grand chose de plus qu'un fichier texte.
-  radgroupcheck    | +
-  radgroupreply    | +
-  | radpostauth      | +
-  radreply         | +
-  | usergroup        | +
-  +------------------+ +
-  8 rows in set (0.00 sec) +
-   +
-  mysql>+
  
-===== Configuration de FreeRadius =====+Finalement, pour vérification : 
 +<code> 
 +# mysql -uroot -pepikoi radius 
 +Reading table information for completion of table and column names 
 +You can turn off this feature to get a quicker startup with -A
  
-==== /etc/freeradius/radiusd.conf ====+Welcome to the MySQL monitor Commands end with ; or \g. 
 +Your MySQL connection id is 83 
 +Server version: 5.0.51a-24-log (Debian)
  
-Assurez-vous que seules les options définies dans ce qui suit sont activées (certaines options dans radiusd.conf sont à dé commenter, d'autres sont à commenter).+Type 'help;' or '\h' for helpType '\cto clear the buffer.
  
-== Dans la section « authorize » : ==+mysql> show tables; 
 ++------------------+ 
 +| Tables_in_radius | 
 ++------------------+ 
 +| nas              |  
 +| radacct          |  
 +| radcheck         |  
 +| radgroupcheck    |  
 +| radgroupreply    |  
 +| radpostauth      |  
 +| radreply         |  
 +| radusergroup     |  
 ++------------------+ 
 +8 rows in set (0.00 sec) 
 +</code>
  
-  authorize { +==== Configuration de FreeRADIUS ==== 
-          preprocess +C'est maintenant que nous allons vraiment commencer à nous amuser. En effet il y a pas mal de fichiers qui ont été placés dans ''/etc/freeradius'' et beaucoup vont devoir être modifiés.
-          eap +
-          sql +
-  }+
  
-== Dans la section « authenticate » ==+Dans ''/etc/freeradius/'', il y a ''radiusd.conf'' qui est le fichier principal. Il est copieusement documenté et fait par défaut appel à quelques autres dont nous n'aurons pas besoin. Voyons ceci : 
 +<code> 
 +# cat radiusd.conf | egrep -v -e '[[:blank:]]*#|^$' | grep \$INCLUDE 
 +$INCLUDE proxy.conf 
 +$INCLUDE clients.conf 
 +$INCLUDE snmp.conf 
 +$INCLUDE eap.conf 
 +$INCLUDE policy.conf 
 +$INCLUDE sites-enabled/ 
 +</code>
  
-  authenticate { +Dans notre cas très simple : 
-          Auth-Type CHAP { +  * ''proxy.conf'' ne nous servira pas ; 
-            chap +  * ''clients.conf''  de même. En effet, ce fichier contient les « nas » et nous allons les mettre dans la base MySQL ; 
-          } +  * ''snmp.conf'' ne nous sera d'aucune utilité ; 
-          eap +  * ''policy.conf'' probablement non plus, mais nous le garderons « d'usine ».
-  }+
  
-== Dans la section « accounting » ==+En revanche : 
 +  * ''eap.conf'' nous servira à configurer le mode « eap » ; 
 +  * ''sites-enabled/'' va contenir des liens symboliques vers des fichiers placés dans ''sites-availables/'' à la mode d'Apache2. Dans notre cas (très simple, rappelons-le), un seul site sera « available » et s'appellera poétiquement ''default''.
  
-  accounting { +Il reste enfin le fichier ''sql.conf'' qui sera nécessaire pour l'usage de MySQL et qui fait lui-même appel à ''/etc/freeradius/sql/mysql/dialup.conf'' que nous nous garderons  de toucher, bien que dans notre cas (très simple), il serait possible de le dégraisser quelque peu.
-          detail +
-          radutmp +
-          sql +
-  }+
  
-(Notez que cette section ne concerne pas l'authentification et qu'il est donc possible de la supprimer).+Au final, nous avons à voir et à modifier : 
 +  * ''/etc/freeradius/radiusd.conf''
 +  * ''/etc/freeradius/eap.conf''
 +  * ''/etc/freeradius/sql.conf''
 +  * ''/etc/freeradius/sites-available/default'' ;
  
-== Dans la section « session » : ==+Et nous supprimerons dans ''/etc/freeradius/sites-enabled/'' tout lien qui ne pointera pas sur ''/etc/freeradius/sites-available/default''.
  
-  session { +Lorsque je vous disais qu'il y a de quoi s'amuser... 
-          sql +=== radiusd.conf === 
-  }+Première chose à faire : 
 +  cd /etc/freeradius 
 +  mv radiusd.conf radiusd.conf.dist
  
-Voici un exemple complet de configuration, qui correspond à notre besoin du moment :+Deuxième chose à faire **Lire le contenu de ''radiusd.conf.dist'', histoire de comprendre un peu ce que l'on va faire par la suite...**.
  
-  prefix = /usr +Troisième chose : 
-  exec_prefix = /usr +  cat radiusd.conf.dist | egrep --e '^[[:blank:]]*#|^$' > radiusd.conf 
-  sysconfdir = /etc +De manière à ne pas se bousiller les yeux à chercher les lignes « utiles » dans la forêt de commentaires.
-  localstatedir = /var +
-  sbindir = ${exec_prefix}/sbin +
-  logdir = /var/log/freeradius +
-  raddbdir = /etc/freeradius +
-  radacctdir = ${logdir}/radacct +
-  confdir = ${raddbdir} +
-  run_dir = ${localstatedir}/run/freeradius +
-  log_file = ${logdir}/radius.log +
-  libdir = /usr/lib/freeradius +
-  pidfile = ${run_dir}/freeradius.pid +
-  user = freerad +
-  group = freerad +
-  max_request_time = 30 +
-  delete_blocked_requests = no +
-  cleanup_delay = 5 +
-  max_requests = 1024 +
-  bind_address = * +
-  port = 0 +
-  hostname_lookups = no +
-  allow_core_dumps = no +
-  regular_expressions     = yes +
-  extended_expressions    = yes +
-  log_stripped_names = no +
-  log_auth = no +
-  log_auth_badpass = no +
-  log_auth_goodpass = no +
-  usercollide = no +
-  lower_user = no +
-  lower_pass = no +
-  nospace_user = no +
-  nospace_pass = no +
-  checkrad = ${sbindir}/checkrad +
-  security { +
-          max_attributes = 200 +
-          reject_delay = 1 +
-          status_server = no +
-  } +
-  $INCLUDE  ${confdir}/clients.conf +
-  snmp    = no +
-  thread pool { +
-          start_servers = 5 +
-          max_servers = 32 +
-          min_spare_servers = 3 +
-          max_spare_servers = 10 +
-          max_requests_per_server = 0 +
-  } +
-  modules { +
-          chap { +
-                  authtype = CHAP +
-          } +
-  $INCLUDE ${confdir}/eap.conf +
-          checkval { +
-                  item-name = Calling-Station-Id +
-                  check-name = Calling-Station-Id +
-                  data-type = string +
-          } +
-         preprocess { +
-                  huntgroups = ${confdir}/huntgroups +
-                  hints = ${confdir}/hints +
-                  with_ascend_hack = no +
-                  ascend_channels_per_line = 23 +
-                  with_ntdomain_hack = no +
-                  with_specialix_jetstream_hack = no +
-                  with_cisco_vsa_hack = no +
-          } +
-          files { +
-                  usersfile = ${confdir}/users +
-                  compat = no +
-          } +
-          detail { +
-                  detailfile = ${radacctdir}/%{Client-IP-Address}/detail-%Y%m%d +
-                  detailperm = 0600 +
-          } +
-          acct_unique { +
-                  key = "User-Name, Acct-Session-Id, NAS-IP-Address, Client-IP-Address, NAS-Port" +
-          } +
-          $INCLUDE  ${confdir}/sql.conf +
-         radutmp { +
-                  filename = ${logdir}/radutmp +
-                  username = %{User-Name} +
-                  case_sensitive = yes +
-                  check_with_nas = yes +
-                  perm = 0600 +
-                  callerid = "yes" +
-          } +
-          radutmp sradutmp { +
-                  filename = ${logdir}/sradutmp +
-                  perm = 0644 +
-                  callerid = "no" +
-          } +
-          attr_filter { +
-                  attrsfile = ${confdir}/attrs +
-          } +
-          counter daily { +
-                  filename = ${raddbdir}/db.daily +
-                  key = User-Name +
-                  count-attribute = Acct-Session-Time +
-                  reset = daily +
-                  counter-name = Daily-Session-Time +
-                  check-name = Max-Daily-Session +
-                  allowed-servicetype = Framed-User +
-                  cache-size = 5000 +
-          } +
-          sqlcounter dailycounter { +
-                  counter-name = Daily-Session-Time +
-                  check-name = Max-Daily-Session +
-                  sqlmod-inst = sql +
-                  key = User-Name +
-                  reset = daily +
-                  query = "SELECT SUM(AcctSessionTime - \ +
-                   GREATEST((%b - UNIX_TIMESTAMP(AcctStartTime)), 0)) \ +
-                   FROM radacct WHERE UserName='%{%k}' AND \ +
-                   UNIX_TIMESTAMP(AcctStartTime) + AcctSessionTime &gt; '%b'" +
-          } +
-          sqlcounter monthlycounter { +
-                  counter-name = Monthly-Session-Time +
-                  check-name = Max-Monthly-Session +
-                  sqlmod-inst = sql +
-                  key = User-Name +
-                  reset = monthly +
-                  query = "SELECT SUM(AcctSessionTime - \ +
-                   GREATEST((%b - UNIX_TIMESTAMP(AcctStartTime)), 0)) \ +
-                   FROM radacct WHERE UserName='%{%k}' AND \ +
-                   UNIX_TIMESTAMP(AcctStartTime) + AcctSessionTime &gt; '%b'" +
-          } +
-          always fail { +
-                  rcode = fail +
-          } +
-          always reject { +
-                  rcode = reject +
-          } +
-          always ok { +
-                  rcode = ok +
-                  simulcount = 0 +
-                  mpp = no +
-          } +
-          expr { +
-          } +
-          digest { +
-          } +
-          exec { +
-                  wait = yes +
-                  input_pairs = request +
-          } +
-          exec echo { +
-                  wait = yes +
-                  program = "/bin/echo %{User-Name}" +
-                  input_pairs = request +
-                  output_pairs = reply +
-          } +
-  } +
-  authorize { +
-          preprocess +
-          sql +
-          eap +
-  } +
-  authenticate { +
-          Auth-Type CHAP { +
-                  chap +
-          } +
-          eap +
-  } +
-  preacct { +
-          preprocess +
-          acct_unique +
-          files +
-  } +
-  session { +
-          sql +
-  }+
  
-==== /etc/freeradius/sql.conf ==== +Nous obtenons quelque chose qui ressemble à :
-Les fichiers de configuration de FreeRadius se trouvent dans /etc/freeradius. Commençons par le plus « simple » (en réalité, il n'est pas simple du tout, mais il y a peu de choses à y faire). Aménagez en fonction de vos choix lors de la création de la base. Voici un exemple complet, qui est dépouillé de la partie « accounting » :+
 <html><pre class="code"> <html><pre class="code">
-  sql +prefix = /usr 
-   driver "rlm_sql_mysql" +exec_prefix = /usr 
-<span class="hly">   server "localhost" +sysconfdir = /etc 
-   login = "radius" +localstatedir = /var 
-   password "epikoi" +sbindir = ${exec_prefix}/sbin 
-   radius_db = "radius"</span> +logdir /var/log/freeradius 
-   acct_table1 "radacct" +raddbdir = /etc/freeradius 
-   acct_table2 "radacct" +radacctdir = ${logdir}/radacct 
-   postauth_table "radpostauth" +confdir = ${raddbdir} 
-   authcheck_table "radcheck" +run_dir = ${localstatedir}/run/freeradius 
-   authreply_table "radreply" +db_dir = $(raddbdir) 
-   groupcheck_table = "radgroupcheck+libdir = /usr/lib/freeradius 
-   groupreply_table "radgroupreply" +pidfile = ${run_dir}/freeradius.pid 
-   usergroup_table "usergroup" +user = freerad 
-   nas_table = "nas+group = freerad 
-   deletestalesessions yes +max_request_time = 30 
-   sqltrace = no +cleanup_delay = 5 
-   sqltracefile = ${logdir}/sqltrace.sql +max_requests = 1024 
-   num_sql_socks 5 +listen { 
-   connect_failure_retry_delay 60 + type = auth 
-   sql_user_name = "%{User-Name}" + ipaddr = * 
-   authorize_check_query "SELECT id, UserName, Attribute, Value, op \ + port = 0 
-            FROM ${authcheck_table\ +
-            WHERE Username '%{SQL-User-Name}' \ +listen { 
-            ORDER BY id" + ipaddr = * 
-   authorize_reply_query = "SELECT id, UserName, Attribute, Value, op \ + port = 0 
-            FROM ${authreply_table\ + type = acct 
-            WHERE Username '%{SQL-User-Name}' \ +
-            ORDER BY id" +hostname_lookups = no 
-   authorize_group_check_query "SELECT ${groupcheck_table}.id, \ +allow_core_dumps = no 
-     ${groupcheck_table}.GroupName,${groupcheck_table}.Attribute, \ +regular_expressions = yes 
-     ${groupcheck_table}.Value,${groupcheck_table}.op \ +extended_expressions = yes 
-     FROM ${groupcheck_table},${usergroup_table\ +log { 
-     WHERE ${usergroup_table}.Username = '%{SQL-User-Name}' \ + destination = files 
-     AND ${usergroup_table}.GroupName = ${groupcheck_table}.GroupName \ + file = ${logdir}/radius.log 
-     ORDER BY ${groupcheck_table}.id" + syslog_facility = daemon 
-   authorize_group_reply_query = "SELECT ${groupreply_table}.id, \ + stripped_names = no 
-     ${groupreply_table}.GroupName,${groupreply_table}.Attribute, \ + auth = no 
-     ${groupreply_table}.Value,${groupreply_table}.op  \ + auth_badpass = no 
-     FROM ${groupreply_table},${usergroup_table\ + auth_goodpass = no 
-     WHERE ${usergroup_table}.Username '%{SQL-User-Name}' \ +
-     AND ${usergroup_table}.GroupName = ${groupreply_table}.GroupName \ +checkrad = ${sbindir}/checkrad 
-     ORDER BY ${groupreply_table}.id" +security { 
-   simul_verify_query "SELECT RadAcctId, AcctSessionId, UserName, \ + max_attributes = 200 
-     NASIPAddress, NASPortId, FramedIPAddress, CallingStationId, FramedProtocol \ + reject_delay = 1 
-     FROM ${acct_table1\ + status_server = yes 
-     WHERE UserName='%{SQL-User-Name}' \ +} 
-     AND AcctStopTime = 0" +<span class="hly">#proxy_requests  yes 
-   group_membership_query "SELECT GroupName FROM ${usergroup_table\ +#$INCLUDE proxy.conf 
-     WHERE UserName='%{SQL-User-Name}'" +#$INCLUDE clients.conf</span> 
-   postauth_query = "INSERT into ${postauth_table(id, user, pass, reply, date) +snmp no 
-     values ('', '%{User-Name}', '%{User-Password:-Chap-Password}', \ +<span class="hly">#$INCLUDE snmp.conf</span> 
-     '%{reply:Packet-Type}', NOW())" +thread pool { 
-<span class="hly">  readclients yes</span> + start_servers 5 
-  }+ max_servers 32 
 + min_spare_servers 3 
 + max_spare_servers 10 
 + max_requests_per_server 0 
 +
 +modules { 
 +<span class="hly"># pap { 
 +# auto_header no 
 +# }</span> 
 + chap { 
 + authtype CHAP 
 +
 +<span class="hly"># pam { 
 +# pam_auth radiusd 
 +# } 
 +# unix { 
 +# radwtmp = ${logdir}/radwtmp 
 +# }</span> 
 +$INCLUDE eap.conf 
 + mschap { 
 +
 + ldap { 
 + server "ldap.your.domain" 
 + basedn "o=My Org,c=UA" 
 + filter = "(uid=%{Stripped-User-Name:-%{User-Name}})
 + ldap_connections_number 5 
 + timeout = 4 
 + timelimit = 3 
 + net_timeout = 1 
 + tls { 
 + start_tls = no 
 +
 + dictionary_mapping ${confdir}/ldap.attrmap 
 + edir_account_policy_check = no 
 +
 + realm IPASS { 
 + format = prefix 
 + delimiter = "/" 
 +
 + realm suffix { 
 + format = suffix 
 + delimiter = "@" 
 +
 + realm realmpercent { 
 + format suffix 
 + delimiter = "%
 +
 + realm ntdomain { 
 + format = prefix 
 + delimiter = "\\" 
 + }  
 + checkval { 
 + item-name = Calling-Station-Id 
 + check-name = Calling-Station-Id 
 + data-type = string 
 +
 +  
 + preprocess { 
 + huntgroups = ${confdir}/huntgroups 
 + hints = ${confdir}/hints 
 + with_ascend_hack = no 
 + ascend_channels_per_line = 23 
 + with_ntdomain_hack = no 
 + with_specialix_jetstream_hack = no 
 + with_cisco_vsa_hack = no 
 +
 + files { 
 + usersfile = ${confdir}/users 
 + acctusersfile = ${confdir}/acct_users 
 + preproxy_usersfile = ${confdir}/preproxy_users 
 + compat = no 
 +
 + detail { 
 + detailfile = ${radacctdir}/%{Client-IP-Address}/detail-%Y%m%d 
 + detailperm = 0600 
 + header = "%t" 
 +
 + acct_unique { 
 + key = "User-Name, Acct-Session-Id, NAS-IP-Address, Client-IP-Address, NAS-Port" 
 +
 +<span class="hly"> $INCLUDE ${confdir}/sql.conf</span> 
 + radutmp { 
 + filename = ${logdir}/radutmp 
 + username = %{User-Name
 + case_sensitive = yes 
 + check_with_nas = yes  
 + perm = 0600 
 + callerid = "yes" 
 +
 + radutmp sradutmp { 
 + filename = ${logdir}/sradutmp 
 + perm = 0644 
 + callerid = "no" 
 +
 + attr_filter attr_filter.post-proxy { 
 + attrsfile = ${confdir}/attrs 
 +
 + attr_filter attr_filter.pre-proxy { 
 + attrsfile = ${confdir}/attrs.pre-proxy 
 + } 
 + attr_filter attr_filter.access_reject { 
 + key = %{User-Name} 
 + attrsfile = ${confdir}/attrs.access_reject 
 + } 
 + attr_filter attr_filter.accounting_response { 
 + key = %{User-Name} 
 + attrsfile = ${confdir}/attrs.accounting_response 
 +
 + counter daily { 
 + filename = ${db_dir}/db.daily 
 + key = User-Name 
 + count-attribute = Acct-Session-Time 
 + reset = daily 
 + counter-name = Daily-Session-Time 
 + check-name = Max-Daily-Session 
 + reply-name = Session-Timeout 
 + allowed-servicetype = Framed-User 
 + cache-size = 5000 
 +
 + always fail { 
 + rcode = fail 
 +
 + always reject { 
 + rcode reject 
 + } 
 + always noop { 
 + rcode = noop 
 +
 + always handled { 
 + rcode handled 
 +
 + always updated { 
 + rcode = updated 
 +
 + always notfound { 
 + rcode = notfound 
 +
 + always ok { 
 + rcode = ok 
 + simulcount = 0 
 + mpp no 
 +
 + expr { 
 +
 + digest { 
 +
 + expiration { 
 + reply-message = "Password Has Expired\r\n"  
 + } 
 + logintime { 
 + reply-message = "You are calling outside your allowed timespan\r\n" 
 + minimum-timeout = 60 
 +
 + exec { 
 + wait = yes 
 + input_pairs = request 
 + shell_escape = yes 
 + output = none 
 +
 + exec echo { 
 + wait = yes 
 + program = "/bin/echo %{User-Name}
 + input_pairs = request 
 + output_pairs = reply 
 + shell_escape = yes 
 +
 + ippool main_pool { 
 + range-start = 192.168.1.1 
 + range-stop = 192.168.3.254 
 + netmask = 255.255.255.0 
 + cache-size = 800 
 + session-db = ${db_dir}/db.ippool 
 + ip-index = ${db_dir}/db.ipindex 
 + override no 
 + maximum-timeout 
 +
 + policy { 
 +        filename = ${confdir}/policy.txt 
 + } 
 +
 +instantiate { 
 + exec 
 + expr 
 + expiration 
 + logintime 
 +
 +$INCLUDE policy.conf 
 +$INCLUDE sites-enabled/
 </pre></html> </pre></html>
-==== /etc/freeradius/eap.conf ====+Il y a dans ce fichier plein de choses que nous pourrions enlever car elles ne nous servent à rien (dans notre cas...). Les lignes surlignées montrent ce qu'il est nécessaire de modifier pour nos besoins. 
 + 
 +=== sites-avalable/default === 
 +Assez peu de choses dans ce fichier, compte tenu de la simplicité de nos besoins : 
 +<html><pre class="code"> 
 +authorize { 
 + preprocess 
 + eap { 
 + ok = return 
 +
 + sql 
 +
 +authenticate { 
 + Auth-Type CHAP { 
 + chap 
 +
 + eap 
 +
 +session { 
 + sql 
 +
 +</pre></html> 
 + 
 +=== eap.conf === 
 +Il s'agit d'indiquer que nous utiliserons ''tls'' et donner le chemin d'accès aux certificats de la racine et du serveur, ainsi que la clé privée du serveur, qui peut ici être protégée par un mot de passe.
  
 Nous avons décidé, en préparant notre système Wi-Fi, d'utiliser EAP-TLS pour l'authentification des utilisateurs. Lors de la création des certificats pour WPA2, nous avons créé : Nous avons décidé, en préparant notre système Wi-Fi, d'utiliser EAP-TLS pour l'authentification des utilisateurs. Lors de la création des certificats pour WPA2, nous avons créé :
Ligne 486: Ligne 822:
   * sysop@maison.mrs-cert.pem qui est le certificat du serveur FreeRADIUS. Nous l'avons créé de manière à ce qu'il contienne la clé privée du serveur.   * sysop@maison.mrs-cert.pem qui est le certificat du serveur FreeRADIUS. Nous l'avons créé de manière à ce qu'il contienne la clé privée du serveur.
  
-Nous allons utiliser ici ces deux certificats, qu'il faut placer dans le répertoire /etc/freeradius/certs. Ce répertoire devrait contenir :+Nous allons utiliser ici ces deux certificats, qu'il faut placer dans le répertoire ''/etc/freeradius/certs''
  
-  /etc/freeradius/certs# ls -+De même, nous pouvons y créer le fichier ''dh'' (Pour l'échange « Diffie-Hellman ») : 
-  total 12 +  openssl dhparam -check -text -5 512 -out dh 
-  -rw-r----- 1 root freerad    0 2007-03-12 11:11 dh +Ainsi qu'un fichier ''random'' 
-  -rw-r----- 1 root freerad 3242 2007-03-12 15:38 maison.mrs-cert.pem +  dd if=/dev/urandom of=random count=2
-  -rw-r----- 1 root freerad 1024 2007-03-12 11:11 random +
-  -rw-r----- 1 root freerad 2610 2007-03-12 15:25 root_maison_CA-cacert.pem+
  
-Faites attention aux droits d'accès des fichiers de ce répertoire. Il suffit maintenant de modifier eap.conf de la sorte :+Ce répertoire devrait finalement contenir :  
 +<code> 
 +/etc/freeradius/certs# ls -l 
 +total 12 
 +-rw-r----- 1 root freerad    0 2007-03-12 11:11 dh 
 +-rw-r----- 1 root freerad 3242 2007-03-12 15:38 maison.mrs-cert.pem 
 +-rw-r----- 1 root freerad 1024 2007-03-12 11:11 random 
 +-rw-r----- 1 root freerad 2610 2007-03-12 15:25 root_maison_CA-cacert.pem 
 +</code> 
 +Faites attention aux droits d'accès des fichiers de ce répertoire. Il suffit maintenant de modifier ''eap.conf'' de la sorte  
 +<html><pre class="code"> 
 +        eap { 
 +                default_eap_type = tls 
 +                timer_expire     = 60 
 +                ignore_unknown_eap_types = no 
 +                cisco_accounting_username_bug = no 
 +                tls { 
 +                        private_key_password = epikoi 
 +                        private_key_file = ${raddbdir}/certs/maison.mrs-cert.pem 
 +                        certificate_file = ${raddbdir}/certs/maison.mrs-cert.pem 
 +                        CA_file = ${raddbdir}/certs/Root_maison_CA-cacert.pem 
 +                        CA_path = ${raddbdir}/certs/ 
 +                        dh_file = ${raddbdir}/certs/dh 
 +                        random_file = ${raddbdir}/certs/random 
 +                        fragment_size = 1024 
 +                        include_length = yes 
 +                        check_crl = no 
 +                }
  
-          eap +                mschapv2 
-                  default_eap_type = tls +                
-                  timer_expire     = 60 +        
-                  ignore_unknown_eap_types = no +</pre></html>
-                  cisco_accounting_username_bug = no +
-                  tls { +
-                          private_key_password = epikoi +
-                          private_key_file = ${raddbdir}/certs/sysop@maison.mrs-cert.pem +
-                          certificate_file = ${raddbdir}/certs/sysop@maison.mrs-cert.pem +
-                          CA_file = ${raddbdir}/certs/root_maison_CA-cacert.pem +
-                          CA_path = ${raddbdir}/certs/ +
-                          dh_file = ${raddbdir}/certs/dh +
-                          random_file = ${raddbdir}/certs/random +
-                          fragment_size = 1024 +
-                          include_length = yes +
-                          check_crl = no +
-                  } +
-          }+
  
-N'oublions pas de relancer FreeRadius pour qu'il prenne en compte la nouvelle configuration.+=== sql.conf === 
 +Nous avons une base MySQL ''radius'' et un utilisateur du même nom, capable de lire dans cette base :  
 +<code> 
 +sql { 
 + database = "mysql" 
 + driver = "rlm_sql_${database}" 
 + server = "localhost" 
 + login = "radius" 
 + password = "epikoi" 
 + radius_db = "radius" 
 + acct_table1 = "radacct" 
 + acct_table2 = "radacct" 
 + postauth_table = "radpostauth" 
 + authcheck_table = "radcheck" 
 + authreply_table = "radreply" 
 + groupcheck_table = "radgroupcheck" 
 + groupreply_table = "radgroupreply" 
 + usergroup_table = "radusergroup" 
 + deletestalesessions = yes 
 + sqltrace = no 
 + sqltracefile = ${logdir}/sqltrace.sql 
 + num_sql_socks = 5 
 + connect_failure_retry_delay = 60 
 + nas_table = "nas" 
 + $INCLUDE sql/${database}/dialup.conf 
 + readclients = yes 
 +
 +</code> 
 +Le fichier inclus ''dialup.conf'' pourrait être copieusement dégraissé dans notre cas, mais nous n'y toucherons pas.
  
-===== Premier test =====+===== Vérifions... =====
  
-Nous créons un « authenticator » de test dans la table « nas » :+==== Essai chap ==== 
 +Nous créons un « authenticator » de test dans la table « nas » :
  
-  echo "INSERT INTO nas(nasname,shortname,secret) VALUES ('127.0.0.1','localhost','naspassword');" +  echo "INSERT INTO nas(nasname,shortname,secret) VALUES ('127.0.0.1','localhost','naspassword');" | mysql -u root -p radius
-   | mysql -u root -p radius+
  
-Nous créons un utilisateur de test dans « radcheck » :+Nous créons un utilisateur de test dans « radcheck » 
  
-  echo "INSERT INTO radcheck(UserName,Attribute,op,Value) VALUES ('test0','User-Password','==','userpassword');" +  echo "INSERT INTO radcheck(UserName,Attribute,op,Value) VALUES ('test0','Cleartext-Password',':=','userpassword');" | mysql -u root -p radius
-   | mysql -u root -p radius+
  
-Notez que l'on utilise un mot de passe en clair dans la basece qui correspondra à un protocole « chap » pour l'authentification.+Enfin nous démarrons freeradius en mode « debug »dans une console avec : 
 +  freeradius -X 
 + 
 +Le mode « debug » s'avère très volubile, mais instructif :
  
-Enfin, depuis le serveur radius lui-même, qui va pour l'occasion cumuler le rôle d'authenticator, nous utilisons l'outil radtest : 
 <html><pre class="code"> <html><pre class="code">
-# radtest test0 userpassword 127.0.0.naspassword +FreeRADIUS Version 2.0.4, for host i486-pc-linux-gnu, built on Feb 22 2009 at 16:19:09 
-Sending Access-Request of id 146 to 127.0.0.port 1812 +Copyright (C) 1999-2008 The FreeRADIUS server project and contributors 
-User-Name = "test0+There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A  
-User-Password = "userpassword+PARTICULAR PURPOSE.  
-NAS-IP-Address 255.255.255.255 +You may redistribute copies of FreeRADIUS under the terms of the  
-NAS-Port 0 +GNU General Public License.  
-<span class="hly">rad_recvAccess-Accept</span> packet from host 127.0.0.1:1812, id=146, length=20+Starting - reading configuration files ... 
 +<span class="hly">including configuration file /etc/freeradius/radiusd.conf 
 +including configuration file /etc/freeradius/eap.conf 
 +including configuration file /etc/freeradius/sql.conf 
 +including configuration file /etc/freeradius/sql/mysql/dialup.conf 
 +including configuration file /etc/freeradius/policy.conf 
 +including files in directory /etc/freeradius/sites-enabled/ 
 +including configuration file /etc/freeradius/sites-enabled/default 
 +including dictionary file /etc/freeradius/dictionary</span> 
 +main { 
 + prefix = "/usr" 
 + localstatedir = "/var" 
 + logdir = "/var/log/freeradius" 
 + libdir = "/usr/lib/freeradius" 
 + radacctdir = "/var/log/freeradius/radacct" 
 + hostname_lookups = no 
 + max_request_time = 30 
 + cleanup_delay = 5 
 + max_requests = 1024 
 + allow_core_dumps = no 
 + pidfile = "/var/run/freeradius/freeradius.pid" 
 + user = "freerad" 
 + group = "freerad" 
 + checkrad = "/usr/sbin/checkrad" 
 + debug_level = 
 + proxy_requests = yes 
 + security { 
 + max_attributes = 200 
 + reject_delay = 1 
 + status_server = yes 
 + } 
 +
 +radiusd: #### Loading Realms and Home Servers #### 
 +radiusd: #### Instantiating modules #### 
 + instantiate { 
 + Module: Linked to module rlm_exec 
 + Module: Instantiating exec 
 +  exec { 
 + wait = yes 
 + input_pairs = "request" 
 + shell_escape = yes 
 +  } 
 + Module: Linked to module rlm_expr 
 + Module: Instantiating expr 
 + Module: Linked to module rlm_expiration 
 + Module: Instantiating expiration 
 +  expiration { 
 + reply-message = "Password Has Expired 
 +  } 
 + Module: Linked to module rlm_logintime 
 + Module: Instantiating logintime 
 +  logintime { 
 + reply-message = "You are calling outside your allowed timespan 
 + minimum-timeout = 60 
 +  } 
 + } 
 +radiusd: #### Loading Virtual Servers #### 
 +server { 
 + modules { 
 + Module: Checking authenticate {...} for more modules to load 
 + Module: Linked to module rlm_eap 
 + Module: Instantiating eap 
 +  eap { 
 + default_eap_type = "tls" 
 + timer_expire = 60 
 + ignore_unknown_eap_types = no 
 + cisco_accounting_username_bug = no 
 +  } 
 + Module: Linked to sub-module rlm_eap_tls 
 + Module: Instantiating eap-tls 
 +   tls { 
 + rsa_key_exchange = no 
 + dh_key_exchange = yes 
 + rsa_key_length = 512 
 + dh_key_length = 512 
 + verify_depth = 0 
 + CA_path = "/etc/freeradius/certs/" 
 + pem_file_type = yes 
 + private_key_file = "/etc/freeradius/certs/radius.eme.org-cert.pem" 
 + certificate_file = "/etc/freeradius/certs/radius.eme.org-cert.pem" 
 + CA_file = "/etc/freeradius/certs/Root_EME_CA-cacert.pem" 
 + private_key_password = "ph34rl3r4dius" 
 + dh_file = "/etc/freeradius/certs/dh" 
 + random_file = "/etc/freeradius/certs/random" 
 + fragment_size = 1024 
 + include_length = yes 
 + check_crl = no 
 +   } 
 + Module: Linked to sub-module rlm_eap_mschapv2 
 + Module: Instantiating eap-mschapv2 
 +   mschapv2 { 
 + with_ntdomain_hack = no 
 +   } 
 + Module: Linked to module rlm_chap 
 + Module: Instantiating chap 
 + Module: Checking authorize {...} for more modules to load 
 + Module: Linked to module rlm_preprocess 
 + Module: Instantiating preprocess 
 +  preprocess { 
 + huntgroups = "/etc/freeradius/huntgroups" 
 + hints = "/etc/freeradius/hints" 
 + with_ascend_hack = no 
 + ascend_channels_per_line = 23 
 + with_ntdomain_hack = no 
 + with_specialix_jetstream_hack = no 
 + with_cisco_vsa_hack = no 
 + with_alvarion_vsa_hack = no 
 +  } 
 + Module: Linked to module rlm_sql 
 + Module: Instantiating sql 
 +  sql { 
 + driver = "rlm_sql_mysql" 
 + server = "localhost" 
 + port = "" 
 + login = "radius" 
 + password = "epikoi" 
 + radius_db = "radius" 
 + read_groups = yes 
 + sqltrace = yes 
 + sqltracefile = "/var/log/freeradius/sqltrace.sql" 
 + readclients = yes 
 + deletestalesessions = yes 
 + num_sql_socks = 5 
 + sql_user_name = "%{User-Name}" 
 + default_user_profile = "" 
 + nas_query = "SELECT id, nasname, shortname, type, secret FROM nas" 
 + authorize_check_query = "SELECT id, username, attribute, value, op FROM radcheck WHERE username = '%{SQL-User-Name}' ORDER BY id" 
 + authorize_reply_query = "SELECT id, username, attribute, value, op FROM radreply WHERE username = '%{SQL-User-Name}' ORDER BY id
 + authorize_group_check_query = "SELECT id, groupname, attribute, value, op FROM radgroupcheck WHERE groupname = '%{Sql-Group}' ORDER BY id" 
 + authorize_group_reply_query = "SELECT id, groupname, attribute, value, op FROM radgroupreply WHERE groupname = '%{Sql-Group}' ORDER BY id" 
 + accounting_onoff_query "" 
 + accounting_update_query = "" 
 + accounting_update_query_alt = "" 
 + accounting_start_query = "" 
 + accounting_start_query_alt = "" 
 + accounting_stop_query = "" 
 + accounting_stop_query_alt = "" 
 + group_membership_query = "SELECT groupname FROM radusergroup WHERE username = '%{SQL-User-Name}' ORDER BY priority" 
 + connect_failure_retry_delay 60 
 + simul_count_query = "" 
 + simul_verify_query = "" 
 + postauth_query = "INSERT INTO radpostauth (username, pass, reply, authdate) VALUES ('%{User-Name}','%{%{User-Password}:-%{Chap-Password}}','%{reply:Packet-Type}', '%S')" 
 + safe-characters = "@abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.-_: /
 +  } 
 +rlm_sql (sql): Driver rlm_sql_mysql (module rlm_sql_mysql) loaded and linked 
 +rlm_sql (sql): Attempting to connect to radius@localhost:/radius 
 +rlm_sql (sql): starting 0 
 +rlm_sql (sql): Attempting to connect rlm_sql_mysql #0 
 +rlm_sql_mysql: Starting connect to MySQL server for #0 
 +rlm_sql (sql): Connected new DB handle, #0 
 +rlm_sql (sql): starting 1 
 +rlm_sql (sql): Attempting to connect rlm_sql_mysql #1 
 +rlm_sql_mysql: Starting connect to MySQL server for #1 
 +rlm_sql (sql): Connected new DB handle, #1 
 +rlm_sql (sql): starting 2 
 +rlm_sql (sql): Attempting to connect rlm_sql_mysql #2 
 +rlm_sql_mysql: Starting connect to MySQL server for #2 
 +rlm_sql (sql): Connected new DB handle, #2 
 +rlm_sql (sql): starting 3 
 +rlm_sql (sql): Attempting to connect rlm_sql_mysql #3 
 +rlm_sql_mysql: Starting connect to MySQL server for #3 
 +rlm_sql (sql): Connected new DB handle, #3 
 +rlm_sql (sql): starting 4 
 +rlm_sql (sql): Attempting to connect rlm_sql_mysql #4 
 +rlm_sql_mysql: Starting connect to MySQL server for #4 
 +rlm_sql (sql): Connected new DB handle, #4 
 +rlm_sql (sql): Processing generate_sql_clients 
 +rlm_sql (sql) in generate_sql_clients: query is SELECT id, nasname, shortname, type, secret FROM nas 
 +rlm_sql (sql): Reserving sql socket id: 4 
 +rlm_sql_mysql: query:  SELECT id, nasname, shortname, type, secret FROM nas 
 +rlm_sql (sql): Read entry nasname=127.0.0.1,shortname=localhost,secret=naspassword 
 +rlm_sql (sql)Adding client 127.0.0.1 (localhostserver=<none>) to clients list 
 +rlm_sql (sql): Released sql socket id: 4 
 + Module: Checking session {...} for more modules to load 
 + } 
 +
 +radiusd: #### Opening IP addresses and Ports #### 
 +listen { 
 + type "auth" 
 + ipaddr 
 + port = 0 
 +
 +listen { 
 + type = "acct" 
 + ipaddr = * 
 + port = 0 
 +
 +main { 
 + snmp = no 
 + smux_password = "" 
 + snmp_write_access = no 
 +
 +<span class="hly">Listening on authentication address * port 1812 
 +Listening on accounting address * port 1813 
 +Listening on proxy address * port 1814 
 +Ready to process requests.</span>
 </pre></html> </pre></html>
  
-Notre solution fonctionneIl ne nous reste qu'à ajouter dans la table « nas » nos switchs nos points d'accès Wi-Fiet dans la table « radcheck » toutes nos adresses MAC en guise d'utilisateurs pour le réseau filaire (« UserName » et « User-Password » identiques).+Notez la liste de tous les fichiers inclus, en cas de problèmeNotez également que le serveur, si rien n'a coincé dans la configurationest prêt à recevoir des requêtes. Notez enfin que tout ceci n'est pas très proprepuisque nous n'utilisons pas ici ni l' ''accounting'' ni le ''proxy'', mais que FreeRADIUS va tout de même ouvrir ces ports. Il y aurait pas mal de « tuning » à faire.
  
 +Dans une autre console, nous allons essayer une authentification avec l'utilitaire ''radtest'' :
 +  radtest test0 userpassword 127.0.0.1 0 naspassword
 +
 +Nous devrions obtenir la réponse :
 +<html><pre class="code">
 +Sending Access-Request of id 197 to 127.0.0.1 port 1812
 + User-Name = "test0"
 + User-Password = "userpassword"
 + NAS-IP-Address = 127.0.1.1
 + NAS-Port = 0
 +<span class="hly">rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=197, length=20</span>
 +</pre></html>
 +
 +Dans la console où s'exécute FreeRADIUS en mode « debug » :
 +
 +<html><pre class="code">
 +<span class="hly">rad_recv: Access-Request packet from host 127.0.0.1 port 50494, id=197, length=57
 + User-Name = "test0"
 + User-Password = "userpassword"</span>
 + NAS-IP-Address = 127.0.1.1
 + NAS-Port = 0
 ++- entering group authorize
 +++[preprocess] returns ok
 +  rlm_eap: No EAP-Message, not doing EAP
 +++[eap] returns noop
 + expand: %{User-Name} -> test0
 +rlm_sql (sql): sql_set_user escaped user --> 'test0'
 +rlm_sql (sql): Reserving sql socket id: 3
 + expand: SELECT id, username, attribute, value, op FROM radcheck WHERE username = '%{SQL-User-Name}'  ORDER BY id -> SELECT id, username, attribute, value, op FROM radcheck WHERE username = 'test0' ORDER BY id
 +<span class="hly">rlm_sql_mysql: query:  SELECT id, username, attribute, value, op FROM radcheck WHERE username = 'test0' ORDER BY id
 +rlm_sql (sql): User found in radcheck table</span>
 + expand: SELECT id, username, attribute, value, op FROM radreply WHERE username = '%{SQL-User-Name}' ORDER BY id -> SELECT id, username, attribute, value, op FROM radreply  WHERE username = 'test0' ORDER BY id
 +rlm_sql_mysql: query:  SELECT id, username, attribute, value, op FROM radreply WHERE username = 'test0' ORDER BY id
 + expand: SELECT groupname FROM radusergroup WHERE username = '%{SQL-User-Name}' ORDER BY priority -> SELECT groupname FROM radusergroup WHERE username = 'test0' ORDER BY priority
 +rlm_sql_mysql: query:  SELECT groupname FROM radusergroup WHERE username = 'test0' ORDER BY priority
 +rlm_sql (sql): Released sql socket id: 3
 +++[sql] returns ok
 +<span class="hly">auth: type Local
 +auth: user supplied User-Password matches local User-Password
 +Login OK: [test0/userpassword] (from client localhost port 0)
 +Sending Access-Accept of id 197 to 127.0.0.1 port 50494</span>
 +Finished request 0.
 +Going to the next request
 +Waking up in 4.9 seconds.
 +Cleaning up request 0 ID 197 with timestamp +6
 +Ready to process requests.
 +</pre></html>
 + 
 +Notre authentification par nom d'utilisateur et mot de passe (chap) fonctionne correctement. Il ne nous reste qu'à ajouter dans la table « nas » nos switchs , nos points d'accès Wi-Fi, et dans la table « radcheck » toutes nos adresses MAC en guise d'utilisateurs pour le réseau filaire (« UserName » et valeur de l'attribut « Cleartext-Password » identiques).
FreeRADIUS: Dernière modification le: 21/03/2009 à 15:17 par