WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Certain examples of corporate WiFi organization have already been described. Here, I will detail how I implemented a similar solution and the challenges I encountered while connecting different devices. We will use the existing LDAP with registered users, set up FreeRadius, and configure WPA2-Enterprise on the Ubnt controller. It seems simple enough. Let's see...

A bit about EAP methods

Before starting the task, it is essential to determine which authentication method we will use in our solution.

From Wikipedia:

EAP is an authentication framework often used in wireless networks and point-to-point connections. The format was first described in RFC 3748 and updated in RFC 5247.
EAP is used to select the authentication method, transfer keys, and manage these keys through modules called EAP methods. There are many EAP methods, both defined alongside EAP and released by various manufacturers separately. EAP does not define the channel level; it only specifies the message format. Each protocol using EAP has its encapsulation protocol for EAP messages.

The methods themselves:

  • LEAP is a proprietary protocol developed by CISCO. Vulnerabilities have been found. It is currently not recommended for use.
  • EAP-TLS is well-supported among vendors of wireless connections. It is a secure protocol, being a successor to SSL standards. Client configuration is quite complex. A client certificate is needed in addition to a password. It is supported in many systems.
  • EAP-TTLS is widely supported in many systems, offering good security by using PKI certificates only on the authentication server.
  • EAP-MD5 is another open standard. It offers minimal security. It is vulnerable and does not support mutual authentication or key generation.
  • EAP-IKEv2 is based on the Internet Key Exchange Protocol version 2. It provides mutual authentication and session key establishment between the client and server.
  • PEAP is a joint solution from CISCO, Microsoft, and RSA Security as an open standard. It is widely available in products and provides very good security. It is similar to EAP-TTLS, requiring only a certificate on the server side.
  • PEAPv0/EAP-MSCHAPv2 — aprĂšs EAP-TLS, c'est la deuxiĂšme norme largement utilisĂ©e dans le monde. Il utilise une connexion client-serveur dans Microsoft, Cisco, Apple, Linux.
  • PEAPv1/EAP-GTC — créé par Cisco comme alternative Ă  PEAPv0/EAP-MSCHAPv2. Ne protĂšge pas les donnĂ©es d'authentification dans tous les cas. Non supportĂ© dans Windows OS.
  • EAP-FAST — mĂ©thode dĂ©veloppĂ©e par Cisco pour corriger les dĂ©fauts de LEAP. Utilise une Protected Access Credential (PAC). ComplĂštement non finalisĂ©e.

MalgrĂ© toute cette diversitĂ©, le choix reste limitĂ©. La mĂ©thode d'authentification devait rĂ©pondre Ă  : une bonne sĂ©curitĂ©, un support sur tous les appareils (Windows 10, macOS, Linux, Android, iOS) et, en toute honnĂȘtetĂ©, plus c'est simple, mieux c'est. Par consĂ©quent, le choix s'est portĂ© sur EAP-TTLS en association avec le protocole PAP.
Une question peut se poser — Pourquoi utiliser PAP ? car il transmet des mots de passe en clair ?

Oui, c'est tout à fait vrai. La communication entre FreeRadius et FreeIPA se fera ainsi. En mode débogage, vous pouvez suivre comment le nom d'utilisateur et le mot de passe sont envoyés. Et peu importe s'ils sont envoyés, vous avez juste accÚs au serveur FreeRadius.

Pour en savoir plus sur le fonctionnement d'EAP-TTLS, vous pouvez lire. ici

FreeRADIUS

Nous allons installer FreeRadius sur CentOS 7.6. Rien de compliquer, nous l'installons de maniĂšre habituelle.

yum install freeradius freeradius-utils freeradius-ldap -y

À partir des paquets, la version 3.0.13 est installĂ©e. La derniĂšre peut ĂȘtre obtenue sur. https://freeradius.org/

AprÚs cela, FreeRadius fonctionne déjà. Vous pouvez décommenter la ligne dans /etc/raddb/users.

steve   Cleartext-Password := "testing"

Lancez le serveur en mode débogage.

freeradius -X

Et nous faisons un test de connexion depuis localhost.

radtest steve testing 127.0.0.1 1812 testing123

Nous avons reçu la réponse. Received Access-Accept Id 115 from 127.0.0.1:1812 to 127.0.0.1:56081 length 20, donc tout va bien. Continuons.

