Entreprise Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Entreprise Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Quelques exemples d'organisation du WiFi en entreprise ont déjà été décrits. Ici, je vais décrire comment j'ai mis en œuvre une solution similaire et les problèmes auxquels j'ai dû faire face lors de la connexion sur différents appareils. Nous utiliserons le LDAP existant avec les utilisateurs enregistrés, augmenterons FreeRadius et configurerons WPA2-Enterprise sur le contrôleur Ubnt. Tout semble simple. Voyons…

Un peu sur les méthodes EAP

Avant de poursuivre la tâche, nous devons décider quelle méthode d'authentification nous utiliserons dans notre solution.

De Wikipedia:

EAP est un cadre d'authentification souvent utilisé dans les réseaux sans fil et les connexions point à point. Le format a été décrit pour la première fois dans la RFC 3748 et mis à jour dans la RFC 5247.
EAP est utilisé pour sélectionner une méthode d'authentification, transmettre des clés et traiter ces clés avec des plug-ins appelés méthodes EAP. Il existe de nombreuses méthodes EAP, définies avec EAP lui-même et publiées par des fournisseurs individuels. EAP ne définit pas la couche liaison, il définit uniquement le format du message. Chaque protocole utilisant EAP possède son propre protocole d'encapsulation de messages EAP.

Les méthodes elles-mêmes :

  • LEAP est un protocole propriétaire développé par CISCO. Vulnérabilités trouvées. Il n'est actuellement pas recommandé d'utiliser
  • EAP-TLS est bien pris en charge par les fournisseurs de services sans fil. C'est un protocole sécurisé car il succède aux standards SSL. La configuration du client est assez compliquée. Vous avez besoin d'un certificat client en plus du mot de passe. Pris en charge sur de nombreux systèmes
  • EAP-TTLS - largement pris en charge sur de nombreux systèmes, offre une bonne sécurité en utilisant des certificats PKI uniquement sur le serveur d'authentification
  • EAP-MD5 est un autre standard ouvert. Offre une sécurité minimale. Vulnérable, ne prend pas en charge l'authentification mutuelle et la génération de clés
  • EAP-IKEv2 - basé sur Internet Key Exchange Protocol version 2. Fournit une authentification mutuelle et l'établissement de clés de session entre le client et le serveur.
  • PEAP est une solution commune de CISCO, Microsoft et RSA Security en tant que standard ouvert. Largement disponible en produits, offre une très bonne sécurité. Similaire à EAP-TTLS, nécessitant uniquement un certificat côté serveur
  • PEAPv0/EAP-MSCHAPv2 - après EAP-TLS, il s'agit du deuxième standard le plus utilisé dans le monde. Utilisé la relation client-serveur dans Microsoft, Cisco, Apple, Linux
  • PEAPv1/EAP-GTC – Créé par Cisco comme alternative à PEAPv0/EAP-MSCHAPv2. Ne protège en aucun cas les données d’authentification. Non pris en charge sur le système d'exploitation Windows
  • EAP-FAST est une technique développée par Cisco pour corriger les défauts du LEAP. Utilise les informations d'identification d'accès protégé (PAC). Complètement inachevé

Parmi toute cette diversité, le choix n’est toujours pas grand. La méthode d'authentification était requise : bonne sécurité, prise en charge sur tous les appareils (Windows 10, macOS, Linux, Android, iOS) et, en fait, plus c'est simple, mieux c'est. Le choix s'est donc porté sur EAP-TTLS en conjonction avec le protocole PAP.
La question peut se poser : Pourquoi utiliser le PAP ? parce qu'il transmet des mots de passe en clair ?

Oui c'est vrai. La communication entre FreeRadius et FreeIPA s'effectuera de cette manière. En mode débogage, vous pouvez suivre la manière dont le nom d'utilisateur et le mot de passe sont envoyés. Oui, et laissez-les partir, vous seul avez accès au serveur FreeRadius.

Vous pouvez en savoir plus sur le travail de l'EAP-TTLS ici

GratuitRADIUS

FreeRadius sera lancé sur CentOS 7.6. Il n'y a rien de compliqué ici, on le règle de la manière habituelle.

