Proposition de sécurisation d’un réseau à l’aide des...

32
Lycée Suzanne Valadon Proposition de sécurisation d’un réseau à l’aide des protocoles 802.1X, EAP-TLS et d’un firewall pfSense Loïc Laforet Dernière modification : 25 juin 2014

Transcript of Proposition de sécurisation d’un réseau à l’aide des...

Page 1: Proposition de sécurisation d’un réseau à l’aide des ...superwebcrawler.fr/dokuwiki/lib/exe/fetch.php?media=reseau:pfsense... · freeradius-common freeradius-utils libdbi-perl

Lycée Suzanne Valadon

Proposition de sécurisationd’un réseau à l’aide des

protocoles 802.1X, EAP-TLS etd’un firewall pfSense

Loïc LaforetDernière modification : 25 juin 2014

Page 2: Proposition de sécurisation d’un réseau à l’aide des ...superwebcrawler.fr/dokuwiki/lib/exe/fetch.php?media=reseau:pfsense... · freeradius-common freeradius-utils libdbi-perl

Table des matières

I Travaux pratiques 3I Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3II Préparation de nos environnements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4III Installation du service Freeradius . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4IV Création d’un portail captif . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9V Création des certificats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12VI Intégration de la méthode EAP-TLS dans Freeradius . . . . . . . . . . . . . . . . . . . . . . . . . . 16VII Configuration du switch HP2626 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22VIII Déploiement du serveur Mysql, et configuration de Freeradius . . . . . . . . . . . . . . . . . . . . 23IX Annexes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

2

Page 3: Proposition de sécurisation d’un réseau à l’aide des ...superwebcrawler.fr/dokuwiki/lib/exe/fetch.php?media=reseau:pfsense... · freeradius-common freeradius-utils libdbi-perl

Chapitre ITravaux pratiques

I Introduction

Lorsque nous devons sécuriser un réseau informatique, nous avons tendance à se focaliser sur les outilsliés au firewalling afin de restreindre et définir explicitement les accès provenant de l’extérieur vers nos réseauxet nos ressources internes. En dehors d’un usage familial, il est cependant impératif de prendre en compte lasécurité des matériels, outils et usagers situés dans les réseaux internes, côté LAN.

Avec la prolifération des ordinateurs et médias personnels portables, le risque qu’un équipement inconnutente d’accéder aux ressources internes d’un réseau peut devenir important, et nous nous devons de mettreen oeuvre les techniques, outils et procédures qui s’imposent pour tenter au maximum de réduire les risquesd’intrusion, de rebond, de pollution ...

Si, parmi ces ressources, nous disposons également d’un accès Wi-Fi, il convient égalment de s’assurerque seules les personnes autorisées puissent s’y connecter.

Ce TP a pour but d’apporter des ébauches de solutions pour réduire ces risques. Nous verrons ainsicomment authentifier de manière forte certains utilisateurs, tout en permettant aux autres un accès limité àcertaines ressources. Nous nous baserons sur le firewall pfSense, sur l’usage de vlan, sur une authentificationRadius par les protocoles d’authentification 802.1X et EAP-TLS.

1. Ressources disponibles

Pour réaliser ce tp, votre binôme disposera des ressources suivantes :

— un firewall pfSense v-2.1.3 ;— un serveur Debian 7.5, sur lequel nous allons déployer certains services comme Freeradius ;— un switch niveau 3 (ou 2) avec 3 vlan ;— un poste sous Windows 7 Pro pour l’administration ;— un poste sous Windows 7 Pro pour les tests ;

3

Page 4: Proposition de sécurisation d’un réseau à l’aide des ...superwebcrawler.fr/dokuwiki/lib/exe/fetch.php?media=reseau:pfsense... · freeradius-common freeradius-utils libdbi-perl

II. Préparation de nos environnements

II Préparation de nos environnements

Nous nous baserons sur l’architecture illustrée par la figure I.1. Chaque binôme disposera ainsi desmêmes ressources pour lui permettre de déployer les différents éléments listés à la section 1.

Les ports des actifs dédiés par binôme vous seront communiqués le jour du TP.

Les deux machines virtuelles pfSense et Debian hébergeant le serveur d’authentification Freeradius se-ront déja déployées et configurées dans vos réseaux virtuels respectifs.

FIGURE I.1 – Principe général de l’environnement par binôme

III Installation du service Freeradius

La première opération consiste à déployer le service Freeradius sur votre serveur Debian. Pour cela, nousallons exploiter les dépôts mis à disposition par la communauté de cette distribution. Les étapes que nousdevrons respecter concernent :

— Accéder par le protocole SSH sur votre serveur Debian (putty, winscp, SSH Secure Shell ...) ;— Passer en root ;— Mettre à jour votre distribution à l’aide de la commande apt-get update ; apt-get dist-upgrade ;— Installer le paquet freeradius à l’aide de la commande apt-get install ;

root@srvm-freeradius-02:~# apt-get update ; apt-get dist-upgrade

[...]

root@srvm-freeradius-02:~# apt-get install freeradius

Les paquets supplémentaires suivants seront installés :

freeradius-common freeradius-utils libdbi-perl libfreeradius2 libltdl7

libnet-daemon-perl libpcap0.8 libperl5.14 libplrpc-perl libpython2.7 ssl-cert

Paquets suggérés :

freeradius-ldap freeradius-postgresql freeradius-mysql freeradius-krb5

openssl-blacklist

4

Page 5: Proposition de sécurisation d’un réseau à l’aide des ...superwebcrawler.fr/dokuwiki/lib/exe/fetch.php?media=reseau:pfsense... · freeradius-common freeradius-utils libdbi-perl

III. Installation du service Freeradius

Les NOUVEAUX paquets suivants seront installés :

freeradius freeradius-common freeradius-utils libdbi-perl libfreeradius2 libltdl7

libnet-daemon-perl libpcap0.8 libperl5.14 libplrpc-perl libpython2.7 ssl-cert

0 mis à jour, 12 nouvellement installés, 0 à enlever et 0 non mis à jour.

Il est nécessaire de prendre 4 594 ko dans les archives.

Après cette opération, 11,1 Mo d’espace disque supplémentaires seront utilisés.

Souhaitez-vous continuer [O/n] ?O

Une fois cette installation réalisée, attardons nous sur l’arborescence de Freeradius, située dans /etc/freeradius :

root@srvm-freeradius-02:/etc/freeradius# ls -l

total 204

-rw-r----- 1 root freerad 671 déc. 16 2012 acct_users

-rw-r----- 1 root freerad 4174 déc. 16 2012 attrs

-rw-r----- 1 root freerad 513 déc. 16 2012 attrs.access_challenge

-rw-r----- 1 root freerad 481 déc. 16 2012 attrs.access_reject

-rw-r----- 1 root freerad 437 déc. 16 2012 attrs.accounting_response

-rw-r----- 1 root freerad 2022 déc. 16 2012 attrs.pre-proxy

drwxr-s--x 2 freerad freerad 4096 juin 6 11:43 certs

-rw-r----- 1 root freerad 6703 déc. 16 2012 clients.conf

-rw-r--r-- 1 root freerad 1319 déc. 16 2012 dictionary

-rw-r----- 1 root freerad 20634 juin 6 11:43 eap.conf

-rw-r----- 1 root freerad 12949 déc. 16 2012 experimental.conf

[...]

-rw-r----- 1 root freerad 27847 déc. 16 2012 radiusd.conf

