FreeRadius + MySQL + PPTPD
Par Yoann, lundi 2 avril 2007 à 16:03 :: L1nuX and c0 :: #70 :: rss
Nous allons voir ici comment mettre en place un serveur d'acces PPTP en utilisant une authentification via un serveur radius plutot que d'utiliser le fichier /etc/ppp/chap-secrets/.
Les données de notre serveur radius seront stocké dans une base de données MySQL.
Va lire la suite de l'article pour la mise en pratique.
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
Commentaires
1. Le mercredi 11 avril 2007 à 07:58, par kabouns
2. Le mardi 15 mai 2007 à 20:35, par staticx
3. Le mercredi 6 juin 2007 à 15:35, par wanbihan
4. Le vendredi 7 décembre 2007 à 15:10, par jjay
5. Le mercredi 12 décembre 2007 à 14:50, par JerhuM
6. Le lundi 10 mars 2008 à 17:50, par alex
7. Le lundi 10 mars 2008 à 18:30, par Yoann
8. Le mercredi 22 octobre 2008 à 14:26, par Alasta
9. Le mercredi 12 novembre 2008 à 11:38, par burck
Ajouter un commentaire