Connectons le module. ldap.

ln -s /etc/raddb/mods-available/ldap /etc/raddb/mods-enabled/ldap

Et nous allons l modifier immédiatement. Nous devons faire en sorte que FreeRadius puisse accéder à FreeIPA.

mods-enabled/ldap

ldap {
server="ldap://ldap.server.com"
port=636
start_tls=yes
identity="uid=admin,cn=users,dc=server,dc=com"
password=**********
base_dn="cn=users,dc=server,dc=com"
set_auth_type=yes
...
user {
base_dn="${..base_dn}"
filter="(uid=%{%{Stripped-User-Name}:-%{User-Name}})"
}
...

Redémarrons le serveur radius et vérifions la synchronisation des utilisateurs LDAP:

radtest user_ldap password_ldap localhost 1812 testing123

Modifions eap dans. mods-enabled/eap
Ici, nous ajouterons deux instances de eap. Elles ne différeront que par les certificats et les clés. Je vous expliquerai plus loin pourquoi de cette maniÚre.

mods-enabled/eap

eap eap-client {                                                                                                                                                                                                                           default_eap_type = ttls                                                                                                                                                                                                                 timer_expire = 60                                                                                                                                                                                                                       ignore_unknown_eap_types = no                                                                                                                                                                                                          cisco_accounting_username_bug = no                                                                                                                                                                                                      max_sessions = ${max_requests}
           tls-config tls-common {
           private_key_file = ${certdir}/fisrt.key
           certificate_file = ${certdir}/first.crt
           dh_file = ${certdir}/dh
           ca_path = ${cadir}
           cipher_list = "HIGH"
           cipher_server_preference = no
           ecdh_curve = "prime256v1"
           check_crl = no
           }
                                                                                                                                                                                                                                                                                                                                                                                                                                                 
           ttls {
           tls = tls-common
           default_eap_type = md5
           copy_request_to_tunnel = no
           use_tunneled_reply = yes
           virtual_server = "inner-tunnel"
           }
}
eap eap-guest {
default_eap_type = ttls                                                                                                                                                                                                                 timer_expire = 60                                                                                                                                                                                                                       ignore_unknown_eap_types = no                                                                                                                                                                                                          cisco_accounting_username_bug = no                                                                                                                                                                                                      max_sessions = ${max_requests}
           tls-config tls-common {
           private_key_passwotd=blablabla
           private_key_file = ${certdir}/server.key
           certificate_file = ${certdir}/server.crt
           dh_file = ${certdir}/dh
           ca_path = ${cadir}
           cipher_list = "HIGH"
           cipher_server_preference = no
           ecdh_curve = "prime256v1"
           check_crl = no
           }
                                                                                                                                                                                                                                                                                                                                                                                                                                                 
           ttls {
           tls = tls-common
           default_eap_type = md5
           copy_request_to_tunnel = no
           use_tunneled_reply = yes
           virtual_server = "inner-tunnel"
           }
}

Ensuite, nous modifions site-enabled/default. Nous nous intéressons aux sections authorize et authenticate.

site-enabled/default

authorize {
  filter_username
  preprocess
  if (&User-Name == "guest") {
   eap-guest {
       ok = return
   }
  }
  elsif (&User-Name == "client") {
    eap-client {
       ok = return 
    }
  }
  else {
    eap-guest {
       ok = return
    }
  }
  ldap
  if ((ok || updated) && User-Password) {
    update {
        control:Auth-Type := ldap
    }
  }
  expiration
  logintime
  pap
  }

authenticate {
  Auth-Type LDAP {
    ldap
  }
  Auth-Type eap-guest {
    eap-guest
  }
  Auth-Type eap-client {
    eap-client
  }
  pap
}

Dans la section authorize, nous supprimons tous les modules dont nous n'avons pas besoin. Nous gardons uniquement ldap. Nous ajoutons une vérification du client par le nom d'utilisateur. C'est précisément pour cela que nous avons ajouté ci-dessus deux instances de eap.

Multi EAPLe fait est qu'en connectant certains appareils, nous allons utiliser des certificats systĂšme et indiquer un domaine. Nous avons un certificat et une clĂ© d'une autoritĂ© de certification de confiance. À mon avis, cette procĂ©dure de connexion est plus simple que de distribuer un certificat auto-signĂ© Ă  chaque appareil. Mais nous ne pouvons tout de mĂȘme pas Ă©viter complĂštement les certificats auto-signĂ©s. Les appareils Samsung et Android < 6 ne savent pas utiliser les certificats systĂšme. Par consĂ©quent, pour eux, nous crĂ©ons une instance distincte de eap-guest avec des certificats auto-signĂ©s. Pour tous les autres appareils, nous utiliserons eap-client avec un certificat de confiance. Le nom d'utilisateur est dĂ©terminĂ© par le champ Anonyme lors de la connexion de l'appareil. Seules 3 valeurs sont autorisĂ©es : Guest, Client et champ vide. Tout le reste est rejetĂ©. Cela se configure dans les politiques. Je fournirai un exemple un peu plus tard.

Nous allons modifier les sections authorize et authenticate dans site-enabled/inner-tunnel

site-enabled/inner-tunnel

authorize {
  filter_username
  filter_inner_identity
  update control {
   &Proxy-To-Realm := LOCAL
  }
  ldap
  if ((ok || updated) && User-Password) {
    update {
        control:Auth-Type := ldap
    }
  }
  expiration
  digest
  logintime
  pap
  }

authenticate {
  Auth-Type eap-guest {
    eap-guest
  }
  Auth-Type eap-client {
    eap-client
  }
  Auth-Type PAP {
    pap
  }
  ldap
}

Ensuite, nous devons spĂ©cifier dans les politiques quels noms peuvent ĂȘtre utilisĂ©s pour l'entrĂ©e anonyme. Nous modifions policy.d/filter.

Nous devons trouver des lignes ressemblant Ă  ceci :

if (&outer.request:User-Name !~ /^(anon|@)/) {
  update request {
    Module-Failure-Message = "User-Name is not anonymized"
  }
  reject
}

Et en dessous, dans elsif, ajouter les valeurs nécessaires :

elsif (&outer.request:User-Name !~ /^(guest|client|@)/) {
  update request {
    Module-Failure-Message = "User-Name is not anonymized"
  }
  reject
}

Nous devons maintenant nous déplacer dans le répertoire certs. Ici, nous devons placer la clé et le certificat de l'autorité de certification de confiance que nous avons déjà et générer des certificats auto-signés pour eap-guest.

Modifier les paramĂštres dans le fichier ca.cnf.

ca.cnf


...
default_days = 3650
default_md = sha256
...
input_password = blablabla
output_password = blablabla
...
countryName = RU
stateOrProvinceNmae = État
localityNmae = Ville
organizationName = NONAME
emailAddress = admin@admin.ru
commonName = "CA FreeRadius"

Les mĂȘmes valeurs Ă  inscrire dans le fichier server.cnf. Changer uniquement
commonName:

server.cnf


...
default_days = 3650
default_md = sha256
...
input_password = blablabla
output_password = blablabla
...
countryName = RU
stateOrProvinceNmae = État
localityNmae = Ville
organizationName = NONAME
emailAddress = admin@admin.ru
commonName = "Certificat du Serveur FreeRadius"

Créer :

make

PrĂȘt. Les fichiers obtenus server.crt et server.key sont dĂ©jĂ  mentionnĂ©s ci-dessus dans eap-guest.

Et enfin, ajoutons nos points d'accÚs dans le fichier client.conf. J'en ai 7. Pour ne pas ajouter chaque point séparément, nous allons seulement indiquer le réseau dans lequel ils se trouvent (mes points d'accÚs se trouvent dans un VLAN distinct).

client APs {
ipaddr = 192.168.100.0/24
password = password_AP
}

ContrĂŽleur Ubiquiti

Sur le contrÎleur, créons un réseau séparé. Prenons 192.168.2.0/24
Allons dans les paramÚtres -> profil. Créons un nouveau :

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Indiquons l'adresse et le port du serveur radius et le mot de passe que nous avons inscrit dans le fichier clients.conf:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Créons un nouveau nom pour le réseau sans fil. Comme méthode d'authentification, choisissons WPA-EAP (Entreprise) et indiquons le profil radius créé :

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Tout sauvegardons, appliquons et continuons.

Configuration des clients

Commençons par le plus compliqué !

Windows 10

La complexité réside dans le fait que Windows ne peut pas encore se connecter au WiFi d'entreprise via le domaine. Il est donc nécessaire de charger manuellement notre certificat dans le magasin de certificats de confiance. Nous pouvons utiliser soit un certificat auto-signé, soit un certificat d'une autorité de certification. Je vais utiliser ce dernier.

Ensuite, il faut créer une nouvelle connexion. Pour cela, allons dans les paramÚtres réseau et Internet -> Centre de contrÎle des réseaux et partage -> Créer et configurer une nouvelle connexion ou un réseau :

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Saisissons manuellement le nom du rĂ©seau et changeons le type de sĂ©curitĂ©. Ensuite, cliquons sur modifier les paramĂštres de connexion et dans l'onglet SĂ©curitĂ©, sĂ©lectionnons l'authentification du rĂ©seau — EAP-TTLS.

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

AccĂ©dons aux paramĂštres, dĂ©finissons la confidentialitĂ© de l'authentification — client. En tant qu'autoritĂ© de certification de confiance, choisissons le certificat que nous avons ajoutĂ©, cochons la case « Ne pas demander Ă  l'utilisateur de confirmer si l'autorisation du serveur Ă©choue » et sĂ©lectionnons la mĂ©thode d'authentification — mot de passe non chiffrĂ© (PAP).

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Ensuite, nous allons dans les paramÚtres supplémentaires, nous activons l'option « Indiquez le mode d'authentification ». Nous sélectionnons l'option « Authentification de l'utilisateur » et cliquons sur enregistrer les informations d'identification. Ici, il faudra entrer username_ldap et password_ldap

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Nous sauvegardons tout, appliquons et fermons. Nous pouvons nous connecter à un nouveau réseau.

Linux

J'ai testé sur Ubuntu 18.04, 18.10, Fedora 29, 30.

Pour commencer, téléchargeons notre certificat. Je n'ai pas trouvé sur Linux s'il y avait une possibilité d'utiliser des certificats systÚme et s'il y a vraiment un tel stockage.

Nous allons nous connecter par domaine. Donc, un certificat de l'autorité de certification qui a délivré notre certificat est nécessaire.

Tout le branchement se fait dans une seule fenĂȘtre. Nous choisissons notre rĂ©seau :

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

anonyme — client
domaine — le domaine pour lequel le certificat a Ă©tĂ© dĂ©livrĂ©

Android

non-Samsung

À partir de la version 7, lors de la connexion au WiFi, vous pouvez utiliser des certificats systùme en indiquant seulement le domaine :

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

domaine — le domaine pour lequel le certificat a Ă©tĂ© dĂ©livrĂ©
anonyme — client

Samsung

Comme mentionné ci-dessus, les appareils Samsung ne savent pas utiliser des certificats systÚme lors de la connexion au WiFi, et ils n'ont pas la possibilité de se connecter par domaine. Il faut donc ajouter manuellement le certificat racine de l'autorité de certification (ca.pem, que l'on prend sur le serveur Radius). Ici, nous utiliserons un certificat auto-signé.

Téléchargez le certificat sur votre appareil et installez-le.

Installation du certificatWiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Il faudra installer un motif de déverrouillage de l'écran, un code PIN ou un mot de passe, s'il n'est pas encore installé :

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

J'ai montré la version complexe de l'installation du certificat. Sur la plupart des appareils, il suffit d'appuyer sur le certificat téléchargé.

Une fois le certificat installé, vous pouvez passer à la connexion :

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

certificat — sĂ©lectionnez celui que vous avez installĂ©
utilisateur anonyme — invitĂ©

macOS

Les appareils Apple, dĂšs leur sortie de la boĂźte, ne peuvent se connecter qu'Ă  EAP-TLS, mais il est quand mĂȘme nĂ©cessaire de leur fournir le certificat. Pour indiquer un autre mode de connexion, il faut utiliser Apple Configurator 2. Il faut donc d'abord le tĂ©lĂ©charger sur Mac, crĂ©er un nouveau profil et ajouter tous les paramĂštres de WiFi nĂ©cessaires.

Apple ConfiguratorWiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Ici, nous indiquons le nom de notre réseau
Type de sĂ©curitĂ© — WPA2 Enterprise
Types EAP acceptĂ©s — TTLS
Nom d'utilisateur et mot de passe — laissons vides
Authentification interne — PAP
IdentitĂ© externe — client

Onglet Confiance. Ici, nous indiquons notre domaine

C'est tout. Le profil peut ĂȘtre enregistrĂ©, signĂ© et distribuĂ© sur les appareils

Une fois le profil prĂ©parĂ©, il doit ĂȘtre tĂ©lĂ©chargĂ© sur Mac et installĂ©. Pendant l'installation, il faudra indiquer le username_ldap et le password_ldap de l'utilisateur :

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

iOS

Le processus est similaire Ă  celui de macOS. Il faut utiliser un profil (il peut ĂȘtre exactement le mĂȘme que pour macOS. Voir ci-dessus pour crĂ©er un profil dans Apple Configurator).

Téléchargeons le profil, installons-le, saisissons les informations d'identification et connectons-nous :

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

C'est tout. Nous avons configuré le serveur Radius, l'avons synchronisé avec FreeIPA et indiqué aux points d'accÚs Ubiquiti d'utiliser WPA2-EAP.

Questions possibles

Q : Comment transmettre le profil/certificat à l'employé ?

R : Tous les certificats/profils sont stockés sur un FTP accessible via le web. J'ai configuré un réseau invité avec une restriction de vitesse et un accÚs uniquement à Internet, excepté pour le FTP.
L'authentification dure 2 jours, aprÚs quoi elle est réinitialisée et le client se retrouve sans Internet. Ainsi, quand un employé veut se connecter au WiFi, il se connecte d'abord au réseau invité, se rend sur le FTP, télécharge le certificat ou le profil dont il a besoin, les installe et ensuite peut se connecter au réseau d'entreprise.

Q : Pourquoi ne pas utiliser le schéma avec MSCHAPv2 ? Il est plus sécurisé !

R : D'une part, ce schĂ©ma fonctionne bien sur NPS (Windows Network Policy System), dans notre mise en Ɠuvre, il est nĂ©cessaire de configurer LDAP (FreeIpa) et de stocker les hachages de mots de passe sur le serveur. Il n'est pas souhaitable de faire des configurations supplĂ©mentaires, car cela peut entraĂźner divers problĂšmes de synchronisation des comptes. D'autre part, le hachage est en MD4, donc cela n'amĂ©liore pas beaucoup la sĂ©curitĂ©.

Q : Est-il possible d'autoriser les dispositifs par adresses MAC ?

R : NON, ce n'est pas sûr, un attaquant peut falsifier les adresses MAC, et de plus, l'authentification par adresses MAC n'est pas prise en charge sur de nombreux dispositifs.

Q : Pourquoi utiliser tous ces certificats ? On peut se connecter sans eux.

R : Les certificats sont utilisĂ©s pour authentifier le serveur. Cela signifie qu'un appareil vĂ©rifie, lors de la connexion, si le serveur est digne de confiance ou non. Si c'est le cas, l'authentification se poursuit ; sinon, la connexion est fermĂ©e. Il est possible de se connecter sans certificats, mais si un cybercriminel ou un voisin met en place un serveur RADIUS et un point d'accĂšs avec le mĂȘme nom que le nĂŽtre, il pourra facilement intercepter les identifiants de l'utilisateur (n'oublions pas qu'ils sont transmis en clair). En utilisant un certificat, l'ennemi ne verra dans ses journaux que nos faux noms d'utilisateur — invitĂ© ou client, ainsi qu'une erreur de type — Certificat CA Inconnu.

Encore un peu sur macOSHabituellement, la réinstallation de macOS se fait via internet. En mode de récupération, il faut connecter le Mac à un WiFi, et notre WiFi d'entreprise ainsi que le réseau invité ne fonctionneront pas ici. Personnellement, j'ai créé un autre réseau, classique avec WPA2-PSK, caché, uniquement pour des opérations techniques. Sinon, on peut aussi préparer à l'avance une clé USB bootable avec le systÚme. Mais si le Mac est post-2015, il faudra également trouver un adaptateur pour cette clé USB.)

Source : habr.com

Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS đŸ”„ Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster