You are on page 1of 49

Mise en place d’un serveur Radius

pour authentification sur une


serveur VPN sous LinuX
Retour d’expérience sur la mise en place d’un
serveur FreeRadius
Dominique CARON

Ingénieur de Recherche CNRS


Administrateur Système UNIX, Université MONTPELLIER II
Powered By ’Puissance du Poing’

Mise en place d’un serveur Radius pour authentification sur une serveur VPN sous LinuX – p.1/14
Le serveur VPN (POPTop)
POPTop est un serveur qui implémente le protocole pptpd
(Point to Point Tunneling Protocol). Il encapsule des
paquets PPP dans du GRE (Generic Routine Encapsulation)

Mise en place d’un serveur Radius pour authentification sur une serveur VPN sous LinuX – p.2/14
Le serveur VPN (POPTop)
POPTop est un serveur qui implémente le protocole pptpd
(Point to Point Tunneling Protocol). Il encapsule des
paquets PPP dans du GRE (Generic Routine Encapsulation)
POPTop ne gère ni l’encryptage du tunnel, ni
l’authentification.

Mise en place d’un serveur Radius pour authentification sur une serveur VPN sous LinuX – p.2/14
Le serveur VPN (POPTop)
POPTop est un serveur qui implémente le protocole pptpd
(Point to Point Tunneling Protocol). Il encapsule des
paquets PPP dans du GRE (Generic Routine Encapsulation)
POPTop ne gère ni l’encryptage du tunnel, ni
l’authentification.
POPTop s’appuie sur PPP. PPP implémente plusieurs
protocoles d’authentification dont MSchap(Microsoft
compatible authentication and encryption) v1 et v2, PAP
(Password authentication protocol) ,CHAP etc...

Mise en place d’un serveur Radius pour authentification sur une serveur VPN sous LinuX – p.2/14
Le serveur VPN (POPTop)
POPTop est un serveur qui implémente le protocole pptpd
(Point to Point Tunneling Protocol). Il encapsule des
paquets PPP dans du GRE (Generic Routine Encapsulation)
POPTop ne gère ni l’encryptage du tunnel, ni
l’authentification.
POPTop s’appuie sur PPP. PPP implémente plusieurs
protocoles d’authentification dont MSchap(Microsoft
compatible authentication and encryption) v1 et v2, PAP
(Password authentication protocol) ,CHAP etc...
La seule façon, à ma connaissance, de créer un canal crypté
est d’utiliser le protocole mppe qui nécessite de compiler le
module ppp_mppe dans le noyau Linux du serveur et dans
les noyaux des clients Linux!
Mise en place d’un serveur Radius pour authentification sur une serveur VPN sous LinuX – p.2/14
PPPd
Avec PPPD l’authentification par défaut se fait
par fichier (/etc/ppp/pap-secrets ou chap-secret).
Ce qui rend la gestion des utilisateurs pénible
pour ne pas dire impossible par exemple dans le
cas de changement de mot de passe.
Pour remédier à ce problème on a pensé à radius
(en plus ça fait très Pro ;-)
Comme on est radin et qu’on veut (un peu)
comprendre, on se tourne vers le libre
(FreeRadius ou GNURadius)

Mise en place d’un serveur Radius pour authentification sur une serveur VPN sous LinuX – p.3/14
FreeRadius
Radius = Remote Authentification in Dial-In
User Service .

Mise en place d’un serveur Radius pour authentification sur une serveur VPN sous LinuX – p.4/14
FreeRadius
Radius = Remote Authentification in Dial-In
User Service .
Radius ne VA PAS ENCRYPTER le tunnel

Mise en place d’un serveur Radius pour authentification sur une serveur VPN sous LinuX – p.4/14
FreeRadius
Radius = Remote Authentification in Dial-In
User Service .
Radius ne VA PAS ENCRYPTER le tunnel
Radius va se charger : ( de l’authentification, des
autorisations, des informations de sessions).

Mise en place d’un serveur Radius pour authentification sur une serveur VPN sous LinuX – p.4/14
FreeRadius
Radius = Remote Authentification in Dial-In
User Service .
Radius ne VA PAS ENCRYPTER le tunnel
Radius va se charger : ( de l’authentification, des
autorisations, des informations de sessions).
Attention , pour qu’un serveur VPN de type
POPTop puisse correspondre avec un serveur
Radius IL FAUT RECOMPILER PPPd afin
d’avoir le module radius.so

