Introduction

Un système radius est divisé en 4 grandes parties :

  • Un serveur RADIUS
  • Une base de données
  • Un NAS Radius (Network Acces Service)
  • Un client final

Le serveur Radius reçoit les demandes d'authentifications provenant du NAS Radius, consulte la base de données et authorise ou non l'authentification. Il peut également renvoyer des paramêtres supplémentaires si la l'authentification à réussi. (Par exemple l'adresse IP à attribuer au client dans le cas d'une connexion PPTP)

La base de données contient la liste des utilisateurs Radius ainsi que des informations de connexion à leur renvoyer si la tentative de conexion a réussi. Avec une base de données Mysql, il est possible d'attribuer des paramètres à un groupe d'utilisateurs ou à un seul utilisateur.

Le NAS Radius est le point d'accès au réseau (ici le serveur PPTP).

Le client final envoit ses informations d'authentification au NAS Radius.

Sommaire

  • 1- Installation de FreeRadius
  • 2- Installation / Configuration de Mysql
  • 2.1- Installation de mysql server
  • 2.2- Changement du mot de passe root mysql par default
  • 2.3- Creation de la base radius
  • 2.4- Creation de l'utilisateur mysql : radius
  • 2.5- Importation du schéma mysql
  • 2.6- Descriptions des tables Mysql de la base radius
  • 2.6.1- La table : nas
  • 2.6.2- La table : radacct
  • 2.6.3- La table : radcheck
  • 2.6.4- La table : radgroupcheck
  • 2.6.5- La table : radreply
  • 2.6.6- La table : radgroupreply
  • 2.6.7- La table : usergroup
  • 2.6.8- La table : radpostauth
  • 3- Configuration de FreeRadius
  • 3.1- Le fichier /etc/freeradius/sql.conf
  • 3.2- Le fichier /etc/freeradius/radiusd.conf
  • 4- Test de l'installation de freeradius
  • 4.1- Ajout d'un NAS
  • 4.2- Lancer freeradius en mode console : mode debug
  • 4.3- Test de l'authentification
  • 5- Installation / Configuration de pptpd
  • 5.1- Installation de pptpd
  • 5.2- Configuration de pptpd
  • 5.2.1- Le fichier /etc/pptpd.conf
  • 5.2.2- Le fichier /etc/ppp/pptpd-options

1- Installation de FreeRadius

shell> apt-get install freeradius freeradius-mysql

Note : La configuration de FreeRadius sera effectuée après l'installation et la configuration de MySQL.

2- Installation / Configuration de Mysql

2.1- Installation de mysql server

Avec une Debian Sarge nous installerons un serveur mysql 4.1 :

shell> apt-get install mysql-server-4.1 mysql-client

Avec une Debian Etch nous installerons un serveur mysql 5.0 :

shell> apt-get install mysql-server-5.0 mysql-client

2.2- Changement du mot de passe root mysql par default

Le login par default de mysql est root sans mot de passe. Nous ne pouvons pas laisser les choses comme ça, nous allons donc spécifier un mot de passe pour l'utilisateur root de mysql. Remplacer ci dessous <password_mysql_root> par le mot de passe root que vous souhaitez.

shell> mysql --user=root mysql
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('<password_mysql_root>');
mysql> flush privileges;
mysql> quit;

2.3- Creation de la base radius

On va créer une base spécifique à notre configuration radius.

mysqladmin --user=root -p<password_mysql_root> create radius

2.4- Creation de l'utilisateur mysql : radius

Nous pourrions nous connecter en root à notre base de données radius mais nous allons préférer créer un utilisateur mysql spécifique qui ne pourra accèder qu'a la base de données radius.

Nous allons appeler cette utilisateur : radius

Remplacer ci dessous <password_mysql_radius> pas le mot de passe que vous souhaitez donner à l'utilisateur radius

shell> mysql --user=root -p<password_mysql_root> mysql
mysql> GRANT ALL ON ftp.* TO radius@localhost IDENTIFIED BY '<password_mysql_radius>';
mysql> flush privileges;
mysql> quit;

Nous avons donc maintenant :

  • Une base de données : radius
  • Un utilisateur : radius qui ne peux accèder qu'a la base de données radius

2.5- Importation du schéma mysql

Nous avons à notre disposition dans /usr/share/doc/freeradius/examples/ notre schéma mysql tout près ;-) (Souvenez-vous, nous avons installé freeradius sans l'avoir configuré. Cela n'était bien-sûr pas fait par hazard.)

Avec une Debian Sarge :

shell> gunzip /usr/share/doc/freeradius/examples/db_mysql.sql.gz
shell> mysql --user=radius -p<password_mysql_radius> radius < /usr/share/doc/freeradius/examples/db_mysql.sql

Avec une Debian Etch :

shell> gunzip /usr/share/doc/freeradius/examples/mysql.sql.gz
shell> mysql --user=radius -p<password_mysql_radius> radius < /usr/share/doc/freeradius/examples/mysql.sql

2.6- Descriptions des tables Mysql de la base radius

La base de données est composées de 8 tables permettant de définir : les droits de chaque utilisateur Les drooits de chaque groupes

2.6.1- La table : nas

Cetta table contient les mêmes informations que le fichier /etc/freeradius/clients.conf. Elle permet d'ajouter des NAS.

key          value
nasname      127.0.0.1
shortname    nas1
type         other
ports
secret       mySecret
community    public
description  NAS1 pour les tests

2.6.2- La table : radacct

Cette table contient toutes les informations de connexion, deconnexion, etc ...

C'est une table que vous accederer en lecture essentiellement. Aucun paramètre à effectuer dans cette table.

2.6.3- La table : radcheck

Cette table contient les informations à vérifier lors de l'authentification. Essentiellement elle contiendra des login/mot de passe.

key        value
UserName   yoann
Attribute  User-Password
op         ==
Value      test

2.6.4- La table : radgroupcheck

Cette table fonctionne comme la table radcheck, mais avec une notion de groupe. (Elle permet par exemple de vérifié que les utilisateurs du groupe PPTP ont bien la valeur “1� (PPP) pour la clef Framed-Protocol, la valeur 2 aurait été pour SLIP)

key        value
GroupName  PPTP
Attribute  Framed-Protocol
op         ==
Value      1

2.6.5- La table : radreply

