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 Canal encrypté 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 Canal non encrypté INTERNET Client VPN Serveur FreeRadius Canal encrypté ou non Canal encrypté Routeur/Firewall 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
les type NAS connu par Freeradius: cisco, computone, livingston, max40xx, multitech, netserver, pathras, patton, portslave, tc, Mise en place d un serveur Radius pour authentification sur une serveur VPN sous LinuX p.8/14 usrhiper,other 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
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 Mise en place d un serveur Radius pour authentification sur une serveur VPN sous LinuX p.14/14 serveur radius :-(, si ce n est son obligation pour gérér les