Mise en place d’un serveur Radius pour authentification sur une serveur VPN sous LinuX – p.4/14
FreeRadius
Radius = Remote Authentification in Dial-In
User Service .
Radius ne VA PAS ENCRYPTER le tunnel
Radius va se charger : ( de l’authentification, des
autorisations, des informations de sessions).
Attention , pour qu’un serveur VPN de type
POPTop puisse correspondre avec un serveur
Radius IL FAUT RECOMPILER PPPd afin
d’avoir le module radius.so
On installe freeradius par rpm ou tar.gz , pas de
problème particulier.

Mise en place d’un serveur Radius pour authentification sur une serveur VPN sous LinuX – p.4/14
Authentification
Par le Système
- Le nom et le mot de passe de l’utilisateur sont ceux du
système (UNIX), Freeradius utilise /etc/passwd et/ou NIS.
C’est la config par défaut de FreeRadius

Mise en place d’un serveur Radius pour authentification sur une serveur VPN sous LinuX – p.5/14
Authentification
Par le Système
- Le nom et le mot de passe de l’utilisateur sont ceux du
système (UNIX), Freeradius utilise /etc/passwd et/ou NIS.
C’est la config par défaut de FreeRadius
En Interne
Le nom et le mot de passe de l’utilisateur sont stockés dans
les fichiers de config de radius

Mise en place d’un serveur Radius pour authentification sur une serveur VPN sous LinuX – p.5/14
Authentification
Par le Système
- Le nom et le mot de passe de l’utilisateur sont ceux du
système (UNIX), Freeradius utilise /etc/passwd et/ou NIS.
C’est la config par défaut de FreeRadius
En Interne
Le nom et le mot de passe de l’utilisateur sont stockés dans
les fichiers de config de radius
Par Base de donnée
(MySQL,Oracle,PostgreSQL,LDAP)
les informations de l’utilisateur sont stockés dans une base
de donnée, attention la communication Radius<->SQL
n’est pas encrytée.

Mise en place d’un serveur Radius pour authentification sur une serveur VPN sous LinuX – p.5/14
Authentification
Par le Système
- Le nom et le mot de passe de l’utilisateur sont ceux du
système (UNIX), Freeradius utilise /etc/passwd et/ou NIS.
C’est la config par défaut de FreeRadius
En Interne
Le nom et le mot de passe de l’utilisateur sont stockés dans
les fichiers de config de radius
Par Base de donnée
(MySQL,Oracle,PostgreSQL,LDAP)
les informations de l’utilisateur sont stockés dans une base
de donnée, attention la communication Radius<->SQL
n’est pas encrytée.
PAM (Pluggable Authentication Service) c’est
selon la config de PAM que va se faire l’authentification
Mise en place d’un serveur Radius pour authentification sur une serveur VPN sous LinuX – p.5/14
Schéma des encryptages

Serveur SQL

INTERNET
Client VPN

Serveur FreeRadius

Routeur/Firewall

Serveur VPN

Mise en place d’un serveur Radius pour authentification sur une serveur VPN sous LinuX – p.6/14
Schéma des encryptages

Serveur SQL

INTERNET
Client VPN

Serveur FreeRadius

Canal encrypté ou non


Routeur/Firewall

Serveur VPN

Mise en place d’un serveur Radius pour authentification sur une serveur VPN sous LinuX – p.6/14
Schéma des encryptages

Serveur SQL

INTERNET
Client VPN

Serveur FreeRadius

Canal encrypté ou non


Routeur/Firewall
Canal encrypté

Serveur VPN

Mise en place d’un serveur Radius pour authentification sur une serveur VPN sous LinuX – p.6/14
Schéma des encryptages

Serveur SQL

Canal non encrypté

INTERNET
Client VPN

Serveur FreeRadius

Canal encrypté ou non


Routeur/Firewall
Canal encrypté

Serveur VPN

Mise en place d’un serveur Radius pour authentification sur une serveur VPN sous LinuX – p.6/14
Configuration de FreeRadius
Il est clair que les fichiers de configurations ne sont pas très
conviviaux. Cela peut effrayer au début. Mais ils sont vraiment
bien commentés.
Aïe Aïe , ca se Corse.
# ls /usr/local/freeradius-1.0.1/etc/raddb/

Mise en place d’un serveur Radius pour authentification sur une serveur VPN sous LinuX – p.7/14
Configuration de FreeRadius
Il est clair que les fichiers de configurations ne sont pas très
conviviaux. Cela peut effrayer au début. Mais ils sont vraiment
bien commentés.
Aïe Aïe , ca se Corse.
# ls /usr/local/freeradius-1.0.1/etc/raddb/

acct users experimental.conf oraclesql.conf snmp.conf


attrs hints postgresql.conf sql.conf
certs/ huntgroups preproxy users users
clients ldap.attrmap proxy.conf x99.conf
clients.conf mssql.conf radiusd.conf x99passwd.sample
dictionary naslist eap.conf naspasswd realms

Mise en place d’un serveur Radius pour authentification sur une serveur VPN sous LinuX – p.7/14
Configuration de FreeRadius
Il est clair que les fichiers de configurations ne sont pas très
conviviaux. Cela peut effrayer au début. Mais ils sont vraiment
bien commentés.
Aïe Aïe , ca se Corse.
# ls /usr/local/freeradius-1.0.1/etc/raddb/

acct users experimental.conf oraclesql.conf snmp.conf


attrs hints postgresql.conf sql.conf
certs/ huntgroups preproxy users users
clients ldap.attrmap proxy.conf x99.conf
clients.conf mssql.conf radiusd.conf x99passwd.sample
dictionary naslist eap.conf naspasswd realms

radiusd.conf: fichier principal de configuration du serveur

Mise en place d’un serveur Radius pour authentification sur une serveur VPN sous LinuX – p.7/14
Configuration de FreeRadius
Il est clair que les fichiers de configurations ne sont pas très
conviviaux. Cela peut effrayer au début. Mais ils sont vraiment
bien commentés.
Aïe Aïe , ca se Corse.
# ls /usr/local/freeradius-1.0.1/etc/raddb/

acct users experimental.conf oraclesql.conf snmp.conf


attrs hints postgresql.conf sql.conf
certs/ huntgroups preproxy users users
clients ldap.attrmap proxy.conf x99.conf
clients.conf mssql.conf radiusd.conf x99passwd.sample
dictionary naslist eap.conf naspasswd realms

radiusd.conf: fichier principal de configuration du serveur

clients.conf: fichier de configuration des clients (type , No IP..)

Mise en place d’un serveur Radius pour authentification sur une serveur VPN sous LinuX – p.7/14
Configuration de FreeRadius
Il est clair que les fichiers de configurations ne sont pas très
conviviaux. Cela peut effrayer au début. Mais ils sont vraiment
bien commentés.
Aïe Aïe , ca se Corse.
# ls /usr/local/freeradius-1.0.1/etc/raddb/

acct users experimental.conf oraclesql.conf snmp.conf


attrs hints postgresql.conf sql.conf
certs/ huntgroups preproxy users users
clients ldap.attrmap proxy.conf x99.conf
clients.conf mssql.conf radiusd.conf x99passwd.sample
dictionary naslist eap.conf naspasswd realms

radiusd.conf: fichier principal de configuration du serveur

clients.conf: fichier de configuration des clients (type , No IP..)

sql.conf: fichier de config pour accès au serveur MySQL.

Mise en place d’un serveur Radius pour authentification sur une serveur VPN sous LinuX – p.7/14
Configuration de FreeRadius
Il est clair que les fichiers de configurations ne sont pas très
conviviaux. Cela peut effrayer au début. Mais ils sont vraiment
bien commentés.
Aïe Aïe , ca se Corse.
# ls /usr/local/freeradius-1.0.1/etc/raddb/

acct users experimental.conf oraclesql.conf snmp.conf


attrs hints postgresql.conf sql.conf
certs/ huntgroups preproxy users users
clients ldap.attrmap proxy.conf x99.conf
clients.conf mssql.conf radiusd.conf x99passwd.sample
dictionary naslist eap.conf naspasswd realms

radiusd.conf: fichier principal de configuration du serveur