drwxr-s--x 2 freerad freerad 4096 juin 6 11:43 sites-available

drwxr-s--x 2 freerad freerad 4096 juin 6 11:43 sites-enabled

-rw-r----- 1 root freerad 3042 déc. 16 2012 sql.conf

-rw-r--r-- 1 root root 2475 déc. 16 2012 sqlippool.conf

-rw-r--r-- 1 root root 3597 déc. 16 2012 templates.conf

-rw-r--r-- 1 root root 6524 déc. 16 2012 users

root@srvm-freeradius-02:/etc/freeradius#

Les éléments importants sur lesquels nous interviendrons concernent :

— certs : répertoire contenant les certificats automatiquement générés lors de l’installation de Freera-dius ;

— clients.conf : fichier de configuration permettant la déclaration des NAS (switch pour nous), seulséquipements autorisés à effectuer des requêtes sur le serveur Freeradius ;

— eap.conf : fichier de configuration pour le protocole eap ;— radiusd.conf : fichier de configuration générale de Freeradius ;— sites-{available|enabled} : répertoires permettant de déclarer et d’activer les différentes ins-

tances (ou sites) de Freeradius ;— sql.conf : fichier de configuration utilisé lorsque nous couplons Freeradius à un SGBD (MySQL,

POSTGRESQL) ;— users : fichier de configuration utilisé pour déclarer les utilisateurs autorisés à s’authentifer sur Free-

radius.

Pour valider l’efficience de notre serveur Freeradius et de sa configuration d’origine, nous allons testerson fonctionnement. Pour cela, nous allons d’une part déclarer un NAS et un utilisateur autorisé à s’authentifier

5

Page 6: Proposition de sécurisation d’un réseau à l’aide des ...superwebcrawler.fr/dokuwiki/lib/exe/fetch.php?media=reseau:pfsense... · freeradius-common freeradius-utils libdbi-perl

III. Installation du service Freeradius

dans les fichiers prévus à cet effet par Freeradius, puis d’autre part lancer notre serveur d’authentification enmode debug.

Remarque : Par défaut, nous réaliserons une copie de sauvegarde de tous les fichiers de confi-guration que nous éditerons en fichier.ext.old.

1. Déclaration d’un NAS

La déclaration d’un NAS doit impérativement respecter trois directives :

1. le nom du client sous la forme : client mon-nas-01

2. l’adresse ou le nom fqdn 1 associé au NAS : ipaddr = 10.12.14.15

3. le secret partagé entre le NAS et le serveur Freeradius : secret = mon-secret-partagé

Ces directives sont à définir dans le fichier /etc/freeradius/clients.conf :

root@srvm-freeradius-02:/etc/freeradius# nano clients.conf

client localhost {

ipaddr = 127.0.0.1

secret = test

}

root@srvm-freeradius-02:/etc/freeradius#

Étant donné que nous allons tester notre configuration depuis le serveur Debian, nous spécifions l’adressede loopback (localhost ou 127.0.0.1) pour notre client. C’est donc la même machine qui réalisera les rôles d’authenticatoret de serveur d’authentification.

Passons à la définition de notre premier utilisateur nommé foobar.

2. Déclaration d’un utilisateur

La déclaration d’un utilisateur simple avec un mot de passe en clair s’effectue par le biais du fichierusers :

root@srvm-freeradius-02:/etc/freeradius# nano users

foobar Cleartext-Password := "password"

root@srvm-freeradius-02:/etc/freeradius#

Ces deux étapes réalisées, il ne nous reste plus qu’à lancer notre service Freeradius en mode debug et deréaliser des tests d’authentification.

3. Freeradius en mode debug

Nous arrêtons le démon freeradiusd pour le lancer en mode debug, afin de visualier les traitementsréalisés et les éventuelles erreurs détectées par Freeradius.

1. Full Qualified Domain Name

6

Page 7: Proposition de sécurisation d’un réseau à l’aide des ...superwebcrawler.fr/dokuwiki/lib/exe/fetch.php?media=reseau:pfsense... · freeradius-common freeradius-utils libdbi-perl

III. Installation du service Freeradius

root@srvm-freeradius-02:/etc/freeradius# /etc/init.d/freeradius stop

Stopping FreeRADIUS daemon: freeradius.

root@srvm-freeradius-02:/etc/freeradius# freeradius -X

[...]

Listening on authentication address * port 1812

Listening on accounting address * port 1813

Listening on authentication address 127.0.0.1 port 18120 as server inner-tunnel

Listening on proxy address * port 1814

Ready to process requests.

La configuration par défaut de Freeradius est complexe. Le lancement du démon en mode debug nousindique ici une partie des éléments de configuration et méthodes d’authentification qu’il prend charge danssa configuration par défaut. À la fin du TP, nous tenterons de réduire ces éléments de configuration pour nelaisser que les indispensables à notre besoin.

En fin de chargement du mode debug, Freeradius nous indique les différents ports d’écoute, dédiés àl’authentification, à l’accounting, et aux serveurs virtuels et proxy.

Laissons ce terminal ouvert, puis, depuis un autre terminal, testons une authentification de foobar à l’aidedu binaire radtest fourni par Freeradius (man radtest pour plus d’information...).

4. Premiers tests avec radtest

root@srvm-freeradius-02:~# radtest foobar password localhost 0 test

Sending Access-Request of id 127 to 127.0.0.1 port 1812

User-Name = "foobar"

User-Password = "password"

NAS-IP-Address = 127.0.1.1

NAS-Port = 0

Message-Authenticator = 0x00000000000000000000000000000000

rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=127, length=20

root@srvm-freeradius-02:~#

L’élément important ici est l’Access-Accept renvoyé par Freeradius. Le mode debug de Freeradius nousindique un peu plus d’information :

rad_recv: Access-Request packet from host 127.0.0.1 port 60835, id=127, length=74

User-Name = "foobar"

User-Password = "password"

NAS-IP-Address = 127.0.1.1

NAS-Port = 0

Message-Authenticator = 0x83ead3f682c403f65a628d19a4e4d945

# Executing section authorize from file /etc/freeradius/sites-enabled/default

+- entering group authorize {...}

++[preprocess] returns ok

++[chap] returns noop

++[mschap] returns noop

++[digest] returns noop

7

Page 8: Proposition de sécurisation d’un réseau à l’aide des ...superwebcrawler.fr/dokuwiki/lib/exe/fetch.php?media=reseau:pfsense... · freeradius-common freeradius-utils libdbi-perl

III. Installation du service Freeradius

[suffix] No ’@’ in User-Name = "foobar", looking up realm NULL

[suffix] No such realm "NULL"

++[suffix] returns noop

[eap] No EAP-Message, not doing EAP

++[eap] returns noop

[files] users: Matched entry foobar at line 1

++[files] returns ok

++[expiration] returns noop

++[logintime] returns noop

++[pap] returns updated

Found Auth-Type = PAP

# Executing group from file /etc/freeradius/sites-enabled/default

+- entering group PAP {...}

[pap] login attempt with password "password"

[pap] Using clear text password "password"

[pap] User authenticated successfully

++[pap] returns ok

# Executing section post-auth from file /etc/freeradius/sites-enabled/default

+- entering group post-auth {...}

++[exec] returns noop

Sending Access-Accept of id 127 to 127.0.0.1 port 60835

Finished request 0.

Going to the next request

Waking up in 4.9 seconds.