yum install freeradius freeradius-utils freeradius-ldap -y

La version 3.0.13 est installée à partir des packages. Ce dernier peut être pris 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-vous sur le serveur en mode débogage

freeradius -X

Et effectuez un test de connexion depuis localhost

radtest steve testing 127.0.0.1 1812 testing123

J'ai une réponse Reçu l'ID d'acceptation d'accès 115 de 127.0.0.1:1812 à 127.0.0.1:56081 longueur 20, ça veut dire que tout va bien. Poursuivre.

Nous connectons le module ldap.

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

Et nous le changerons tout de suite. Nous avons besoin de FreeRadius pour pouvoir accéder à FreeIPA

mods activés/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émarrez le serveur Radius et vérifiez la synchronisation des utilisateurs LDAP :

radtest user_ldap password_ldap localhost 1812 testing123

Modification d'eap dans mods activés/eap
Ici, nous ajoutons deux instances d'eap. Ils ne différeront que par les certificats et les clés. Ci-dessous, j'expliquerai pourquoi il en est ainsi.

mods activés/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"
           }
}

Modification ultérieure activé par le site/par défaut. Les sections autoriser et authentifier sont intéressantes.

activé par le site/par défaut

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 autoriser, nous supprimons tous les modules dont nous n'avons pas besoin. Nous ne laissons que LDAP. Ajoutez la vérification du client par nom d'utilisateur. C'est pourquoi nous avons ajouté deux instances d'eap ci-dessus.

PAE multipleLe fait est que lors de la connexion de certains appareils, nous utiliserons des certificats système et spécifierons le domaine. Nous disposons d'un certificat et d'une clé provenant d'une autorité de certification de confiance. Personnellement, à mon avis, une telle procédure de connexion est plus simple que de lancer un certificat auto-signé sur chaque appareil. Mais même sans certificats auto-signés, cela n’a toujours pas fonctionné. Les appareils Samsung et les versions Android =< 6 ne peuvent pas utiliser de certificats système. Par conséquent, nous créons pour eux une instance distincte d’eap-guest avec des certificats auto-signés. Pour tous les autres appareils, nous utiliserons le client eap avec un certificat de confiance. Le nom d'utilisateur est déterminé par le champ Anonyme lorsque l'appareil est connecté. Seules 3 valeurs sont autorisées : Invité, Client et un champ vide. Tout le reste est jeté. Il sera configuré chez les politiciens. Je donnerai un exemple un peu plus tard.

Modifions les sections autoriser et authentifier dans compatible avec le site/tunnel intérieur

compatible avec le site/tunnel intérieur

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, vous devez spécifier dans les politiques quels noms peuvent être utilisés pour la connexion anonyme. Édition politique.d/filtre.

Vous devez trouver des lignes similaires à celle-ci :

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

Et ci-dessous, dans elsif, ajoutez les valeurs souhaitées :

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

Maintenant, nous devons nous déplacer vers le répertoire certs. Ici, vous devez mettre la clé et le certificat d'une autorité de certification de confiance, que nous avons déjà et dont nous avons besoin pour générer des certificats auto-signés pour eap-guest.

Changer 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 = State
localityNmae = City
organizationName = NONAME
emailAddress = [email protected]
commonName = "CA FreeRadius"

On écrit les mêmes valeurs dans le fichier serveur.cnf. Nous changeons seulement
Nom commun:

serveur.cnf


...
default_days = 3650
default_md = sha256
...
input_password = blablabla
output_password = blablabla
...
countryName = RU
stateOrProvinceNmae = State
localityNmae = City
organizationName = NONAME
emailAddress = [email protected]
commonName = "Server Certificate FreeRadius"

Créer:

make

Prêt. Reçu serveur.crt и clé.serveur nous nous sommes déjà enregistrés ci-dessus dans eap-guest.