clients.conf: fichier de configuration des clients (type , No IP..)

sql.conf: fichier de config pour accès au serveur MySQL.

users: fichier de configuration si pas de contrôle par SGBD.


Mise en place d’un serveur Radius pour authentification sur une serveur VPN sous LinuX – p.7/14
clients.conf
C’est le seul fichier à modifier si vous désirez faire
une authentification System (username et mot de passe
UNIX)
Syntaxe très simple .
client host.domainname


secret = motdepasseradius
shortname = alias
nastype = other


Autant de fois qu’il y a de clients. Chaque client peut avoir


un mot de passe différent.

Mise en place d’un serveur Radius pour authentification sur une serveur VPN sous LinuX – p.8/14
clients.conf
C’est le seul fichier à modifier si vous désirez faire
une authentification System (username et mot de passe
UNIX)
Syntaxe très simple .
client host.domainname


secret = motdepasseradius
shortname = alias
nastype = other


Autant de fois qu’il y a de clients. Chaque client peut avoir


un mot de passe différent.
host.domainname peut être remplacé par Adresse IP

Mise en place d’un serveur Radius pour authentification sur une serveur VPN sous LinuX – p.8/14
clients.conf
C’est le seul fichier à modifier si vous désirez faire
une authentification System (username et mot de passe
UNIX)
Syntaxe très simple .
client host.domainname


secret = motdepasseradius
shortname = alias
nastype = other


Autant de fois qu’il y a de clients. Chaque client peut avoir


un mot de passe différent.
host.domainname peut être remplacé par Adresse IP
les type NAS connu par Freeradius:
cisco, computone, livingston, max40xx,
multitech, netserver, pathras, patton, portslave, tc,
usrhiper,other Mise en place d’un serveur Radius pour authentification sur une serveur VPN sous LinuX – p.8/14
users
Ce fichier permet de connaître les directives c’est
à dire la méthode d’authentification et les
autorisations à appliquer à chaque utilisateur si
on ne désire pas utiliser de base de données .

Mise en place d’un serveur Radius pour authentification sur une serveur VPN sous LinuX – p.9/14
users
Ce fichier permet de connaître les directives c’est
à dire la méthode d’authentification et les
autorisations à appliquer à chaque utilisateur si
on ne désire pas utiliser de base de données .
Chaque entrée de ce fichier commence par le nom
d’un utilisateur, l’entrée DEFAULT concerne tous
les utilisateurs.

Mise en place d’un serveur Radius pour authentification sur une serveur VPN sous LinuX – p.9/14
users
Ce fichier permet de connaître les directives c’est
à dire la méthode d’authentification et les
autorisations à appliquer à chaque utilisateur si
on ne désire pas utiliser de base de données .
Chaque entrée de ce fichier commence par le nom
d’un utilisateur, l’entrée DEFAULT concerne tous
les utilisateurs.
L’attribut Auth-Type permet de définir le(s)
type(s) d’authentification permis.

Mise en place d’un serveur Radius pour authentification sur une serveur VPN sous LinuX – p.9/14
users
Ce fichier permet de connaître les directives c’est
à dire la méthode d’authentification et les
autorisations à appliquer à chaque utilisateur si
on ne désire pas utiliser de base de données .
Chaque entrée de ce fichier commence par le nom
d’un utilisateur, l’entrée DEFAULT concerne tous
les utilisateurs.
L’attribut Auth-Type permet de définir le(s)
type(s) d’authentification permis.
L’attribut Fall-Through (yes or no) permet de dire
à radius si il doit continuer dans le fichier pour le
cas ou l’authentification aurait échouée.

Mise en place d’un serveur Radius pour authentification sur une serveur VPN sous LinuX – p.9/14
users
Ce fichier permet de connaître les directives c’est
à dire la méthode d’authentification et les
autorisations à appliquer à chaque utilisateur si
on ne désire pas utiliser de base de données .
Chaque entrée de ce fichier commence par le nom
d’un utilisateur, l’entrée DEFAULT concerne tous
les utilisateurs.
L’attribut Auth-Type permet de définir le(s)
type(s) d’authentification permis.
L’attribut Fall-Through (yes or no) permet de dire
à radius si il doit continuer dans le fichier pour le
cas ou l’authentification aurait échouée.
CONSEIL :Ne touchez pas à ce fichier ;-)
Mise en place d’un serveur Radius pour authentification sur une serveur VPN sous LinuX – p.9/14
sql.conf
Ce fichier n’est utilisé que si vous désirez utiliser un
serveur MySQL pour la gestion des utilisateurs.