Cette table contient les paramètres renvoyé aux clients après une authentification réussi. (Elle permet par exemple d'attribuer une adresse IP spécifique à un utilisateur.)

key        value
UserName   yoann
Attribute  Framed-IP-Address
op         :=
Value      192.168.40.101

2.6.6- La table : radgroupreply

Cette table fonctionne comme la table radreply, mais avec une notion de groupe. (Elle permet par exemple d'attribuer l'ip d'un serveur DNS a tous les utilisateurs du groupe PPTP)

key        value
GroupName  PPTP
Attribute  MS-Primary-DNS-Server
op         :=
Value      192.168.40.1

Note : Visiblement l'attribut MS-Primary-DNS-Server fonctionne mal avec PPTPD.

2.6.7- La table : usergroup Cette table défini l'appartenance d'un utilisateur a un groupe. Il est effectivement possible de définir des droits applicables à un groupe d'utilisateurs.

key        value
UserName   yoann
GroupName  PPTP
priority   1

2.6.8- La table : radpostauth

A définir ...

3- Configuration de FreeRadius

3.1- Le fichier /etc/freeradius/sql.conf

sql {
# Database type
driver = "rlm_sql_mysql"

# Connect info
server = "localhost"
login = "radius"
password = "<password_mysql_radius>"

# Database table configuration
radius_db = "radius"

...

# Set to 'yes' to read radius clients from the database ('nas' table)
readclients = yesFramed-IP-Address
}

Note : La valeur readclients à yes, permet de stocker la liste des NAS dans la table nas de la base de données radius, en plus des NAS présent dans le fichier /etc/freeradius/clients.conf.

L'ajout d'une nouvelle entrée dans la table nas n'est pas dynamique, enFramed-IP-Address effet 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 les changements, il recharger les fichiers de configuration :

shell> /etc/init.d/freeradius reload

3.2- Le fichier /etc/freeradius/radiusd.conf

modules {
chap {
 authtype = CHAP
 }

mschap {
 authtype = MS-CHAP
 use_mppe = yes
 require_encryption = yes
 require_strong = yes
}

$INCLUDE  ${confdir}/sql.conf #1249
}

authorize { #1774
 chap
 mschap
 suffix
 sql
}

authenticate { #1887
 Auth-Type CHAP {
   chap
 }

 Auth-Type MS-CHAP {
   mschap
 }
}

accounting {
 sql
}

session {
  sql
}

4- Test de l'installation de freeradius

4.1- Ajout d'un NAS

Nous allons ajouter un NAS local pour tester la configuration. Pour cela il faut editer le fichier /etc/freeradius/clients.conf

client 127.0.0.1 {
   secret    = mySecret
   shortname = localhost
   nastype   = other
}

Il nous faut créer une entrée pour le NAS dont l'IP est 127.0.0.1, et spécifier une clef secret qui servira au cryptage des informations entre le NAS et le Serveur Radius.

Note : Nous aurions pu ici, ajouter une entrée dans la table nas de la base sql, mais nous aborderons cette solution plus loin.

4.2- Lancer freeradius en mode console : mode debug

Pour avoir un maximum d'informations pour debuger notre installation, et comprendre ce qu'il se passe, nous allons arreter le service freeradius et le lancer en mode console avec les options qui vont bien :

shell> /etc/init.d/freeradius stop
shell> freeradius -XXX

Ajouter un compte de test dans notre table radcheck

shell> mysql --user=radius -p<password_mysql_radius> radius
mysql> INSERT INTO radcheck(UserName,Attribute,op,Value) VALUES ('yoann','User-Password','==','test');
mysql> quit;

Nous avons ici ajouté l'utilisateur “yoann� avec le mot de passe “test�

4.3- Test de l'authentification

Nous allons utilisez l'outil radtest dont la syntaxe est la suivante :

radtest <login> <password> <ip_radius> <port_radius> <secret_radius>

Note : pour utiliser le port par default de radius vous pouvez utilisez 0.

shell> radtest yoann test 127.0.0.1 0 mySecret
Sending Access-Request of id 186 to 127.0.0.1 port 1812
       User-Name = "yoann"
       User-Password = "test"
       NAS-IP-Address = 255.255.255.255
       NAS-Port = 0
rad_recv: Access-Accept packet from host 127.0.0.1:1812, id=186, length=20

Si l'authentification est correct, vous recevrez le message Access-Accept.

Vous pouvez maintenant arrêter freeradius en mode console (Ctrl+C) et le relancer en temps que service.

shell> /etc/init.d/freeradius start

5- Installation / Configuration de pptpd

Vous devez, avant tout, vous assurez que votre kernel supporte le MMPE Encryption qui va nous permettre de crypter les données en MPPE-128, en plus de l'authentification MS-CHAP-V2

Device Drivers  --->
Network device support  --->
* PPP (point-to-point protocol) support
<*>     PPP MPPE compression (encryption) (EXPERIMENTAL)

5.1- Installation de pptpd

apt-get install pptpd

5.2- Configuration de pptpd

5.2.1- Le fichier /etc/pptpd.conf

option /etc/ppp/pptpd-options
logwtmp
localip 10.1.100.254
remoteip 10.1.100.1-200

Note : La ligne remoteip est facultative, car elle peut-être remplacé par la valeur de l'attribut Framed-IP-Address contenu dans notre table radreply.

5.2.2- Le fichier /etc/ppp/pptpd-options

# Name of the local system for authentication purposes
# (must match the second field in /etc/ppp/chap-secrets entries)
name pptpd

# Authentification Encryption
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2

# Data Encryption
require-mppe-128

# Disable BSD Compression
nobsdcomp

# Network and Routing
ms-dns 10.1.100.254
proxyarp
nodefaultroute

# Create a UUCP-style lock file for the pseudo-tty to ensure exclusive access.
lock

# Enable connection debugging facilities.
debug

# Print out all the option values which have been set.
# (often requested by mailing list to verify options)
dump

# Miscellaneous
ipcp-accept-local
ipcp-accept-remote

lcp-echo-failure 3
lcp-echo-interval 5

# Plugins
plugin radius.so