Et enfin, ajoutons nos points d'accès au fichier client.conf. J'en ai 7. Afin de ne pas ajouter chaque point séparément, nous écrirons uniquement le réseau dans lequel ils se trouvent (mes points d'accès sont dans un VLAN séparé).

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

Contrôleur d'ubiquiti

Nous élevons un réseau séparé sur le contrôleur. Que ce soit 192.168.2.0/24
Allez dans paramètres -> profil. Nous en créons un nouveau :

Entreprise Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Nous écrivons l'adresse et le port du serveur radius et le mot de passe qui a été écrit dans le fichier clients.conf:

Entreprise Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Créez un nouveau nom de réseau sans fil. Sélectionnez WPA-EAP (Enterprise) comme méthode d'authentification et spécifiez le profil de rayon créé :

Entreprise Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Nous sauvegardons tout, postulons et passons à autre chose.

Configuration des clients

Commençons par le plus difficile !

Windows 10

La difficulté vient du fait que Windows ne sait pas encore se connecter au WiFi d'entreprise via un domaine. Par conséquent, nous devons télécharger manuellement notre certificat dans le magasin de certificats de confiance. Ici, vous pouvez utiliser à la fois l'auto-signé et celui de l'autorité de certification. J'utiliserai le deuxième.

Ensuite, vous devez créer une nouvelle connexion. Pour cela, rendez-vous dans les paramètres réseau et Internet -> Centre Réseau et partage -> Créer et configurer une nouvelle connexion ou un nouveau réseau :

Entreprise Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Entreprise Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Entreprise Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Entrez manuellement le nom du réseau et modifiez le type de sécurité. Après avoir cliqué sur modifier les paramètres de connexion et dans l'onglet Sécurité, sélectionnez l'authentification réseau - EAP-TTLS.

Entreprise Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Entreprise Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Entreprise Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

On rentre dans les paramètres, on prescrit la confidentialité de l'authentification - client. En tant qu'autorité de certification de confiance, sélectionnez le certificat que nous avons ajouté, cochez la case "Ne pas émettre d'invitation à l'utilisateur si le serveur ne peut pas être autorisé" et sélectionnez la méthode d'authentification - mot de passe non crypté (PAP).

Entreprise Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Ensuite, allez dans les paramètres avancés, cochez "Spécifier le mode d'authentification". Sélectionnez "Authentification utilisateur" et cliquez sur enregistrer les informations d'identification. Ici, vous devrez entrer username_ldap et password_ldap

Entreprise Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Entreprise Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Entreprise Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Nous sauvegardons tout, postulons, fermons. Vous pouvez vous connecter à un nouveau réseau.

Linux/Unix

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

Tout d’abord, téléchargeons notre certificat. Je n'ai pas trouvé sous Linux s'il est possible d'utiliser des certificats système et s'il existe un tel magasin.

Connectons-nous au domaine. Par conséquent, nous avons besoin d’un certificat de l’autorité de certification auprès de laquelle notre certificat a été acheté.

Toutes les connexions sont effectuées dans une seule fenêtre. Sélection de notre réseau :

Entreprise Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

client anonyme
domaine - le domaine pour lequel le certificat est délivré

Android

non-Samsung

A partir de la version 7, lors de la connexion WiFi, vous pouvez utiliser les certificats système en précisant uniquement le domaine :

Entreprise Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

domaine - le domaine pour lequel le certificat est délivré
client anonyme

Samsung

Comme je l'ai écrit ci-dessus, les appareils Samsung ne savent pas comment utiliser les certificats système lors de la connexion au WiFi et n'ont pas la possibilité de se connecter via un domaine. Il faut donc ajouter manuellement le certificat racine de l'autorité de certification (ca.pem, nous le prenons sur le serveur Radius). C’est ici que l’auto-signé sera utilisé.

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

Installation du certificatEntreprise Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Entreprise Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Entreprise Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Entreprise Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Parallèlement, vous devrez définir le schéma de déverrouillage de l'écran, le code PIN ou le mot de passe, s'il n'est pas déjà défini :

Entreprise Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Entreprise Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

J'ai montré une version compliquée de l'installation d'un certificat. Sur la plupart des appareils, cliquez simplement sur le certificat téléchargé.

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

Entreprise Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

certificat - indiquez celui qui a été installé
utilisateur anonyme - invité

macOS

Les appareils Apple prêts à l'emploi ne peuvent se connecter qu'à EAP-TLS, mais vous devez toujours leur envoyer un certificat. Pour spécifier une méthode de connexion différente, vous devez utiliser Apple Configurator 2. En conséquence, vous devez d'abord le télécharger sur votre Mac, créer un nouveau profil et ajouter tous les paramètres WiFi nécessaires.

Apple ConfiguratorEntreprise Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Entreprise Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Entrez le nom de votre réseau ici
Type de sécurité – WPA2 Entreprise
Types EAP acceptés - TTLS
Nom d'utilisateur et mot de passe - laisser vide
Authentification interne - PAP
Client d'identité externe

Onglet Confiance. Ici nous spécifions notre domaine

Tous. Le profil peut être enregistré, signé et distribué aux appareils

Une fois le profil prêt, vous devez le télécharger sur le coquelicot et l'installer. Pendant le processus d'installation, vous devrez spécifier le usernmae_ldap et le password_ldap de l'utilisateur :

Entreprise Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Entreprise Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Entreprise Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

iOS

Le processus est similaire à macOS. Vous devez utiliser un profil (vous pouvez utiliser le même que pour macOS. Comment créer un profil dans Apple Configurator, voir ci-dessus).

Téléchargez le profil, installez, saisissez les informations d'identification, connectez-vous :

Entreprise Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Entreprise Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Entreprise Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Entreprise Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Entreprise Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Entreprise Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

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

Questions possibles

В: comment transférer un profil/certificat à un salarié ?

О: Je stocke tous les certificats/profils sur FTP avec accès Web. Création d'un réseau invité avec une limite de vitesse et un accès uniquement à Internet, à l'exception de FTP.
L'authentification dure 2 jours, après quoi elle est réinitialisée et le client se retrouve sans Internet. Que. lorsqu'un employé souhaite se connecter au WiFi, il se connecte d'abord au réseau invité, accède au FTP, télécharge le certificat ou le profil dont il a besoin, l'installe, puis peut se connecter au réseau d'entreprise.

В: pourquoi ne pas utiliser le schéma avec MSCHAPv2 ? Elle est plus en sécurité !

О: Premièrement, un tel schéma fonctionne bien sur NPS (Windows Network Policy System), dans notre implémentation, il est nécessaire de configurer en plus LDAP (FreeIpa) et de stocker les hachages de mots de passe sur le serveur. Ajouter. il n'est pas conseillé de faire des réglages, car. cela peut entraîner divers problèmes de synchronisation des ultrasons. Deuxièmement, le hachage est MD4, il n'ajoute donc pas beaucoup de sécurité.

В: est-il possible d'autoriser des appareils par adresses MAC ?

О: NON, ce n'est pas sûr, un attaquant peut modifier les adresses MAC, et plus encore, l'autorisation par adresses MAC n'est pas prise en charge sur de nombreux appareils

В: à quoi servent généralement tous ces certificats ? peux-tu nous rejoindre sans eux ?

О: les certificats sont utilisés pour autoriser le serveur. Ceux. lors de la connexion, l'appareil vérifie s'il s'agit d'un serveur fiable ou non. Si tel est le cas, l'authentification continue, sinon la connexion est fermée. Vous pouvez vous connecter sans certificats, mais si un attaquant ou un voisin installe chez vous un serveur radius et un point d'accès du même nom que le nôtre, il pourra facilement intercepter les identifiants de l'utilisateur (n'oubliez pas qu'ils sont transmis en texte clair) . Et lorsqu'un certificat est utilisé, l'ennemi ne verra dans ses journaux que notre nom d'utilisateur fictif - invité ou client et une erreur de type - Certificat CA inconnu

un peu plus sur macOSGénéralement sur macOS, la réinstallation du système se fait via Internet. En mode de récupération, le Mac doit être connecté au WiFi, et ni notre WiFi d'entreprise ni le réseau invité ne fonctionneront ici. Personnellement, j'ai évoqué un autre réseau, l'habituel WPA2-PSK, caché, uniquement pour des opérations techniques. Ou vous pouvez toujours créer à l'avance une clé USB amorçable avec le système. Mais si le coquelicot est postérieur à 2015, il faudra quand même trouver un adaptateur pour cette clé USB)

Source: habr.com

Ajouter un commentaire