Cleaning up request 0 ID 127 with timestamp +268

Ready to process requests.

En fonction de la configuration générale de Freeradius, ce dernier peut indiqué plus ou moins d’infor-mation, en fonction des différentes méthodes d’authentification paramétrées.

Nous repérons ici la méthode utilisée par Freeradius pour valider le processus d’authentification de foo-bar : PAP 2.

Remarque : Pour la suite du TP, nous exploiterons ce second terminal pour réaliser les configu-rations et certains tests, tout en conservant le premier terminal pour visualiser le comportementde notre service Freeradius en mode debug.

Passons sans plus attendre à notre firewall pfSense, afin de créer un portail captif en sous traitant sonauthentifcation par notre Freeradius fraîchement installé.

2. Password Authenficiation Protocol transmet sur le réseau des mots de passe ASCII non chiffrés, méthode évidemment à bannir.Il est utilisé en dernier recours dès lors qu’aucune méthode d’authentification forte n’est présente, comme CHAP ou EAP.

8

Page 9: Proposition de sécurisation d’un réseau à l’aide des ...superwebcrawler.fr/dokuwiki/lib/exe/fetch.php?media=reseau:pfsense... · freeradius-common freeradius-utils libdbi-perl

IV. Création d’un portail captif

IV Création d’un portail captif

1. Préambule

Un portail captif est un système permettant d’intercepter toutes les requêtes http et https d’un client. Lebut est d’authentifier les utilisateurs d’un réseau en les renvoyant vers une page prévue à cet effet - d’où le nomportail captif. Ces services sont communément utilisés dans les hotspots, hotels ... Dans d’autres scénarios, lesportails captifs sont utilisés pour l’authentification des utilisateurs sur un réseau filaire ou pour forcer l’accordd’un contrat ou charte d’usage du moyen mis à disposition.

Passons aux phases de création, puis de configuration en externalisant l’authentification de notre servicepar notre serveur Freeradius.

2. Configuration

Au cours de cette section, nous verrons comment configurer pfSense pour qu’il remplisse ce rôle avecune authentification depuis notre serveur d’authentification Freeradius, limitant ainsi les utilisateurs depuisnotre zone Public. (Cf I.2, page 10).

1. Se rendre dans le menu Services | Portal captive ;

2. Ajouter une nouvelle zone ;

3. Cocher la case Enable captive portal ;

4. Sélectionner l’interface sur laquelle vous souhaitez que pfSense force l’interception des requêtes desutilisateurs : Public pour l’exemple ;

5. Spécifier la directive Idle Timeout à 10 minutes ;

6. Spécifier la directive Hard Timeout à 60 minutes ;

7. Spécifier la directive Enable logout popup window pour que les utilsiateurs puissent se déconnectergrâce à un popup lancé lors de l’identification validée d’un utilisateur ;

8. Activer l’authentification Radius de type PAP ;

9. Spécifier l’adresse IP de votre serveur Radius ;

10. Définir le secret partagé entre votre NAS (le pfSense) et le serveur Freeradius ;

11. Cocher l’option Sens RADIUS accountig packets pour activer le calcul des ressources consomméespar vos utilisateurs ;

12. Cocher l’option stop/start accounting ;

13. Valider enfin la configuration par le bouton Save.

Remarque 1 :

Activer puis paramétrer si besoin le service DHCP de votre pfSense sur votre Public.

9

Page 10: Proposition de sécurisation d’un réseau à l’aide des ...superwebcrawler.fr/dokuwiki/lib/exe/fetch.php?media=reseau:pfsense... · freeradius-common freeradius-utils libdbi-perl

IV. Création d’un portail captif

FIGURE I.2 – Service Portal captive : création d’un portail captif

10

Page 11: Proposition de sécurisation d’un réseau à l’aide des ...superwebcrawler.fr/dokuwiki/lib/exe/fetch.php?media=reseau:pfsense... · freeradius-common freeradius-utils libdbi-perl

IV. Création d’un portail captif

FIGURE I.3 – Service Portal captive : interception

Remarque 2 :

Dans l’exemple, nous ajoutons le service de portail captif sur l’interface Public, qui ne possèdepas encore de règle particulière. Ajoutez une règle permettant la sortie vers le HTTP(S) et le DNSau minimum pour pouvoir convenablement tester le portail captif.

Si vous connectez un équipement sur le vlan Public et tentez de consulter un site internet, vous devriezêtre intercepté par le portail captif de pfSense (Cf I.3). Cependant, toutes les tentatives d’authentification quevous allez tenter ne pourront aboutir.

Complétez la configuration de Freeradius, arrêtez le mode debug puis relancez-le.

