Configuration FreeRadius
1. Configuration freeradius en tant que
serveur VMPS (Vlan M Policy embership
Server).
Le serveur VMPS est un serveur qui permettra d’affecter dynamiquement le vlan d’un port de
switch en fonction de l’adresse mac d’un client.
Nous devons déclarer notre switch comme étant autorisé à se connecter à notre serveur freeradius :
nano /etc/freeradius/3.0/[Link]
#...
#...
client switch {
ipaddr = [Link]
secret = poseidon
}
#...
#...
Sur le serveur freeradius nous effectuerons la configuration suivante :
ln -s /etc/freeradius/3.0/sites-available/vmps /etc/freeradius/3.0/sites-enabled/vmps
Cette commande activera une pré-configuration VMPS présente lors de l’installation de freeradius
sous debian.
Puis dans ce fichier nous devrons dé-commenter la ligne n° 72 pour utiliser un module
mac2vlan qui fait le lien entre une adresse mac et le vlan sur lequel nous souhaitons placer le poste :
mac2vlan
cette ligne faisant référence au module mac2vlan nous devons ensuite activer le dit module
Cohen Julien Configuration_freeradiusv2.[Link] 1/12
mac2vlan :
ln -s /etc/freeradius/3.0/mods-available/mac2vlan /etc/freeradius/3.0/mods-enabled/mac2vlan
Finalement dans ce fichier nous modifierons l’endroit ou se trouve le fichier contenant la liste des
adresses MAC et le nom des vlans correspondants :
nano /etc/freeradius/3.0/mods-enabled/mac2vlan
passwd mac2vlan {
filename = ${modconfdir}/fichier-mac-vlan
format = "*VMPS-Mac:=VMPS-VLAN-Name"
delimiter = ","
}
Pour finir nous créerons le fichier :
nano /etc/freeradius/3.0/mods-config/fichier-mac-vlan
[Link],direction
Nous trouvons ici l’adresse mac du poste en première position suivi du nom du vlan
Sur le switch cisco nous effectuerons la configuration suivante (en considérant que le
switch est accessible via IP) :
switch(Config)# vmps server [Link] primary
Cette commande permet de préciser quel est l’adresse du serveur VMPS.
Finalement nous devrons préciser sur les interfaces qui doivent être configurer en vlan
dynamique :
switch(config-if)# switchport mode access
switch(config-if)# switchport access vlan dynamic
Cohen Julien Configuration_freeradiusv2.[Link] 2/12
2. Le protocole 802.1x
2.1. Présentation
Le protocole 802.1x est un protocole d’accès à la couche liaison (Niv. II), il permet
d’autoriser l’accès aux postes se connectant en se basant sur l’identité de l’utilisateur ou
de la machine se connectant.
Le protocole 802.1x définit trois composants essentiels :
• Un supplicant : c’est le programme installé est configuré sur le poste client
permettant d’effectuer la demande de connexion au réseau. Aujourd’hui il est la
plupart du temps intégré dans l’os et se configure dans les propriétés de la carte
réseau. Le supplicant sera compatible avec différentes méthodes EAPoL
(Extensible Authentication Protocol over Lan) permettant l’authentification.
• Un authenticator : c’est l’équipement qui sera le premier à recevoir les demandes
du client. Si la demande est approuvé le port s’allumera. Ce rôle est parfois
nommé Network Access Server.
• Un Authentication server : C’est le serveur qui sera finalement capable de valider
la demande de connexion du supplicant et renvoyer éventuellement une politique
de fonctionnement à l’authenticator (accès à un certain vlan, acl etc.). Il s’agira
dans notre cas de notre serveur RADIUS.
Le protocole EAPoL est un framework définissant les différentes manière de
transporter les messages d’authentification sur le réseau, il permet ainsi de prendre en
charge une multitude de protocoles permettant le chiffrement et la transmission de la
phase d’authentification. Il repose le plus souvent sur des PKI (Public Key Infrastructure).
Les protocoles les plus utilisés aujourd’hui sont certainement les protocoles issu de TLS
(Transport Layer Security). On pourra citer EAP-TLS qui nécessite un PKI avec certificats
Cohen Julien Configuration_freeradiusv2.[Link] 3/12
côté client et serveur (c’est cette configuration que nous utiliserons dans ce document,
très sécurisée mais assez lourde en terme de gestion), l’EAP-TTLS qui fonctionne cette
fois avec un seul certificat côté serveur (un bon compromis entre sécurité et gestion
d’infrastructure de clé publiques). Et finalement nous pourrons citer PEAP-MSCHAPv2
qui repose sur une connexion TLS pour transmettre les informations de mots de passes
microsoft.
Le protocole RADIUS (Remote Authentication Dial-In User Service) permet quant à
lui d’envoyer les demandes de l’équipement de connexion au serveur ( de l’authenticator
à l’authentication server). Les informations de connexions sont envoyée via le protocole
EAPol du client à l’équipement de connexion au réseau (tant que l’authentification n’a
pas eu lieu seul le protocole EAPoL est autorisé à passer), puis l’équipement de
connexion envoie une demande en utilisant ces informations au serveur radius pour
valider (ou non) la demande.
Le serveur RADIUS pourra gérer en plus de l’authentification, l’accounting et
l’authorization : il enverra des règles à l’équipement de connexion permettant le filtrage,
l’accès à un vlan etc. et pourra maintenir des informations sur les différentes connexions
du postes client.
Le protocole RADIUS est ancien, il est remplacé dans les infrastructures plus modernes
par le protocole diameter, qui utilise le TCP (en opposition à RADIUS qui utilise l’UDP). Le
fait d’avoir un protocole en TCP en fait la principale différence, permettant ainsi de
sécuriser les échanges, mais aussi de le rendre facilement disponible via proxy.
Références :
[Link]
Dot1X_Deployment/Dot1x_Dep_Guide.html#wp386693
[Link]
2.2. Configuration avec freeradius et
switch Cisco
Cohen Julien Configuration_freeradiusv2.[Link] 4/12
a) Sur le serveur Freeradius
Création d’un utilisateur dans le fichier users :
nano /etc/freeradius/3.0/users
#
#...
julien Cleartext-Password := "poseidon"
Reply-Message := "Salut, %{User-Name}"
#...
#
nano /etc/freeradius/3.0/sites-enabled/default
à la ligne 281 commenter l’instruction filter username qui génère des avertissements
dans les logs
#filter_username
à la ligne 126 nous spécifierons le ports sur lequel écouter les requêtes
d’authentification radius :
port = 1812
Pour effectuer une authentification EAP-TLS nous aurons besoin de certificats,
freeradius fournis un script permettant de les générer automatiquement :
cd /etc/freeradius/3.0/certs
par défaut le mot de passe des certificats sont présents dans le fichier [Link] et
dans chaque fichier .cnf ( [Link], [Link], [Link]) si vous souhaitez les modifier.
chmod +x bootstrap
./bootstrap
Pour que freeradius puisse lire ces certificats nous modifierons les droits de nos
différents fichiers :
chown freerad:freerad /etc/freeradius/3.0/certs/*
Cohen Julien Configuration_freeradiusv2.[Link] 5/12
une fois les certificats générés nous devrons les renseigner dans le configuration du
module eap :
nano /etc/freeradius/3.0/mods-enabled/eap
nous modifierons les lignes 175, 187 et 199
tls-config tls-common {
private_key_password = whatever
private_key_file = /etc/freeradius/3.0/certs/[Link]
certificate_file = /etc/freeradius/3.0/certs/[Link]
ca_file = /etc/freeradius/3.0/certs/[Link]
Attention à modifier le mot de passe si vous n’avez pas utilisé celui fournit par défaut
lors de la génération des certificats précédente.
Toujours dans le fichier eap nous modifierons la configuration eap-tls pour permettre la
vérification du certificat client en dé-commentant la ligne virtual_server (ligne 673) :
tls {
# Point to the common TLS configuration
#
tls = tls-common
# As part of checking a client certificate, the EAP-TLS
# sets some attributes such as TLS-Client-Cert-Common-Name. This
# virtual server has access to these attributes, and can
# be used to accept or reject the request.
#
virtual_server = check-eap-tls
}
Finalement pour activer ce virtual_server nous effectuerons la commande suivante :
ln -s /etc/freeradius/3.0/sites-available/check-eap-tls /etc/freeradius/3.0/sites-enabled/check-eap-tls
b) Sur le switch
Switch(config)#aaa new-model
Cohen Julien Configuration_freeradiusv2.[Link] 6/12
Switch(config)#aaa authentication dot1x default group radius
!
***************************************************************************
!pour éviter d’être bloqué lors des prochaines connexions à mon switch :
Switch(config)#aaa authentication login default local
Switch(config)#username julien password poseidon
Switch(config)#line vty 0 15
Switch(config-line)#login authentication default
!
***************************************************************************
Switch(config)#aaa authorization network default group radius
Switch(config)#dot1x system-auth-control
Switch(config)#radius-server host [Link] key poseidon
Switch(config)#ip radius source-interface fastEthernet 0/1
finalement sur les ports qui doivent être contrôlés :
Switch(config-if)#dot1x port-control auto
Sur un switch plus récent j’effectuerais les commandes suivantes :
Switch(config)# radius server freeradius
Switch(config-radius-server)# address ipv4 [Link] auth-port 1812 acct-port 1813
Switch(config-radius-server)# key poseidon
pour configurer une (ou des) interface pour authentifier les postes client :
Switch(config-if-range)# dot1x pae authenticator
Switch(config-if-range)# authentication port-control auto
Sur un ios récent ( ou IOSv ) les commandes seront les suivantes :
Switch(config)#aaa new-model
Switch(config)#aaa authentication dot1x default group radius
Switch(config)#aaa authorization network default group radius
Switch(config)#dot1x system-auth-control
Cohen Julien Configuration_freeradiusv2.[Link] 7/12
Switch(config)#radius server freeradius
Switch(config-radius-server)# address ipv4 [Link] auth-port 1812 acct-port
1813
Switch(config-radius-server)# key poseidon
Switch(config)#int gig 3/3
Switch(config-if)#switchport mode access
Switch(config-if)#authentication port-control auto
Switch(config-if)#dot1x pae authenticator
Pour conclure il faudra copier sur un poste client les fichier [Link], [Link] et
[Link] et utiliser sur la carte réseau du poste client la sécurité 802.1x en utilisant la
méthode TLS ou eap-tls ( en fonction du programme client ).
pour affecter un utilisateur à un vlan je pourrais modifier la configuration de freeradius
dans le fichier users ( /etc/freeradius/3.0/users) :
julien Cleartext-Password := "poseidon"
Tunnel-Type = "VLAN",
Tunnel-Medium-Type = "IEEE-802",
Tunnel-Private-Group-Id = "20",
Reply-Message := "Hello, %{User-Name}"
3. Configuration d’une
authentification mschapv2 sur eap-ttls
avec Active Directory
Pour cette configuration j'utiliserai cette fois une connexion eap-ttls étant moins lourde à administrer
Cohen Julien Configuration_freeradiusv2.[Link] 8/12
puisque le certificat est seulement utilisé sur le serveur (à l'image d'une connexion https). La
configuration de la partie 2 concernant la configuration eap-tls est exactement la même seul le
certificat client ne sera pas copié sur le poste [Link].
Sur le serveur freeradius :
apt install samba winbind krb5-user freeradius-ldap
adduser freerad winbindd_priv
modifier le fichier /etc/[Link] avec l’adresse du serveur DNS Active Directory en première
position
vi /etc/[Link]
[libdefaults]
default_realm = [Link]
dns_lookup_realm = false
dns_lookup_kdc = true
vi /etc/samba/[Link]
[global]
netbios name = FREERADIUS
workgroup = JULIEN
server string = RADIUS server
security = ads
invalid users = root
socket options = TCP_NODELAY
idmap uid = 16777216-33554431
idmap gid = 16777216-33554431
winbind use default domain = no
winbind max domain connections = 5
winbind max clients = 1000
ntlm auth = mschapv2-and-ntlmv2-only
password server = *
realm = [Link]
net ads join -U administrateur
synchroniser la date et l’heure des serveurs freeradius et Active Directory (vi
/etc/systemd/[Link] )
modifier le fichier de configuration avec l'adresse du serveur AD en tant que serveur NTP et activer
l'option RootDistanceMaxSec avec une valeur de 100 :
Cohen Julien Configuration_freeradiusv2.[Link] 9/12
NTP=[Link]
RootDistanceMaxSec=100
puis démarrer le service de temps systemctl enable -now systemd-timesyncd
Redémarrer winbind : systemctl restart winbind
tester la connexion à l’AD avec la commande :
wbinfo -u
qui devrait vous donner la liste des différents utilisateurs Active Directory.
Dans le fichier /etc/freeradius/3.0/mods-enabled/mschap
dé-commenter les lignes :
...
mschap {
...
use_mppe = yes
require_encryption = yes
require_strong = yes
...
dé-commenter les lignes 104 et 105
...
winbind_username = "%{mschap:User-Name}"
winbind_domain = "%{mschap:NT-Domain}"
...
dans le fichier /etc/freeradius/3.0/mods-enabled/eap
ttls {
...
default_eap_type = mschapv2
use_tunneled_reply = yes
...
Cohen Julien Configuration_freeradiusv2.[Link] 10/12
dans le client Windows :
4. Prochaine étape associer un vlan aux
utilisateurs répondant à certains
critères ( OU/groupe) ...
Dans le fichier /etc/freeradius/3.0/mods-available/ldap
Cohen Julien Configuration_freeradiusv2.[Link] 11/12
#modifier les lignes suivantes:
server = '[Link]'
identity = 'cn=julien,ou=utilisateurs,ou=info,ou=entreprise,dc=julien,dc=labo'
password = '0Poseidon'
base_dn = 'dc=julien,dc=labo'
user {
...
filter = "(samaccountname=%{%{Stripped-User-Name}:-%{User-Name}})"
...
}
group {
...
filter = '(objectClass=Group)'
...
}
créer un lien symbolique pour activer le module ldap
ln -s /etc/freeradius/3.0/mods-available/ldap /etc/freeradius/3.0/mods-enabled/ldap
Finalement ajouter à la configuration du fichier site par défaut pour affecter les utilisateurs des
groupes active directory à des vlan:
vi /etc/freeradius/3.0/sites-enabled/default
...
post-auth {
if (Ldap-Group == "gg_compta") {
update reply {
Tunnel-type = VLAN
Tunnel-medium-type = IEEE-802
Tunnel-Private-Group-Id = 11
}
}
if (Ldap-Group == "gg_direction") {
update reply {
Tunnel-type = VLAN
Tunnel-medium-type = IEEE-802
Tunnel-Private-Group-Id = 10
}
}
...
Cohen Julien Configuration_freeradiusv2.[Link] 12/12