
Quelques exemples de WiFi d'entreprise ont déjà été décrits. Je décrirai ici 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 établis, augmenterons FreeRadius et configurerons WPA2-Enterprise sur le contrôleur Ubnt. Il semble que tout soit simple. Voyons voir ...
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 d'abord été décrit dans la RFC 3748 et mis à jour dans la RFC 5247.
EAP est utilisé pour sélectionner une méthode d'authentification, transférer des clés et traiter ces clés avec des plug-ins appelés méthodes EAP. Il existe de nombreuses méthodes EAP, à la fois définies avec EAP lui-même et celles publiées par les fabricants individuels. EAP ne définit pas la couche de liaison, il définit uniquement le format du message. Chaque protocole utilisant EAP a son propre protocole pour encapsuler les messages EAP.
Les méthodes elles-mêmes:- LEAP est un protocole propriétaire développé par CISCO. Vulnérabilités trouvées. Actuellement non recommandé
- EAP-TLS est bien pris en charge par les fournisseurs de services sans fil. Il s'agit d'un protocole sécurisé car il succède aux normes SSL. La configuration du client est assez compliquée. 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 le protocole d'échange de clés Internet version 2. Fournit l'authentification mutuelle et l'établissement de clés de session entre le client et le serveur
- PEAP est une solution conjointe CISCO, Microsoft et RSA Security en tant que norme ouverte. Largement disponible dans les produits, offre une très bonne sécurité. Similaire à EAP-TTLS, ne nécessitant qu'un certificat côté serveur
- PEAPv0 / EAP-MSCHAPv2 - après EAP-TLS, c'est la deuxième norme largement utilisée dans le monde. Relation client-serveur utilisée 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 sous Windows OS
- EAP-FAST est une méthode développée par Cisco pour corriger les carences de LEAP. Utilise les informations d'identification d'accès protégé (PAC). Pas complètement développé
De 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. Par conséquent, le choix s'est porté sur EAP-TTLS en conjonction avec le protocole PAP.
Peut-être que la question se pose - Pourquoi utiliser PAP? parce qu'il transfère les mots de passe en texte clair?
Oui, c'est vrai. La communication entre FreeRadius et FreeIPA se fera de cette manière. En mode débogage, vous pouvez suivre la façon 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.
En savoir plus sur le travail d'EAP-TTLS
ici.
Freeradius
Nous allons augmenter FreeRadius sur CentOS 7.6. Rien de compliqué ici, réglé de la manière habituelle.
yum install freeradius freeradius-utils freeradius-ldap -y
À partir des packages, la version 3.0.13 est installée. Cette dernière peut être prise 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"
Exécuter sur le serveur en mode débogage
freeradius -X
Et faites une connexion de test avec localhost
radtest steve testing 127.0.0.1 1812 testing123
Vous avez reçu une réponse
Reçu Access-Accept Id 115 de 127.0.0.1:1812 à 127.0.0.1►6081 longueur 20 , alors tout va bien. Allez-y.
Nous connectons le module
LDAP .
ln -s /etc/raddb/mods-available/ldap /etc/raddb/mods-enabled/ldap
Et changez-le immédiatement. Nous avons besoin de FreeRadius pour accéder à FreeIPA
compatible avec les mods / 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}})" } ...
Nous redémarrons le serveur radius et vérifions la synchronisation des utilisateurs LDAP:
radtest user_ldap password_ldap localhost 1812 testing123
Modification d'eap dans les
mods-enabled / eapAjoutez deux instances de tas ici. Ils ne différeront que par les certificats et les clés. Je vais expliquer juste ci-dessous pourquoi
compatible avec les mods / 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, modifiez le
site activé / par défaut . Intéressé par les sections autoriser et authentifier.
site activé / 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. Ne laissez que LDAP. Nous ajoutons la vérification du client par nom d'utilisateur. C’est pourquoi nous avons ajouté les deux instances ci-dessus.
Multi eapLe fait est qu'en connectant certains appareils, nous utiliserons des certificats système et indiquerons le domaine. Nous avons un certificat et une clé d'une autorité de certification de confiance. Personnellement, à mon avis, une telle procédure de connexion est plus facile 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 savent pas comment utiliser les certificats système. Par conséquent, pour eux, nous créons une instance distincte d'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 lorsque l'appareil est connecté. Seules 3 valeurs sont autorisées: Invité, Client et champ vide. Le reste est jeté. Ceci est configuré dans les politiques. Je donnerai un exemple plus tard
Modifier les sections d'autorisation et d'authentification dans le
tunnel activé par le
site / tunnel interneactivé par le site / tunnel interne 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. Modifiez
policy.d / filter .
Vous devez trouver des lignes similaires Ă ceci:
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 nécessaires:
elsif (&outer.request:User-Name !~ /^(guest|client|@)/) { update request { Module-Failure-Message = "User-Name is not anonymized" } reject }
Maintenant, nous devons passer au 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 devons générer des certificats auto-signés pour eap-guest.
Modifiez 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 = admin@admin.ru commonName = "CA FreeRadius"
Les mêmes valeurs sont spécifiées dans le fichier
server.cnf . Nous changeons seulement
commonName :
server.cnf ... default_days = 3650 default_md = sha256 ... input_password = blablabla output_password = blablabla ... countryName = RU stateOrProvinceNmae = State localityNmae = City organizationName = NONAME emailAddress = admin@admin.ru commonName = "Server Certificate FreeRadius"
Nous créons:
make
C'est fait. Le
server.crt et le
server.key résultants sont déjà enregistrés ci-dessus dans eap-guest.
Enfin, ajoutez nos points d'accès au fichier
client.conf . Je les ai 7. Afin de ne pas ajouter chaque point séparément, nous n'enregistrerons que 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 Ubiquiti
Sur le contrôleur, nous élevons un réseau séparé. Que ce soit 192.168.2.0/24
Accédez aux paramètres -> profil. Créez-en un nouveau:

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

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