Adaptez les configurations de vos équipements pour réaliser une authentification de type CHAP. (Vé-rifiez la présence de cette méthode dans la section authenticate de Freeradius au besoin, puis validez lefonctionnement.

Nous venons de déployer plusieurs éléments. Pour débuter, nous avons installé un serveur d’authenti-fication AAA Freeradius, qui pour le moment ne possède pas de configuration d’authentification particulière,par lequel nous avons déclaré des utilisateurs et des clients (authenticator). Nous avons ensuite créé un por-tail captif sur un VLAN dédié (Public) sous traitant l’authentification à notre serveur d’authentification. Enfin,nous avons paramétré le port de notre actif pour qu’il fournisse le même VLAN à notre utilisateur afin d’êtreintercepté puis authentifié à l’aide de son couple login / mot de passe.

Si vous le souhaitez, vous pouvez vous référer à la section 1..Autentification Radius-MAC, située à lapage 29, décrivant les différentes étapes pour configurer une authentification de type Radius-MAC.

Nous avons fini la première partie de ce TP. Passons maintenant aux choses sérieuses, en appliquant ànotre configuration une authentification forte des utilisateurs. Pour cela, nous allons ajouter à notre serveurFreeradius la configuration nécessaire pour qu’il traite l’authentification EAP-TLS. Cette méthode, basée surles certificats, permettra une authentification mutuelle entre l’utilisateur et le serveur d’authentification, par lebiais d’un authenticator : le switch.

11

Page 12: Proposition de sécurisation d’un réseau à l’aide des ...superwebcrawler.fr/dokuwiki/lib/exe/fetch.php?media=reseau:pfsense... · freeradius-common freeradius-utils libdbi-perl

V. Création des certificats

V Création des certificats

Comme évoqué en introduction de ce TP, nous allons mettre en oeuvre la méthode d’authentificationEAP-TLS, basée sur une authentification mutuelle par certificats. Pour générer les différents certificats quenous utiliserons pour authentifier les clients et le serveur, nous allons exploiter les éléments mis à dispositionpar Freeradius lors de l’installation. Nous devons disposer d’un certificat d’autorité, d’un certificat serveur as-socié à sa clé, puis des certificats liés mathématiquement pour chaque utilisateur autorisé à accéder à certainesressources ou sous réseaux.

— Se rendre dans l’arborescence /usr/share/doc/freeradius/examples/certs ;— Modifier le fichier de configuration de l’autorité de certification ca.cnf :

[ req ]

prompt = no

distinguished_name = certificate_authority

default_bits = 2048

input_password = tpradius

output_password = tpradius

x509_extensions = v3_ca

[certificate_authority]

countryName = FR

stateOrProvinceName = Limousin

localityName = Limoges

organizationName = TP-Freeradius

emailAddress = [email protected]

commonName = "Certificat d’autorite"

— Modifier le fichier de configuration du certificat serveur serveur.cnf :[ req ]

prompt = no

distinguished_name = server

default_bits = 2048

input_password = tpradius

output_password = tpradius

[server]

countryName = FR

stateOrProvinceName = Limousin

localityName = Limoges

organizationName = TP-Freeradius

emailAddress = [email protected]

commonName = "Certificat serveur"

Remarque :

Il est possible que votre distribution ne possède pas le binaire make, nécessaire ici pour générerles certificats serveurs, ca et clients. Installez le si besoin.

12

Page 13: Proposition de sécurisation d’un réseau à l’aide des ...superwebcrawler.fr/dokuwiki/lib/exe/fetch.php?media=reseau:pfsense... · freeradius-common freeradius-utils libdbi-perl

V. Création des certificats

— Générer la clé et le certificat de l’autorité, puis le certificat pour Windows par les commandes sui-vantes ;root@[...]:/usr/[...]certs# make ca.pem

openssl req -new -x509 -keyout ca.key -out ca.pem \

-days ‘grep default_days ca.cnf | sed ’s/.*=//;s/^ *//’‘

-config ./ca.cnf

Generating a 2048 bit RSA private key

................+++

......................................................................................................

writing new private key to ’ca.key’

-----

root@[...]:/usr/[...]certs#

root@[...]:/usr/[...]certs# make ca.der

openssl x509 -inform PEM -outform DER -in ca.pem -out ca.der

root@[...]:/usr/[...]certs#

— Pour générer le certificat serveur, il est nécessaire de disposer d’un fichier serial contenant la chaîne decaractère 01, puis d’un fichier index.txt vide. Générer le certificat par la commande :root@[...]:/usr/[...]certs# touch index.txt

root@[...]:/usr/[...]certs# echo "01" > serial

root@[...]:/usr/[...]certs# make server.pem

openssl ca -batch -keyfile ca.key -cert ca.pem -in server.csr

-key ‘grep output_password ca.cnf | sed ’s/.*=//;s/^ *//’‘ -out server.crt

-extensions xpserver_ext -extfile xpextensions -config ./server.cnf

Using configuration from ./server.cnf

Check that the request matches the signature

Signature ok

Certificate Details:

Serial Number: 1 (0x1)

Validity

Not Before: Jun 6 12:28:23 2014 GMT

Not After : Jun 6 12:28:23 2015 GMT

Subject:

countryName = FR

stateOrProvinceName = Limousin

organizationName = TP-Freeradius

commonName = Certificat Serveur

emailAddress = [email protected]

X509v3 extensions:

X509v3 Extended Key Usage:

TLS Web Server Authentication

Certificate is to be certified until Jun 6 12:28:23 2015 GMT (365 days)

Write out database with 1 new entries

Data Base Updated

openssl pkcs12 -export -in server.crt -inkey server.key -out server.p12 -passin

pass:‘grep output_password

13

Page 14: Proposition de sécurisation d’un réseau à l’aide des ...superwebcrawler.fr/dokuwiki/lib/exe/fetch.php?media=reseau:pfsense... · freeradius-common freeradius-utils libdbi-perl

V. Création des certificats

server.cnf | sed ’s/.*=//;s/^ *//’‘ -passout pass:‘grep

output_password server.cnf |

sed ’s/.*=//;s/^ *//’‘

openssl pkcs12 -in server.p12 -out server.pem -passin pass:‘grep output_password

server.cnf | sed ’s/.*=//;s/^ *//’‘

-passout pass:‘grep output_password server.cnf | sed ’s/.*=//;s/^ *//’‘

MAC verified OK

root@[...]:/usr/[...]certs#

— Écraser si besoin les certificats déjà placés dans le répertoire certs de Freeradius, puis y copier lescertificats et la clé privée du serveur.root@[...]:/usr/[...]certs# cp ca.pem server.key server.pem /etc/freeradius/certs/

— Créer un certificat pour un premier client, en modifiant le fichier client.cnf, puis en lançant lacommande make client.pem.[client]

countryName = FR

stateOrProvinceName = Limousin

localityName = Limoges

organizationName = TP-Freeradius

emailAddress = [email protected]

commonName = [email protected]

root@[...]:/usr/[...]certs# make client.pem

openssl req -new -out client.csr -keyout client.key -config ./client.cnf

Generating a 2048 bit RSA private key

.........+++

..+++

writing new private key to ’client.key’

-----

openssl ca -batch -keyfile ca.key -cert ca.pem -in client.csr -key ‘grep

output_password ca.cnf | sed ’s/.*=//;s/^ *//’‘ -out client.crt -extensions

xpclient_ext -extfile xpextensions -config ./client.cnf

Using configuration from ./client.cnf

Check that the request matches the signature

Signature ok

Certificate Details:

Serial Number: 2 (0x2)

Validity

Not Before: Jun 6 12:42:37 2014 GMT

Not After : Jun 6 12:42:37 2015 GMT

Subject:

countryName = FR

stateOrProvinceName = Limousin

organizationName = TP-Freeradius

commonName = [email protected]

emailAddress = [email protected]

X509v3 extensions:

X509v3 Extended Key Usage:

TLS Web Client Authentication

14

Page 15: Proposition de sécurisation d’un réseau à l’aide des ...superwebcrawler.fr/dokuwiki/lib/exe/fetch.php?media=reseau:pfsense... · freeradius-common freeradius-utils libdbi-perl

V. Création des certificats

Certificate is to be certified until Jun 6 12:42:37 2015 GMT (365 days)

Write out database with 1 new entries

Data Base Updated

openssl pkcs12 -export -in client.crt -inkey client.key -out client.p12

-passin pass:‘grep output_password client.cnf | sed ’s/.*=//;s/^ *//’‘

-passout pass:‘grep output_password client.cnf | sed ’s/.*=//;s/^ *//’‘

openssl pkcs12 -in client.p12 -out client.pem -passin pass:‘grep output_password

client.cnf | sed ’s/.*=//;s/^ *//’‘ -passout pass:‘grep output_password

client.cnf | sed ’s/.*=//;s/^ *//’‘

MAC verified OK

cp client.pem ‘grep emailAddress client.cnf | grep ’@’ | sed ’s/.*=//;s/^ *//’‘.pem

root@[...]:/usr/[...]certs#

Ces différentes étapes ont été rendues simples grâce aux éléments fournis par Freeradius. Le principereste le même si vous souhaitez utiliser directement les commandes fournies par OpenSSL. La méthode laplus propre et la plus simple à exploiter reste néanmoins le déploiement d’une PKI 3. Son déploiement restecependant fastidieux est complexe.

Cette partie étant terminée, adaptons la configuration de Freeradius pour qu’il traite l’authentificationEAP-TLS.

3. Public Key Infrastructure

15

Page 16: Proposition de sécurisation d’un réseau à l’aide des ...superwebcrawler.fr/dokuwiki/lib/exe/fetch.php?media=reseau:pfsense... · freeradius-common freeradius-utils libdbi-perl

VI. Intégration de la méthode EAP-TLS dans Freeradius

VI Intégration de la méthode EAP-TLS dans Freeradius

Lors de nos premiers tests d’authentification d’un utilisateur sous Freeradius, nous nous sommes conten-tés d’utiliser une méthode d’authentification simple basée sur un mot de passe (PAP et ou CHAP). Le but étantde fournir une authentification forte à nos utilisateurs, nous devons forcer Freeradius à gérer l’authentifica-tion par le protocole EAP, décrit en introduction de ce document, en utilisant les certificats que nous venons degénérer à la section V.Création des certificats, page 12.

Pour effectuer cette opération, nous allons adapter le fichier /etc/freeradius/eap.conf.

Astuce :

Freeradius a la particularité comme beaucoup de fichier de configuration sous Linux à posséderun nombre incalculabe de lignes et de directives, de commentaires, de sections ... Étant donné quenous avons réalisé un .old de notre fichier eap.conf, vous pouvez exécuter la commande suivantequi vous permettra de supprimer toutes les lignes en commentaires. Cette opération est ici réaliséeafin de faciliter la lisibilité des fichiers de configuration. Si vous devez déployer un tel service dansun cadre professionnel ou d’étude de R&D, il est conseillé de garder le fichier d’origine ...

root@[...]# cat eap.conf | egrep -v "^[ ]*#|^$" > eap.conf.tmp

root@[...]# mv eap.conf.tmp eap.conf

1. Configuration de Freeradius

— Modifier les directives suivantes :— default_eap_type = tls

— private_key_password = tpradius

— Commenter les sous-sections ttls, peap, mschapv2, méthodes non exploitées dans ce TP.

2. Déclaration d’un utilisateur EAP-TLS

Maintenant que notre serveur d’authentification est configuré pour traiter des requêtes EAP-TLS, nousdevons lui déclarer un utilisateur EAP capable de s’authentifier. Pour cela, nous exploitons toujours le fichierusers de Freeradius.

Comme nous le verrons plus loin dans le chapitre VII, à la page 22, nous allons ici déclarer un attribut detype autorisation permettant de forcer le VLAN de l’utilisateur une fois l’authentification TLS réussie.

[email protected] Auth-Type := EAP

Tunnel-Type = VLAN,

Tunnel-Medium-Type = 802,

Tunnel-Private-Group-ID = 2

Nous avons donc spécifié le protocole EAP, de type VLAN par le biais d’un média 802, et nous demandonsà Freeradius de spécifier le numéro de VLAN à l’authenticator une fois l’authentification réussie.

Redémarrer le serveur d’authentification pour prendre en compte ces modifications, puis passons à laconfiguration de notre client Windows.

16

Page 17: Proposition de sécurisation d’un réseau à l’aide des ...superwebcrawler.fr/dokuwiki/lib/exe/fetch.php?media=reseau:pfsense... · freeradius-common freeradius-utils libdbi-perl

VI. Intégration de la méthode EAP-TLS dans Freeradius

3. Configuration d’un client sous Windows

La configuration d’un client sous Windows ou sous un autre système d’exploitation est très simple. Ilnous suffit d’installer les certificats ca.der et client.p12 que nous avons préalablement générés. Le premier serapour déclarer l’autorité de certification de confiance (le tiers) et le second concerne notre certificat client (.p12pour Windows).

Dans l’ordre :

FIGURE I.4 – Autorité de certification - Installation

FIGURE I.5 – Autorité de certification - Choix du magasin

— Saisir le mot de passe paramétré lors de la génération du certificat d’autorité (Cf. figure I.9) ;

17

Page 18: Proposition de sécurisation d’un réseau à l’aide des ...superwebcrawler.fr/dokuwiki/lib/exe/fetch.php?media=reseau:pfsense... · freeradius-common freeradius-utils libdbi-perl

VI. Intégration de la méthode EAP-TLS dans Freeradius

FIGURE I.6 – Autorité de certification - Avertissement

FIGURE I.7 – Autorité de certification - Confirmation

— Modifier la configuration d’authentification de votre carte réseau (Cf. figure I.10) ;

— Sélectionner l’autorité de confiance (Cf. figure I.11) ;

18

Page 19: Proposition de sécurisation d’un réseau à l’aide des ...superwebcrawler.fr/dokuwiki/lib/exe/fetch.php?media=reseau:pfsense... · freeradius-common freeradius-utils libdbi-perl

VI. Intégration de la méthode EAP-TLS dans Freeradius

FIGURE I.8 – Certificat client - Installation

FIGURE I.9 – Certificat client - Mot de passe

19

Page 20: Proposition de sécurisation d’un réseau à l’aide des ...superwebcrawler.fr/dokuwiki/lib/exe/fetch.php?media=reseau:pfsense... · freeradius-common freeradius-utils libdbi-perl

VI. Intégration de la méthode EAP-TLS dans Freeradius

FIGURE I.10 – Certificat client - Configuration de la carte réseau

FIGURE I.11 – Certificat client - Choix de l’autorité de confiance

20

Page 21: Proposition de sécurisation d’un réseau à l’aide des ...superwebcrawler.fr/dokuwiki/lib/exe/fetch.php?media=reseau:pfsense... · freeradius-common freeradius-utils libdbi-perl

VI. Intégration de la méthode EAP-TLS dans Freeradius

FIGURE I.12 – Windows - Détection de l’authentification 802.1X

— Lorsque Windows détecte la nécessité de fournir une authentification basée sur le protocole 802.1X,sélectionner le certificat client préalablement installé (Cf. figure I.13) ;

FIGURE I.13 – Windows - Choix du certificat client

Une fois la configuration du client terminée, nous devons prendre la main sur l’actif mis à votre dispo-sition, afin d’activer la méthode d’authentification 802.1X (port-based) sur le port sur lequel votre client estconnecté.

21

Page 22: Proposition de sécurisation d’un réseau à l’aide des ...superwebcrawler.fr/dokuwiki/lib/exe/fetch.php?media=reseau:pfsense... · freeradius-common freeradius-utils libdbi-perl

VII. Configuration du switch HP2626

VII Configuration du switch HP2626

Nous allons administrer en mode console (telnet port 23) le switch pour modifier d’une part les portssur lesquels seront connectés nos clients Windows, et d’autre part pour déclarer notre serveur Freeradius surlequel les requêtes d’authentification EAP s’effectueront.

— S’identifer par une session telnet sur l’actif ;— Passer en mode de configuration ;— Spécifier les paramètres suivant ;

— Activer l’authentification EAP— Définir le temps pendant lequel le switch ne tentera pas d’interroger le serveur Radius si ce dernier

ne répond plus ;— Définir le serveur Radius sur lequel le switch enverra les paramètres d’authentification des clients

avec le secret partagé ;— Définir l’activation 802.1X sur un port de test ;— Définir le VLAN attribué si le client échoue dans le processus d’authentification ;— Définir l’activation de l’authentification 802.1X au niveau du switch.

aaa authentication port-access eap-radius

radius-server dead-time 10

radius-server host 192.168.2.100 key test123

aaa port-access authenticator 10

aaa port-access authenticator 10 unauth-vid 3

aaa port-access authenticator active

— Configurer le port du switch dans le VLAN LAN ;HP ProCurve Switch 2626(config)# vlan 2

HP ProCurve Switch 2626(vlan-2)# untagged 10

Warning: Changes on 802.1x port(s) may be postponed.

HP ProCurve Switch 2626(vlan-2)#

Vous devriez désormais pouvoir vous authentifier sur le serveur Freeradius, par l’intermédiaire de votrecertificat client, en utilisant le protocole 802.1X et EAP-TLS depuis l’ordinateur client connecté sur le port duswitch.

Analysez les logs de Freeradius afin d’identifier les différents échanges entre le NAS et le serveur, puisrepérez l’Acces-Accept de la requête de l’utilisateur :

Sending Access-Accept of id 37 to 192.168.2.159 port 1024

Tunnel-Type:0 = VLAN

Tunnel-Medium-Type:0 = 802

Tunnel-Private-Group-Id:0 = "2"

MS-MPPE-Recv-Key = 0x35bf4c3f2776c4b1d2610c7ea9095efeaa39892037

MS-MPPE-Send-Key = 0x30d8a021633528dd2e8f6d6c5f7bf51b19b9c48acc

EAP-Message = 0x03070004

Message-Authenticator = 0x00000000000000000000000000000000

User-Name = "[email protected]"

Finished request 35.

22

Page 23: Proposition de sécurisation d’un réseau à l’aide des ...superwebcrawler.fr/dokuwiki/lib/exe/fetch.php?media=reseau:pfsense... · freeradius-common freeradius-utils libdbi-perl

VIII. Déploiement du serveur Mysql, et configuration de Freeradius

Si vous réitérez cette opération en annulant la sélection du certificat lorsque Windows vous demande defournir des éléments supplémentaires pour valider l’authentification (cf. figure I.13 21), vous devriez basculerautomatiquement dans le VLAN 3 Public, réseau public dans notre exemple.

Dans les prochains chapîtres, nous allons déployer un serveur de bases de données pour nous simplifierl’exploitation de la gestion des utilisateurs et des NAS.

VIII Déploiement du serveur Mysql, et configuration de Freeradius

Le but est de déployer les services MySQL, Apache2 et phpmyadmin pour administrer notre base dedonnées Radius, et le composant permettant a Freeradius d’interroger une base MySQL pour vérifier lesutilisateurs, leurs attributs et les NAS.

1. Installation

Dans un premier temps, on installe les paquets nécessaires :

apt-get install freeradius-mysql php5 libapache2-mod-php5 php5-mysql mysql-server

apache2 phpmyadmin

Dans l’ordre, nous allons :

1. Créer une base de données pour Freeradius : radius ;

2. Créer un utilisateur pour cette base de données en lui donnant un privilège administrateur, en luidéfinissant un mot de passe ;

3. Créer la structure des tables par défaut ;

4. Créer la structure de la table NAS ;

Remarque :

Le mot de passe de l’utilisateur root de MySQL est ici toor a.

a. Ce qui n’est pas bien ... du tout.

# echo "create database radius;" | mysql -u root -ptoor

# echo "grant all on radius.* to radius@’%’ identified by ’radius’;\

flush privileges;" | mysql -u root -ptoor

# mysql -uroot -ptoor radius < /etc/freeradius/sql/mysql/schema.sql

# mysql -uroot -ptoor radius < /etc/freeradius/sql/mysql/nas.sql

Soit par l’intermédiaire de l’application web phpmyadmin, soit directement par la console MySQL véri-fiez la présence de la base et des tables dédiées à Freeradius.

Depuis le fichier de configuration général de Freeradius (radiusd.conf), on active les directives néces-saires pour MySQL. Ensuite, on édite le fichier de configuration de Freeradius définissant l’accès à la base dedonnées radius - (ajustez les directives en fonction des choix réalisés au dessus). Pensez à forcer Freeradiusà lire ses clients depuis la base par la table nas.

23

Page 24: Proposition de sécurisation d’un réseau à l’aide des ...superwebcrawler.fr/dokuwiki/lib/exe/fetch.php?media=reseau:pfsense... · freeradius-common freeradius-utils libdbi-perl

VIII. Déploiement du serveur Mysql, et configuration de Freeradius

# nano /etc/freeradius/radiusd.conf

$INCLUDE sql.conf

$INCLUDE sql/mysql/counter.conf

# nano /etc/freeradius/sql.conf

sql {

database = "mysql"

driver = "rlm_sql_${database}"

server = "localhost"

login = "radius"

password = "radius"

radius_db = "radius"

acct_table1 = "radacct"

acct_table2 = "radacct"

postauth_table = "radpostauth"

authcheck_table = "radcheck"

authreply_table = "radreply"

groupcheck_table = "radgroupcheck"

groupreply_table = "radgroupreply"

usergroup_table = "radusergroup"

deletestalesessions = yes

sqltrace = no

sqltracefile = ${logdir}/sqltrace.sql

num_sql_socks = 5

connect_failure_retry_delay = 60

lifetime = 0

max_queries = 0

readclients = yes

nas_table = "nas"

$INCLUDE sql/${database}/dialup.conf

}

Nous allons maintenant modifier le fichier déclarant les requêtes réalisées par Freeradius pour interrogerla table MySQL. En effet, lors des tests réalisés dans la préparation de ce TP, il a été nécessaire de désactiver lechamp server, pour valider certaines opérations.

# nano /etc/freeradius/sql/mysql/dialup.conf

nas_query = "SELECT id, nasname, shortname, type, secret FROM ${nas_table}"

Afin de rendre plus propre la configuration de notre serveur d’authentification, nous allons supprimer lesliens symboliques existant situés dans le répertoire /sites-enabled/ et nous allons créer notre propre fi-chier de configuration. Respectez cependant le fonctionnement de base de Freeradius en plaçant votre fichierde déclaration dans /site-available/ et en lui faisant pointer un lien symbolique dans /sites-enabled/.

24

Page 25: Proposition de sécurisation d’un réseau à l’aide des ...superwebcrawler.fr/dokuwiki/lib/exe/fetch.php?media=reseau:pfsense... · freeradius-common freeradius-utils libdbi-perl

VIII. Déploiement du serveur Mysql, et configuration de Freeradius

Voici une proposition de déclaration de notre site :

authorize {

preprocess

eap {

ok = return

}

expiration

logintime

sql

}

authenticate {

Auth-Type CHAP {

chap

}

eap

}

preacct {

preprocess

acct_unique

}

accounting {

detail

radutmp

}

session {

radutmp

sql

}

post-auth {

exec

Post-Auth-Type REJECT {

attr_filter.access_reject

}

}

pre-proxy {

}

post-proxy {

eap

}

Une fois la déclaration de notre site opérationnelle, nous devons déclarer explicitement les NAS (ouclients, ou authenticator) autorisés à réaliser les processus d’authentification entre nos utilisateurs et notre ser-veur d’authentification.

Utilisez la commande suivante pour déclarer notre NAS dans la table adéquate :

# echo "INSERT INTO nas(nasname,shortname,type,secret,server) VALUES \

(’192.168.2.159’,’hp2626’,’other’,’test’,’’)" | mysql -u radius -pradius radius

25

Page 26: Proposition de sécurisation d’un réseau à l’aide des ...superwebcrawler.fr/dokuwiki/lib/exe/fetch.php?media=reseau:pfsense... · freeradius-common freeradius-utils libdbi-perl

VIII. Déploiement du serveur Mysql, et configuration de Freeradius

Faites de même pour les autres NAS que vous souhaitez exploiter.

Relancez enfin votre serveur Freeradius toujours en mode debug, pour vérifier si vous n’avez pas d’er-reur de configuration. Validez également la configuration en testant un utilisateur à l’aide de son certificat, etl’utilisateur foobar. Tentez de comprendre pourquoi ... ou passez à la suite.

L’utilisateur foobar ne peut se connecter car il a été initialement déclaré dans le fichier users. Dans laconfiguration de notre site tp-radius, nous avons désactivé la directive files dans la section authorize,en autorisant uniquement eap et sql. Ainsi l’utilisateur foobar n’est plus un utilisateur déclaré pour notre Free-radius.

Pour l’ajouter, procédez ainsi :

echo "INSERT INTO radcheck(UserName,Attribute,op,Value) VALUES \

(’foobar’,’Cleartext-Password’,’:=’,’foobar’);" | mysql -u

\ radius -pradius radius

Concernant l’utilisateur [email protected] possédant un certificat lié à l’autorité de certification et aucertificat serveur de notre Debian, il a la capacité de s’authentifier car la directive eap est déclarée dans notrefichier de configuration de site.

Le fait que eap soit une méthode d’authentification sans autre contrôle pose un réel problème ici ...Quel que soit le certificat valide présenté, donc authentique et non révoqué, notre utilisateur le possédantsera automatiquement accepté. C’est le problème de notre solution. Nous ne disposons pas ici d’une réellePKI, permettant facilement de révoquer pour x raisons le certificat d’un client. Ainsi nous ne sommes pas enmesure de désactiver un utilisateur s’authentifiant par un certificat par le biais du protocole EAP-TLS.

Pour pallier cette faille, nous allons contourner un peu le fonctionnement natif cette méthode en ajoutantun contrôle supplémentaire nous assurant un contrôle réel sur nos utilisateurs. Nous allons désactiver dans lasection authorize la directive eap, pour ne la laisser que dans authenticate.

Ainsi notre site tp-radius :

authorize {

preprocess

eap {

ok = return

}

expiration

logintime

sql

}

authenticate {

Auth-Type CHAP {

chap

}

eap

}

... devient :

26

Page 27: Proposition de sécurisation d’un réseau à l’aide des ...superwebcrawler.fr/dokuwiki/lib/exe/fetch.php?media=reseau:pfsense... · freeradius-common freeradius-utils libdbi-perl

VIII. Déploiement du serveur Mysql, et configuration de Freeradius

authorize {

preprocess

expiration

logintime

sql

}

authenticate {

Auth-Type CHAP {

chap

}

eap

}

Ainsi, même si le processus d’authentification est autorisée par Freeradius lors d’une tentative EAP-TLSvalide par les certificats, nous bloquons par défaut l’autorisation aux ressources par ce procédé. L’utilisateurest ainsi rejeté.

Si vous retentez de vous connecter à l’aide de votre utilisateur possédant un certificat, vous devriez êtrerejeté par Freeradius, et le debug devrait correspondre à :

[...]

ERROR: No authenticate method (Auth-Type) found for the request: Rejecting the user

Failed to authenticate the user.

Using Post-Auth-Type Reject

# Executing group from file /etc/freeradius/sites-enabled/tp-radius

+- entering group REJECT {...}

[attr_filter.access_reject] expand: %{User-Name} -> [email protected]

attr_filter: Matched entry DEFAULT at line 11

++[attr_filter.access_reject] returns updated

Delaying reject of request 0 for 1 seconds

Going to the next request

Waking up in 0.9 seconds.

Sending delayed reject for request 0

Sending Access-Reject of id 45 to 192.168.2.159 port 1024

Waking up in 4.9 seconds.

Cleaning up request 0 ID 45 with timestamp +64

Ready to process requests.

Nous devons cependant permettre à nos utilisateurs possédant un certificat valide de s’authentifier par leserveur Freeradius. Pour cela, nous allons nous appuyer sur la table radgroupcheck, en déclarant un groupeautorisé à utiliser la méthode EAP pour s’authentifier :

mysql> insert into radgroupcheck (GroupName,Attribute,op,Value) values \

(’eap-group’,’Auth-Type’,’:=’,’EAP’);

Query OK, 1 row affected (0.00 sec)

Maintenant, associez vos utilisateurs possédant un certificat valide à ce groupe par l’intermédiaire de latable radusergroup :

27

Page 28: Proposition de sécurisation d’un réseau à l’aide des ...superwebcrawler.fr/dokuwiki/lib/exe/fetch.php?media=reseau:pfsense... · freeradius-common freeradius-utils libdbi-perl

VIII. Déploiement du serveur Mysql, et configuration de Freeradius

mysql> insert into radusergroup (UserName,GroupName) values \

(’[email protected]’,’eap-group’);

Query OK, 1 row affected (0.00 sec)

Vous devriez désormais pouvoir authentifier vos utilisateurs possédant un certificat valide, et présentsdans le groupe eap-group que nous venons de créer.

Sending Access-Accept of id 52 to 192.168.2.159 port 1024

MS-MPPE-Recv-Key = 0x170063a9c22c5198946a7043221e2c775735a91e3ebcac657cc5772cb386945e

MS-MPPE-Send-Key = 0xa5a6517975829590bdcc59b1b75cf8860f4d82a71b9e6f9def6a877b102df715

EAP-Message = 0x03070004

Message-Authenticator = 0x00000000000000000000000000000000

User-Name = "[email protected]"

Finished request 7.

Going to the next request

Waking up in 4.9 seconds.

Cleaning up request 1 ID 46 with timestamp +566

Nous allons maintenant nous pencher sur l’attribution dynamique des vlan associés à nos utilisateursauthentifiés par le protocole 802.1X. Nous avons pour le moment forcé les utilisateurs dans un vlan (untag 2),et nous avons demandé à notre switch de les basculer dans un vlan public si l’authentification 802.1X échouait.

Cela fonctionne mais ce fonctionnement reste très limité. En effet, par cette méthode, nous ne pouvonsforcer un étudiant de BTS SIO a basculé dans un vlan dédié, quelque soit le switch et le port sur lequel il seconnecterait.

Pour permettre aux administrateurs de forcer chaque utilisateur a utiliser un vlan particulier, nous allonsexploiter trois attributs RADIUS par l’intermédiaire de la table radgroupreply.

— Réaliser les requêtes SQL pour arriver au résultat suivant :

mysql> SELECT * FROM radgroupreply;

+----+-----------+-------------------------+----+----------+

| id | groupname | attribute | op | value |

+----+-----------+-------------------------+----+----------+

| 1 | eap-group | Tunnel-Type | = | VLAN |

| 2 | eap-group | Tunnel-Medium-Type | = | IEEE-802 |

| 3 | eap-group | Tunnel-Private-Group-ID | = | 2 |

+----+-----------+-------------------------+----+----------+

3 rows in set (0.00 sec)

Ces attributs forcent les utilisateurs du groupe eap-group à basculer lors d’une authentification réussiedans le vlan 2 LAN. Modifiez la configuration du port du switch sur lequel vous testez votre client à utiliser levlan 3 untag.

Cette solution permet donc d’activer tous les ports de plusieurs actifs paramétrés en 802.1X, de para-métrer avec un vlan public cette authentification échouait, et, en fonction de l’utilisateur, l’associer à groupele renvoyant dans son vlan attitré.

Réitérez les tests et vérifier le fonctionnement.

28

Page 29: Proposition de sécurisation d’un réseau à l’aide des ...superwebcrawler.fr/dokuwiki/lib/exe/fetch.php?media=reseau:pfsense... · freeradius-common freeradius-utils libdbi-perl

IX. Annexes

IX Annexes

1. Autentification Radius-MAC

L’authentification par Radius-MAC est la solution la plus simple à mettre en oeuvre. Vu la facilité d’ur-super une adresse mac, elle est cependant à éviter.

La configuration de Freeradius ne demande que l’activation de l’autorisation et de l’authentificationCHAP.

La déclaration d’un utilisateur correspond à :

50465D38F676 Auth-Type := Local, User-Password == 50465D38F676

Tunnel-Type = VLAN,

Tunnel-Medium-Type = 802,

Tunenl-Private-Group-ID = 2

Concernant la configuration du switch 2626 (non native sur le 2960G) :

radius-server host 192.168.2.100 key secret

aaa port-access mac-based addr-format no-delimiter

aaa port-access mac-based 10

Concernant la configuration du serveur Freeradius, il suffit d’activer l’authentification CHAP dans lessections authorize et authenticate.

2. Cumul d’une authentification EAP-TLS et Radius-MAC

Il s’agit ici d’authentifier la machine elle-même. Nous avons vu que la simple adresse MAC n’était passuffisamment fiable pour être utilisé comme seul moyen. Une autre méthode consiste à créer un certificatpour chaque machine. Le supplicant est configuré pour EAP-TLS et avec le certificat de la machine. Si le CN ducertificat correspond au nom fqdn de la machine, alors on peut déclarer notre utilisateur ainsi :

pc-l-laforet Auth-Type := EAP, Calling-Station-Id == 50465D38F676

Tunnel-Type = VLAN,

Tunnel-Medium-Type = 802,

Tunenl-Private-Group-ID = 2

3. Configuration d’un actif Cisco 2960G

Cas d’un Cisco 2960G :

aaa new-model

aaa authentication dot1x default group radius

dot1x system-auth-control

aaa authorization network default group radius

radius-server host 192.168.2.100 auth-port 1218 key test123

interface fastEthernet 0/10

switchport mode access

dot1x port-control auto

radius-server dead-criteria time 5 tries 3

radius-server deadtime 10 minutes

29

Page 30: Proposition de sécurisation d’un réseau à l’aide des ...superwebcrawler.fr/dokuwiki/lib/exe/fetch.php?media=reseau:pfsense... · freeradius-common freeradius-utils libdbi-perl

IX. Annexes

4. Intégration de Freeradius et Active Directory

Le but de cette section est de proposer une solution pour intégrer notre serveur Freeradius dans undomaine Active Directory existant. Un domaine Windows peut uniquement assurer le rôle d’authentification.Il faudra disposer d’une autre solution pour gérer l’autorisation (fichier, base MySQL ...). L’utilisation d’undomaine Windows est intéressante lorsque ce domaine est existant, et surtout qu’il possède l’ensemble descomptes des utilisateurs d’une entreprise.

L’intérêt est donc d’interroger la base Windows avec l’identifiant fournir par le supplicant pour validerson authentification grâce à son mot de passe.

La seule contrainte est de déployer sur notre serveur trois rôles supplémentaires :

1. samba : nécessaire pour joindre notre serveur Freeradius à notre domaine Windows existant.

2. kerberos : nécessaire pour dialoguer et échanger les mots de passe entre samba et notre CPD.

3. winbind : nécessaire pour lier samba au domaine Windows.

Pour réaliser l’intégration de notre authentification Freeradius par l’intermédiaire de notre contrôleurprincipal de domaine, il est nécessaire de réaliser les opérations suivantes :

1. Installer les paquets nécessaires ;

2. Configurer le fichier de configuration smb.conf ;

3. Configurer le fichier kerb5.conf ;

4. Configurer le fichier ntlm_auth ;

5. Joindre le serveur Freeradius au domaine Active Directory Windows ;

6. Tester la jonction au domaine ;

7. Ajouter l’authentification MSCHAP à notre serveur Freeradius ;

8. Tester l’authentification d’un utilisateur.

root@srvm-freeradius-02:~# apt-get install samba krb5-user winbind

Répondre aux questions pour valider la liaison de Kerberos au domaine Windows existant. Éditons lefichier de configuration de samba.

root@srvm-freeradius-02:~# nano /etc/samba/smb.conf

workgroup = AUTH-REZO

security = ads

winbind use default domain = no

password server = windows-2008.auth-rezo.adds

wins server = 192.168.2.200

realm = realm.AUTH-REZO.ADDS

Activons le domaine Windows sur le module ntlm_auth :

root@srvm-freeradius-02:/etc/freeradius# cat modules/ntlm_auth

exec ntlm_auth {

wait = yes

program = "/usr/bin/ntlm_auth --request-nt-key --domain=AUTH-REZO

30

Page 31: Proposition de sécurisation d’un réseau à l’aide des ...superwebcrawler.fr/dokuwiki/lib/exe/fetch.php?media=reseau:pfsense... · freeradius-common freeradius-utils libdbi-perl

IX. Annexes

--username=%{mschap:User-Name}

--password=%{User-Password}"

}

Éditons le fichier de configuration /etc/freeradius/modules/mschap :

ntlm_auth = "/usr/bin/ntlm_auth --request-nt-key --username=%{mschap:User-Name:-None}

--domain=%{%{mschap:NT-Domain}:-AUTH-REZO}

--challenge=%{mschap:Challenge:-00}

--nt-response=%{mschap:NT-Response:-00}"

Activons l’authentification ntlm_auth :

authenticate {

...

ntlm_auth

...

}

Joignons le serveur au domaine Windows (la configuration de vos DNS et de votre FQDN est important) :

root@srvm-freeradius-02:~# cat /etc/resolv.conf

domain auth-rezo.adds

search auth-rezo.adds

nameserver 192.168.2.200

root@srvm-freeradius-02:~# net join -U Administrateur -w WINDOWS

Enter Administrateur’s password:

Using short domain name -- AUTH-REZO

Joined ’RADIUS-02’ to realm ’auth-rezo.adds’

root@srvm-freeradius-02:~#

root@srvm-freeradius-02:~# net rpc testjoin

Join to ’AUTH-REZO’ is OK

root@srvm-freeradius-02:~#

Effectuons différents tests pour valider notre configuration :

root@debian:# wbinfo -a tyty%pass

plaintext password authentication failed

Could not authenticate user tyty%pass with plaintext password

challenge/response password authentication succeeded

root@debian:# ntlm_auth --request-nt-key --domain=AUTH-REZO --username=tyty --password=pass

NT_STATUS_OK: Success (0x0)

root@debian:#

Réalisons un premier test pour valider la configuration :

root@debian:~# radtest -t mschap tyty pass localhost 0 testing123

Sending Access-Request of id 12 to 127.0.0.1 port 1812

31

Page 32: Proposition de sécurisation d’un réseau à l’aide des ...superwebcrawler.fr/dokuwiki/lib/exe/fetch.php?media=reseau:pfsense... · freeradius-common freeradius-utils libdbi-perl

IX. Annexes

User-Name = "tyty"

NAS-IP-Address = 127.0.1.1

NAS-Port = 0

Message-Authenticator = 0x00000000000000000000000000000000

MS-CHAP-Challenge = 0x146ccadf37ec919d

MS-CHAP-Response = 0x0001000000000000000000000000000000000000000000000000b5a6e2d403e5e1663dc2f4f03b2fb7a2b5802f9461212a99

rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=12, length=84

MS-CHAP-MPPE-Keys = 0x00000000000000000c075e1ae8ab7c564e629b0b4d2331330000000000000000

MS-MPPE-Encryption-Policy = 0x00000001

MS-MPPE-Encryption-Types = 0x00000006

root@debian:~#

32