Mise en place d’un serveur Radius pour authentification sur une serveur VPN sous LinuX – p.10/14
sql.conf
Ce fichier n’est utilisé que si vous désirez utiliser un
serveur MySQL pour la gestion des utilisateurs.
Vérifier dans radius.conf, à la section module, la ligne:
$INCLUDE $ confdir /sql.conf


Ainsi que dans la section authorize que sql soit bien
décommenté. Vous pouvez mettre file en commentaire dans la section authorize
pour ne permettre que ce type d’authorisation.

Mise en place d’un serveur Radius pour authentification sur une serveur VPN sous LinuX – p.10/14
sql.conf
Ce fichier n’est utilisé que si vous désirez utiliser un
serveur MySQL pour la gestion des utilisateurs.
Vérifier dans radius.conf, à la section module, la ligne:
$INCLUDE $ confdir /sql.conf


Ainsi que dans la section authorize que sql soit bien
décommenté. Vous pouvez mettre file en commentaire dans la section authorize
pour ne permettre que ce type d’authorisation.

Attributs OBLIGATOIRES.
server = ”localhost” # MySQL server
login = ”radius” # MySQL username
password = ”xxxxxxx” # MySQL user password
radius db = ”Radius” # MySQL radius database

Mise en place d’un serveur Radius pour authentification sur une serveur VPN sous LinuX – p.10/14
radiusd.conf
Il est divisé en sections (Security, proxy, thread
pool,modules, authorize, authenticate et accounting),

Mise en place d’un serveur Radius pour authentification sur une serveur VPN sous LinuX – p.11/14
radiusd.conf
Il est divisé en sections (Security, proxy, thread
pool,modules, authorize, authenticate et accounting),
La section security permet de protéger le serveur contre
quelques attaques DoS notamment.

Mise en place d’un serveur Radius pour authentification sur une serveur VPN sous LinuX – p.11/14
radiusd.conf
Il est divisé en sections (Security, proxy, thread
pool,modules, authorize, authenticate et accounting),
La section security permet de protéger le serveur contre
quelques attaques DoS notamment.
La section proxy permet de configurer les paramètres
relatifs à la communication avec d’autres serveurs
RADIUS.

Mise en place d’un serveur Radius pour authentification sur une serveur VPN sous LinuX – p.11/14
radiusd.conf
Il est divisé en sections (Security, proxy, thread
pool,modules, authorize, authenticate et accounting),
La section security permet de protéger le serveur contre
quelques attaques DoS notamment.
La section proxy permet de configurer les paramètres
relatifs à la communication avec d’autres serveurs
RADIUS.
La section thread pool permet de configurer le nombre de
serveurs qui traitent les requêtes et le nombre de processus
lancés.

Mise en place d’un serveur Radius pour authentification sur une serveur VPN sous LinuX – p.11/14
radiusd.conf
Il est divisé en sections (Security, proxy, thread
pool,modules, authorize, authenticate et accounting),
La section security permet de protéger le serveur contre
quelques attaques DoS notamment.
La section proxy permet de configurer les paramètres
relatifs à la communication avec d’autres serveurs
RADIUS.
La section thread pool permet de configurer le nombre de
serveurs qui traitent les requêtes et le nombre de processus
lancés.
La section modules.C’est l’une des plus importantes. Elle
permet d’activer et de configurer les méthodes
d’authentification. Cette section est la plus longue.
Mise en place d’un serveur Radius pour authentification sur une serveur VPN sous LinuX – p.11/14
radiusd.conf (2)
La section authorize spécifie l’ordre et les méthodes
d’authentification dans lequel le serveur doit vérifier les
identités des utilisateurs désireux de s’authentifier. Par
défaut, c’est seulement par le fichier users que l’on peut
vérifier les utilisateurs.