Nous économisons, appliquons et passons.
Configuration client
Commençons par les plus difficiles!
Windows 10
La complexité se résume au fait que Windows n'est toujours pas en mesure de se connecter au WiFi d'entreprise par domaine. Par conséquent, vous devez télécharger manuellement notre certificat dans le magasin de clés de confiance. Ici, vous pouvez utiliser à la fois l'auto-signature et une autorité de certification. J'utiliserai le second.
Ensuite, vous devez créer une nouvelle connexion. Pour ce faire, accédez aux paramètres réseau et Internet -> Centre Réseau et partage -> Créer et configurer une nouvelle connexion ou un nouveau réseau:



Enregistrez 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 la section Sécurité, nous sélectionnons l'authentification réseau - EAP-TTLS.



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

Ensuite, accédez aux paramètres supplémentaires, cochez "Spécifier le mode d'authentification". Sélectionnez l'élément "Authentification utilisateur" et cliquez sur
enregistrer les informations d'identification . Ici, vous devrez entrer username_ldap et password_ldap



Nous sauvegardons, appliquons, fermons tout. Vous pouvez vous connecter au nouveau réseau.
Linux
J'ai testé sur Ubuntu 18.04, 18.10, Fedora 29, 30.
Pour commencer, téléchargez un certificat. Je n'ai pas trouvé sous Linux s'il était possible d'utiliser des certificats système et s'il y avait un tel stockage du tout.
Nous nous connecterons par domaine. Par conséquent, vous avez besoin d'un certificat du centre de certification auprès duquel notre certificat a été acheté.
Toute connexion se fait dans une seule fenêtre. Choisissez notre réseau:
anonyme - client
domaine - domaine pour lequel le certificat est émis
Android
non-samsung
À partir de la version 7, lors de la connexion WiFi, vous pouvez utiliser des certificats système en spécifiant uniquement le domaine:
domaine - domaine pour lequel le certificat est émis
anonyme - client
Samsung
Comme déjà mentionné ci-dessus, les appareils Samsung ne savent pas comment utiliser les certificats système lors de la connexion WiFi et ils n'ont pas la possibilité de se connecter par domaine. Par conséquent, vous devez ajouter manuellement le certificat racine de l'autorité de certification (ca.pem, nous le prenons sur le serveur Radius). C'est là qu'il utilisera l'auto-signature.
Téléchargez le certificat sur votre appareil et installez-le.
Installation de certificat Une fois le certificat installé, vous pouvez procéder à la connexion:
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 déposer 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 le coquelicot, créer un nouveau profil et ajouter tous les paramètres WiFi nécessaires.
Configurateur Apple
Ici nous indiquons le nom de votre réseau
Type de sécurité - WPA2 Enterprise
Types d'EAP acceptés - TTLS
Nom d'utilisateur et mot de passe - laissez vide
Authentification intérieure - PAP
Identité externe - client
Onglet Trust. Ici nous indiquons notre domaineC’est tout. Un profil peut être enregistré, signé et distribué aux appareils
Une fois le profil prêt, il doit être téléchargé sur le pavot et installé. Pendant le processus d'installation, vous devrez spécifier l'utilisateur usernmae_ldap et password_ldap:



iOS
Le processus est similaire à macOS. Vous devez utiliser un profil (vous pouvez faire la même chose que pour macOS. Comment créer un profil dans Apple Configurator, voir ci-dessus).
Téléchargez le profil, installez, entrez les informations d'identification, connectez-vous:






C’est tout. Nous avons installé un serveur Radius, l'avons synchronisé avec FreeIPA et avons dit aux points d'accès Ubiquiti d'utiliser WPA2-EAP.
Questions possibles
Q: comment transférer le profil / certificat à l'employé?
R: Tous les certificats / profils que je stocke sur ftp avec accès via le web. A augmenté un réseau invité avec une limite de vitesse et un accès Internet uniquement, sauf pour ftp.
L'authentification dure 2 jours, après quoi elle est réinitialisée et le client se retrouve sans Internet. T.O. Lorsqu'un employé souhaite se connecter au WiFi, il se connecte d'abord au réseau invité, visite FTP, télécharge le certificat ou le profil dont il a besoin, les installe, puis peut se connecter au réseau d'entreprise.
Q: pourquoi ne pas utiliser un schéma avec MSCHAPv2? elle est plus sûre!
R: 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 mot de passe sur le serveur. Ajouter. les réglages ne sont pas recommandés, car cela peut entraîner divers problèmes de synchronisation des ultrasons. Deuxièmement, le hachage est MD4, donc cela n'augmente pas vraiment la sécurité.
Q: est- il possible d'autoriser des appareils par mac-adresses?
R: NON, ce n'est pas sûr, un attaquant peut usurper des adresses de pavot, et en outre l'autorisation pour les adresses de pavot n'est pas prise en charge sur de nombreux appareils
Q: pourquoi utiliser tous ces certificats? vous pouvez vous connecter sans eux
R: Les certificats sont utilisés pour autoriser le serveur. C'est-à -dire l'appareil, une fois connecté, vérifie si c'est le serveur qui peut être approuvé ou non. Si tel est le cas, l'authentification va plus loin, sinon, la connexion est fermée. Vous pouvez vous connecter sans certificats, mais si un attaquant ou un voisin récupère un serveur radius et un point d'accès du même nom que le nôtre, il peut facilement intercepter les informations d'identification de l'utilisateur (n'oubliez pas qu'elles sont transmises en texte clair). Et lorsque le certificat est utilisé, l'ennemi ne verra dans nos journaux que notre nom d'utilisateur fictif - invité ou client et une erreur de type - Certificat CA inconnu
en savoir plus sur macOSGénéralement, sur macOS, la réinstallation du système se fait via Internet. En mode de récupération, le coquelicot doit être connecté au WiFi, et ni notre WiFi d'entreprise ni le réseau invité ne fonctionneront ici. Personnellement, j'ai choisi un autre réseau, le WPA2-PSK habituel, caché, uniquement pour les opérations techniques. Sinon, vous pouvez créer une clé USB bootable avec le système à l'avance. Mais si le coquelicot après 2015, vous aurez toujours besoin de trouver un adaptateur pour ce lecteur flash)