« FreeRADIUS » : différence entre les versions
(Page créée avec « <div class="row document-header"><div class="document-info col-xs-12 col-md-7"><div id="document-title"> = Mise en place serveur RADIUS (802.1X) = </div> <div class="xdocL... ») |
Aucun résumé des modifications |
||
Ligne 30 : | Ligne 30 : | ||
| | ||
== <span>1e - Mise en place du serveur freeradius</span> == | == <span>1e - Mise en place du serveur freeradius</span> == | ||
Ligne 35 : | Ligne 36 : | ||
</div> | </div> | ||
La configuration de freeradius lorsqu'il vient d'être installé convient à la plupart des usages; il est conseillé de s'en servir de base et de la modifier petit à petit. De plus, il est vivement conseillé de faire des copies de sauvegardes des fichiers que l'on modifie. Il faut également vérifier systématiquement que freeradius soit propriétaire des fichiers dont il a besoin. | La configuration de freeradius lorsqu'il vient d'être installé convient à la plupart des usages; il est conseillé de s'en servir de base et de la modifier petit à petit. De plus, il est vivement conseillé de faire des copies de sauvegardes des fichiers que l'on modifie. Il faut également vérifier systématiquement que freeradius soit propriétaire des fichiers dont il a besoin. | ||
| |||
Les fichiers dont nous auront besoin sont contenus dans /etc/freeradius/3.0/ et sont les suivants: | Les fichiers dont nous auront besoin sont contenus dans /etc/freeradius/3.0/ et sont les suivants: | ||
Ligne 42 : | Ligne 45 : | ||
*mods-available et mods-enabled: ces deux dossiers fonctionnent sur le même principe et contiennent les modules de freeradius. | *mods-available et mods-enabled: ces deux dossiers fonctionnent sur le même principe et contiennent les modules de freeradius. | ||
*certs: Ce dossier contient tout ce qui concerne SSL (clefs, certificats, scripts...). | *certs: Ce dossier contient tout ce qui concerne SSL (clefs, certificats, scripts...). | ||
*clients.conf : ce fichier est là que l'on ajoute les clients du serveurs (en l'occurence, notre point d'accès wifi). | *clients.conf : ce fichier est là que l'on ajoute les clients du serveurs (en l'occurence, notre point d'accès wifi). | ||
*users : ce fichier sert à ajouter "en dur" des supplicants, c'est-à-dire des utilisateurs; il peut servir notamment pour effectuer des tests. | *users : ce fichier sert à ajouter "en dur" des supplicants, c'est-à-dire des utilisateurs; il peut servir notamment pour effectuer des tests. | ||
| |||
=== <span>Création du fichier de serveur virtuel</span> === | === <span>Création du fichier de serveur virtuel</span> === | ||
Ligne 64 : | Ligne 67 : | ||
listen{ | listen{ | ||
ipaddr = * #Ecoute toutes les demandes d'accounting sur le port | ipaddr = * #Ecoute toutes les demandes d'accounting sur le port | ||
ipv6addr = :: #standard | ipv6addr = :: #standard | ||
port = 0 | port = 0 | ||
type = acct | type = acct | ||
Ligne 137 : | Ligne 140 : | ||
Dans le dossier mods-available: | Dans le dossier mods-available: | ||
*Ouvrir dans un éditeur de texte le fichier ldap afin de décommenter et modifier les lignes suivantes : | *Ouvrir dans un éditeur de texte le fichier ldap afin de décommenter et modifier les lignes suivantes : | ||
<div class="box"><div class="code"><span style="font-weight: italic; color: #408080">#server = 'ldap.rrdns.example.org'</span><br/> <br/> <span style="font-weight: italic; color: #408080">#identity = 'cn=admin,dc=example,dc=org'</span><br/> <br/> <span style="font-weight: italic; color: #408080">#password = mypass</span><br/> <br/> <span style="color: #19177C">base_dn</span> <span style="color: #666666">=</span> <span style="color: #BA2121">'dc=example,dc=org'</span></div> </div> <div class="wikimodel-emptyline"> </div> <blockquote> | <div class="box"><div class="code"><span style="font-weight: italic; color: #408080">#server = 'ldap.rrdns.example.org'</span><br/> <br/> <span style="font-weight: italic; color: #408080">#identity = 'cn=admin,dc=example,dc=org'</span><br/> <br/> <span style="font-weight: italic; color: #408080">#password = mypass</span><br/> <br/> <span style="color: #19177C">base_dn</span> <span style="color: #666666">=</span> <span style="color: #BA2121">'dc=example,dc=org'</span></div> </div> <div class="wikimodel-emptyline"> </div> <blockquote> | ||
Note : Selon la configuration de votre annuaire LDAP, vous aurez peut-être besoin de modifier la ligne filter = "(uid=%{%{Stripped-User-Name}:-%{User-Name}})", en replaçant par exemple uid par cn. | Note : Selon la configuration de votre annuaire LDAP, vous aurez peut-être besoin de modifier la ligne filter = "(uid=%{%{Stripped-User-Name}:-%{User-Name}})", en replaçant par exemple uid par cn. | ||
</blockquote> <div class="wikimodel-emptyline"> </div> | </blockquote> <div class="wikimodel-emptyline"> </div> | ||
Sauvegarder le fichier, puis créer un lien vers celui-ci dans mods-enabled si il n'existe pas. | Sauvegarder le fichier, puis créer un lien vers celui-ci dans mods-enabled si il n'existe pas. | ||
Ligne 145 : | Ligne 148 : | ||
*Ouvrir ensuite le fichier eap: | *Ouvrir ensuite le fichier eap: | ||
**remplacer <code>default_eap_type = gtc</code> par <code>default_eap_type = ttls</code> (en début de fichier). | **remplacer <code>default_eap_type = gtc</code> par <code>default_eap_type = ttls</code> (en début de fichier). | ||
**Note : Le serveur pourrait fonctionner ainsi, avec des certificats snakeoil. Cependant vous pourrez utiliser vos certificats et clefs privées en précisant leur emplacement et mots de passe dans le dans le bloc <code>tls-config tls-common</code>. Vous pouvez également décommenter la ligne <code>require_client_cert = yes</code> si vous souhaitez obliger le client à fournir un certificat dans le cadre de l'authentification par EAP-TTLS. | **Note : Le serveur pourrait fonctionner ainsi, avec des certificats snakeoil. Cependant vous pourrez utiliser vos certificats et clefs privées en précisant leur emplacement et mots de passe dans le dans le bloc <code>tls-config tls-common</code>. Vous pouvez également décommenter la ligne <code>require_client_cert = yes</code> si vous souhaitez obliger le client à fournir un certificat dans le cadre de l'authentification par EAP-TTLS. | ||
*Sauvegarder le fichier, puis créer si besoin un lien vers celui-ci dans mods-enabled. | *Sauvegarder le fichier, puis créer si besoin un lien vers celui-ci dans mods-enabled. | ||
<div class="wikimodel-emptyline"> </div> | <div class="wikimodel-emptyline"> </div> | ||
Ligne 166 : | Ligne 169 : | ||
<span style="color: #666666">}</span></pre> | <span style="color: #666666">}</span></pre> | ||
</div> | </div> | ||
A ce stade, le serveur serveur freeradius devrait être fonctionnel; vous pouvez tester celui-ci en le lancant avec freeradius -X (qui lance le serveur en mode debug, c'est-à-dire en mode verbeux). Un serveur fonctionnel affiche la ligne : '''Ready to process requests.''' | A ce stade, le serveur serveur freeradius devrait être fonctionnel; vous pouvez tester celui-ci en le lancant avec freeradius -X (qui lance le serveur en mode debug, c'est-à-dire en mode verbeux). Un serveur fonctionnel affiche la ligne : '''Ready to process requests.''' | ||
Attention cependant, la commande radtest (qui sert à tester normalement à tester le serveur en simulant une demande Access-Request) ne fonctionnera pas, ce qui est normal car celle-ci ne gère pas le protocole EAP. Cela est normalement faisable en utilisant la commande eapol_test qui fait partie du paquet wpasupplicant sur Debian. Cependant la compilation de eapol_test (qui n'est pas dans les dépôts) ne semble à priori pas possible sur Debian... | Attention cependant, la commande radtest (qui sert à tester normalement à tester le serveur en simulant une demande Access-Request) ne fonctionnera pas, ce qui est normal car celle-ci ne gère pas le protocole EAP. Cela est normalement faisable en utilisant la commande eapol_test qui fait partie du paquet wpasupplicant sur Debian. Cependant la compilation de eapol_test (qui n'est pas dans les dépôts) ne semble à priori pas possible sur Debian... | ||
<div class="wikimodel-emptyline"> </div> | <div class="wikimodel-emptyline"> </div> | ||
== <span>2e - SQL</span> == | == <span>2e - SQL</span> == | ||
Version du 18 février 2019 à 19:11
Mise en place serveur RADIUS (802.1X)
Mise en place d'un point d'accès wifi 802.1X, en utilisant un serveur freeradius couplé à un annuaire LDAP, ainsi qu'une base de données SQL pour l'accounting.
Matériel / Logiciels utilisés:
-Une machine virtuelle sous Debian Stretch disposant d'une IP fixe;
-Un point d'accès wifi HP Procurve 420 disposant également d'une adresse fixe;
-Un poste client pour les tests (le supplicant)
-Un serveur LDAP (non LDAPs) ainsi qu'un compte ayant accès à la lecture des mots de passe sur celui-ci.
-Les logiciels "freeradius" et "freeradius-ldap"; la version utilisée est la 3.0.12
-Une base de données SQL, en local ou sur le réseau
Vocabulaire
- NAS : Il s'agit ici de Network Acces Server, soit en l'occurence le point d'accès WiFi (rien à voir avec Network Attached Storage).
- Supplicant : Le supplicant désigne ici le client final, soit l'ordinateur de la personne qui cherchera à se connecter au réseau sans fil. On distingue ainsi le serveur (le serveur RADIUS), du "client" (le NAS), du supplicant.
1e - Mise en place du serveur freeradius
apt-get install freeradius freeradius-ldap
La configuration de freeradius lorsqu'il vient d'être installé convient à la plupart des usages; il est conseillé de s'en servir de base et de la modifier petit à petit. De plus, il est vivement conseillé de faire des copies de sauvegardes des fichiers que l'on modifie. Il faut également vérifier systématiquement que freeradius soit propriétaire des fichiers dont il a besoin.
Les fichiers dont nous auront besoin sont contenus dans /etc/freeradius/3.0/ et sont les suivants:
- radiusd.conf: c'est le fichier de configuration principal de freeradius; il contient des options générales et ne devrait en principe pas avoir besoin d'être modifié pour que le serveur fonctionne. Il peut en fonction des besoin être intéressant d'y modifier les limites de connexions simultanées (max-requests).
- sites-available et sites-enabled: sites-available contient les fichiers de serveurs virtuels et sites-enabled contient des liens vers les fichiers que l'on souhaite mettre en place; le fonctionnement est similaire à celui d'apache. Les deux fichiers les plus importants sont default et inner-tunnel: default est le serveur par défaut convenant à la plupart des usages t inner-tunnel se charge des tunnels pour le protocole EAP-TTLS.
- mods-available et mods-enabled: ces deux dossiers fonctionnent sur le même principe et contiennent les modules de freeradius.
- certs: Ce dossier contient tout ce qui concerne SSL (clefs, certificats, scripts...).
- clients.conf : ce fichier est là que l'on ajoute les clients du serveurs (en l'occurence, notre point d'accès wifi).
- users : ce fichier sert à ajouter "en dur" des supplicants, c'est-à-dire des utilisateurs; il peut servir notamment pour effectuer des tests.
Création du fichier de serveur virtuel
Créer dans le dossier sites-available un nouveau fichier de serveur virtuel (vous pouvez également modifier le fichier default; il est cependant fortement conseillé d'en faire une copie de sauvegarde) ayant le contenu suivant (l'explication de la fonction de chaque commande est disponible dans le fichier default):
###### #Serveur fonctionnant avec une authentification EAP-TTLS, un annuaire LDAP et un accounting en SQL ###### ########Partie Auth server{ listen{ type = auth #Ecoute toutes les demandes d'auth sur le port 1812 port = 1812 ipaddr = * } listen{ ipaddr = * #Ecoute toutes les demandes d'accounting sur le port ipv6addr = :: #standard port = 0 type = acct } authorize{ filter_username #Filtre les usernames et password; certains vieux NAS filter_password #envoient parfois des zéros en trop preprocess #Prendre en compte d'abord les hints et huntgroups eap #Ma methode d'auth. } authenticate{ eap Auth-Type eap { eap{ handled = 1 } if (handled && (Response-Packet-Type == Access-Challenge)) { attr_filter.access_challenge.post-auth handled #Filtrer certains attributs incorrects emis par notre NAS } #qui est un peu vieux; ceux-ci nous ralentissaient voire #nous empechaient de nous connecter } } ##########Partie comptabilisation preacct { acct_unique #Donne un identifiant semi-unique à chaque requête preprocess #Evite des erreurs avec SQL } accounting { detail #Ecrit un log en clair dans un fichier; ici les request unix #Logue les users connectés à mon NAS dans radwtmp sql attr_filter.accounting_response #Filtre les attributs dans les reponses } session { radutmp #Ecrit dans un fichier UNIX les connexions; utile aux commandes radwho et radlast } ###Partie post-auth post-auth { Post-Auth-Type REJECT { attr_filter.access_reject -sql } } }
Une fois ceci fait, il faut d'abord en donner la propriété à freeradius avec un chown freerad:freerad mon_fichier. Vous pourrez ensuite créer un lien vers celui-ci dans le dossier sites-enabled , et supprimer si nécessaire le lien vers default.
Fichier inner-tunnel:
Le fichier inner-tunnel "de base" doit normalement fonctionner; il faut juste éventuellement s'assurer que la ligne "-ldap" apparaît bien dans la section authorize.
Configuration des modules LDAP et EAP
Dans le dossier mods-available:
- Ouvrir dans un éditeur de texte le fichier ldap afin de décommenter et modifier les lignes suivantes :
#identity = 'cn=admin,dc=example,dc=org'
#password = mypass
base_dn = 'dc=example,dc=org'
Note : Selon la configuration de votre annuaire LDAP, vous aurez peut-être besoin de modifier la ligne filter = "(uid=%{%{Stripped-User-Name}:-%{User-Name}})", en replaçant par exemple uid par cn.
Sauvegarder le fichier, puis créer un lien vers celui-ci dans mods-enabled si il n'existe pas.
- Ouvrir ensuite le fichier eap:
- remplacer
default_eap_type = gtc
pardefault_eap_type = ttls
(en début de fichier). - Note : Le serveur pourrait fonctionner ainsi, avec des certificats snakeoil. Cependant vous pourrez utiliser vos certificats et clefs privées en précisant leur emplacement et mots de passe dans le dans le bloc
tls-config tls-common
. Vous pouvez également décommenter la lignerequire_client_cert = yes
si vous souhaitez obliger le client à fournir un certificat dans le cadre de l'authentification par EAP-TTLS.
- remplacer
- Sauvegarder le fichier, puis créer si besoin un lien vers celui-ci dans mods-enabled.
Modification du fichier clients:
- Ouvrir le fichier clients.conf et ajouter un bloc pour votre point d'accès:
client <span style="color: #008000">test</span> <span style="color: #666666">{</span> <span style="font-weight: italic; color: #408080">#Le nom de mon client</span> <span style="color: #19177C">ipaddr</span><span style="color: #666666">=</span>192.168.1.1 <span style="font-weight: italic; color: #408080"> #L'adresse IP du NAS</span> <span style="color: #19177C">proto</span> <span style="color: #666666">=</span> * <span style="font-weight: italic; color: #408080">#Permet d'écouter les paquets de tous types</span> <span style="color: #19177C">secret</span><span style="color: #666666">=</span>testing123 <span style="font-weight: italic; color: #408080"> #Ce mot de passe est partagé par le serveur freeradius et le NAS</span> <span style="color: #19177C">shortname</span> <span style="color: #666666">=</span> radiustest <span style="font-weight: italic; color: #408080"> #Le SSID du NAS, qui sera affiché dans les logs de freeradius</span> <span style="color: #19177C">nas_type</span> <span style="color: #666666">=</span> other <span style="font-weight: italic; color: #408080"> #Accepte quelques modèles de NAS dont le nôtre ne fait pas partie. (cf. man clients.conf)</span> limit <span style="color: #666666">{</span> <span style="color: #19177C">max_connections</span> <span style="color: #666666">=</span> <span style="color: #666666">16</span> <span style="font-weight: italic; color: #408080"> #Ce bloc est optionnel; il permet de limiter les connexions, ici 16 connexions maximum</span> <span style="color: #19177C">lifetime</span> <span style="color: #666666">=</span> <span style="color: #666666">0</span> <span style="font-weight: italic; color: #408080">#Durée limite des connexions (0 = pas de limite)</span> <span style="color: #19177C">idle_timeout</span> <span style="color: #666666">=</span> <span style="color: #666666">30</span> <span style="font-weight: italic; color: #408080">#Durée avant de quitter lorsque le NAS ne répond pas</span> <span style="color: #666666">}</span> <span style="color: #666666">}</span>
A ce stade, le serveur serveur freeradius devrait être fonctionnel; vous pouvez tester celui-ci en le lancant avec freeradius -X (qui lance le serveur en mode debug, c'est-à-dire en mode verbeux). Un serveur fonctionnel affiche la ligne : Ready to process requests.
Attention cependant, la commande radtest (qui sert à tester normalement à tester le serveur en simulant une demande Access-Request) ne fonctionnera pas, ce qui est normal car celle-ci ne gère pas le protocole EAP. Cela est normalement faisable en utilisant la commande eapol_test qui fait partie du paquet wpasupplicant sur Debian. Cependant la compilation de eapol_test (qui n'est pas dans les dépôts) ne semble à priori pas possible sur Debian...
2e - SQL
L'accounting (comptabilisation) se fera à l'aide, notamment, d'une base de données MySql (que l'on pourra coupler à phpmyadmin pour plus de lisibilité). Le fichier de serveur virtuel fourni plus haut utilise également les commandes detail et radutmp afin d'effectuer plus d'accounting; elles ne sont pas obligatoires.
Si besoin, la source utilisée est la suivante : https://wiki.freeradius.org/guide/SQL-HOWTO-for-freeradius-3.x-on-Debian-Ubuntu#configuring-freeradius-to-use-sql
Marche à suivre :
- Installer les paquets :
apt-get install freeradius-mysql phpmyadmin
- Nous allons ensuite créer une base de données pour radius :
mysql -uroot CREATE DATABASE radius; exit
- Pour ensuite y charger les schémas et configurations requises :
mysql -uroot -p radius < /etc/freeradius/3.0/mods-config/sql/main/mysql/schema.sql mysql -uroot -p radius < /etc/freeradius/3.0/mods-config/sql/main/mysql/setup.sql
- Le fichier setup.sql créée un utilisateur nommé radius avec pour mot de passe "radpass" ayant les droits sur la base de données "radius". Il est recommandé de changer ce mot de passe qui est standard, ainsi que de vérifier que cet utilisateur a bien les droits nécessaires.
- Nous allons ensuite configurer le fichier sql contenu le fichier mods-available. Les lignes à modifier sont les suivantes :
driver = "rlm_sql_mysql" [...] dialect = "mysql" [...] server = "localhost" #Adresse du serveur port = 3306 # A vérifier login = "radius" #Le compte créé plus tôt password = "radpass" #avec son mot de passe
- Le reste du fichier ne devrait pas avoir besoin d'être modifié; vous pouvez vérifier que la valeur sql est bien présente dans la partie accounting de votre fichier de serveur virtuel. Il faut bien entendu ne pas oublier de créer un lien vers sql dans le dossier mods-enabled.
- Les informations d'accounting sont stockées dans la table "raddact".
NB : Si vous le souhaitez, vous pouvez décommenter la ligne logfile = ${logdir}/sqllog.sql dans le fichier de configuration du module sql. Celle-ci permet d'effectuer une copie des requêtes SQL effectuées dans un fichier texte situé dans le répertoire de logs de freeradius. Attention cependant, celui-ci peut contenir des mots de passe en clair malgré l'utilisation d'EAP-TTLS. De plus il peut être utile de vérifier le fichier inner-tunnel; notamment la partie post-auth-type REJECT. En effet, si vous laissez la mention "-sql" dans celle-ci, les tentatives de connexion ratées seront enregistrées dans la table "radpostauth" et contiendront entre autre les mots de passe utilisés lors de ces tentatives de connexions (en clair, là encore). Il faut également supprimer sql des sections authorize / authentication de celui-ci, afin d'éviter les erreurs de connexion.
3e Configuration du NAS
La configuration du NAS est assez simple : une fois son interface ethernet configurée, il suffit pour la partie sans-fil de mettre en place un SSID en WPA, auquel on précisera l'adresse IP du serveur RADIUS. Il faudra également activer les demandes d'accounting.
Sur le HP Procurve 420, les commandes utilisées sont les suivantes :
configure radius-accounting-server address 192.168.1.1 radius-accounting-server key testing123 radius-accounting-server enable interface wireless g ssid index 2 # ssid-name radiustest security-suite 9 WPA/WPA2 #Cette commande correspond au choix du WPA auto-négocié radius-authentication-server address 192.168.1.1 radius-authentication-server key testing123 #testing123 correspond au mot de passe présent dans mon fichier clients.conf
4e Configuration du supplicant
La configuration du supplicant est la suivante : Tunneled TLS - Pas de certificat CA - Inner Authentification : PAP
Le login et le mot de passe demandés doivent bien entendu être présents sur le serveur LDAP.