Mise en place d’un serveur Radius pour authentification sur une serveur VPN sous LinuX – p.12/14
radiusd.conf (2)
La section authorize spécifie l’ordre et les méthodes
d’authentification dans lequel le serveur doit vérifier les
identités des utilisateurs désireux de s’authentifier. Par
défaut, c’est seulement par le fichier users que l’on peut
vérifier les utilisateurs.
La section authenticate précise quels modules sont
disponibles pour l’authentification. Ne pas confondre avec
la section précédente.

Mise en place d’un serveur Radius pour authentification sur une serveur VPN sous LinuX – p.12/14
radiusd.conf (2)
La section authorize spécifie l’ordre et les méthodes
d’authentification dans lequel le serveur doit vérifier les
identités des utilisateurs désireux de s’authentifier. Par
défaut, c’est seulement par le fichier users que l’on peut
vérifier les utilisateurs.
La section authenticate précise quels modules sont
disponibles pour l’authentification. Ne pas confondre avec
la section précédente.
La section accounting spécifie la manière dont les logs
vont être enregistrés

Mise en place d’un serveur Radius pour authentification sur une serveur VPN sous LinuX – p.12/14
Tester Radius
Freeradius est fourni avec quelques utilitaires de test.
check-radiusd-config permet de tester le fichier de config du
serveur

Mise en place d’un serveur Radius pour authentification sur une serveur VPN sous LinuX – p.13/14
Tester Radius
Freeradius est fourni avec quelques utilitaires de test.
check-radiusd-config permet de tester le fichier de config du
serveur
radtest
% radtest caron noel32 localhost 1812 SicRetKey
Sending Access-Request of id 228 to 127.0.0.1:1812
User-Name = ”caron”
User-Password = ”noel32”
NAS-IP-Address = perseus
NAS-Port = 1812
rad recv: Access-Accept packet from host 127.0.0.1:1812, id=228, length=20

Mise en place d’un serveur Radius pour authentification sur une serveur VPN sous LinuX – p.13/14
Tester Radius
Freeradius est fourni avec quelques utilitaires de test.
check-radiusd-config permet de tester le fichier de config du
serveur
radtest
% radtest caron noel32 localhost 1812 SicRetKey
Sending Access-Request of id 228 to 127.0.0.1:1812
User-Name = ”caron”
User-Password = ”noel32”
NAS-IP-Address = perseus
NAS-Port = 1812
rad recv: Access-Accept packet from host 127.0.0.1:1812, id=228, length=20

Au début, démarrer le démon radiusd avec l’option -X

Mise en place d’un serveur Radius pour authentification sur une serveur VPN sous LinuX – p.13/14
Tester Radius
Freeradius est fourni avec quelques utilitaires de test.
check-radiusd-config permet de tester le fichier de config du
serveur
radtest
% radtest caron noel32 localhost 1812 SicRetKey
Sending Access-Request of id 228 to 127.0.0.1:1812
User-Name = ”caron”
User-Password = ”noel32”
NAS-IP-Address = perseus
NAS-Port = 1812
rad recv: Access-Accept packet from host 127.0.0.1:1812, id=228, length=20

Au début, démarrer le démon radiusd avec l’option -X


PPPd compilé avec le module radius.so, fournit un utilitaire
radlogin pour tester le client Radius.

Mise en place d’un serveur Radius pour authentification sur une serveur VPN sous LinuX – p.13/14
(mes) Conclusions
Mis à part le fait que la communication entre le serveur
Radius et son client soit encryptée, un serveur radius n’est
pas autre chose qu’un serveur de type NIS ou LDAP (avec
quelques spécificité d’informations propres aux NAS).
La mise en place d’un serveur Radius n’implique pas que la
communication sera sécurisée de bout en bout (une attaque
sur le serveur SQL mal protégé donne au pirate tous les
MdP de tous les utilisateurs.
C’est grâce au passage par MySQL que la gestion des
utilisateurs peut être plus aisée, mais utiliser le fichier
/etc/ppp/chap-secrets ne semble pas moins sécurisé que par
un serveur Radius ...
En réalité je ne comprends pas très très bien l’intérêt d’un
serveur radius :-(, siMisece n’est son obligation pour gérér les
en place d’un serveur Radius pour authentification sur une serveur VPN sous LinuX – p.14/14

You might also like