
Es wurden bereits einige Beispiele fĂŒr die Organisation von Unternehmens-WiFi beschrieben. Hier werde ich erlĂ€utern, wie ich eine solche Lösung umgesetzt habe und welche Probleme beim Anschluss an unterschiedliche GerĂ€te aufgetreten sind. Wir werden das vorhandene LDAP mit eingerichteten Benutzern verwenden, FreeRadius hochfahren und WPA2-Enterprise auf dem Ubnt-Controller einstellen. Scheint einfach zu sein. Mal sehenâŠ
Einige Methoden von EAP
Bevor wir mit der Aufgabenstellung beginnen, mĂŒssen wir klĂ€ren, welche Authentifizierungsmethode wir in unserer Lösung verwenden möchten.
Aus Wikipedia:
EAP ist ein Authentifizierungsframework, das hÀufig in drahtlosen Netzwerken und Punkt-zu-Punkt-Verbindungen verwendet wird. Das Format wurde erstmals in RFC 3748 beschrieben und in RFC 5247 aktualisiert.
EAP wird verwendet, um die Authentifizierungsmethode auszuwĂ€hlen, SchlĂŒssel zu ĂŒbertragen und diese SchlĂŒssel zu verarbeiten, die von als EAP-Methoden bezeichneten Modulen bereitgestellt werden. Es gibt zahlreiche EAP-Methoden, sowohl solche, die zusammen mit EAP definiert wurden, als auch von einzelnen Herstellern herausgegeben. EAP definiert kein Datenlink-Protokoll; es definiert nur das Nachrichtenformat. Jedes Protokoll, das EAP verwendet, hat sein eigenes Protokoll zur Kapselung von EAP-Nachrichten.
Die Methoden selbst:
- LEAP ist ein proprietÀres Protokoll, das von CISCO entwickelt wurde. Es wurden Schwachstellen festgestellt. Derzeit wird die Verwendung nicht empfohlen.
- EAP-TLS wird von vielen Anbietern drahtloser Verbindungen gut unterstĂŒtzt. Es handelt sich um ein sicheres Protokoll, da es der Nachfolger der SSL-Standards ist. Die Clientkonfiguration ist ziemlich komplex. Ein Client-Zertifikat ist zusĂ€tzlich zum Passwort erforderlich. Es wird in vielen Systemen unterstĂŒtzt.
- EAP-TTLS wird in vielen Systemen weitgehend unterstĂŒtzt und bietet eine gute Sicherheit, indem es PKI-Zertifikate nur auf dem Authentifizierungsserver verwendet.
- EAP-MD5 ist ein weiterer offener Standard. Er bietet minimale Sicherheit. Er ist anfĂ€llig, unterstĂŒtzt keine gegenseitige Authentifizierung und SchlĂŒsselgenerierung.
- EAP-IKEv2 basiert auf dem Internet Key Exchange Protocol Version 2. Es bietet eine gegenseitige Authentifizierung und die Einrichtung eines SitzungsschlĂŒssels zwischen Client und Server.
- PEAP ist eine gemeinsame Lösung von CISCO, Microsoft und RSA Security als offener Standard. Sie ist in vielen Produkten weit verbreitet und bietet eine sehr gute Sicherheit. Ăhnlich wie EAP-TTLS erfordert sie nur ein Zertifikat auf der Serverseite.
- PEAPv0/EAP-MSCHAPv2 â nach EAP-TLS ist dies der weltweit zweitmeistgenutzte Standard. Es verwendet eine Client-Server-Beziehung in Microsoft, Cisco, Apple, Linux.
- PEAPv1/EAP-GTC â von Cisco als Alternative zu PEAPv0/EAP-MSCHAPv2 entwickelt. SchĂŒtzt die Anmeldedaten in keinem Fall. Wird in Windows OS nicht unterstĂŒtzt.
- EAP-FAST â ein von Cisco entwickeltes Verfahren zur Behebung der MĂ€ngel von LEAP. Verwendet Protected Access Credential (PAC). VollstĂ€ndig unausgereift.
Aus all dieser Vielfalt ist die Auswahl letztlich nicht groĂ. Vom Authentifizierungsverfahren wurde gefordert: gute Sicherheit, UnterstĂŒtzung auf allen GerĂ€ten (Windows 10, macOS, Linux, Android, iOS) und je einfacher, desto besser. Daher fiel die Wahl auf EAP-TTLS in Verbindung mit dem PAP-Protokoll.
Es könnte die Frage auftauchen â Warum ĂŒberhaupt PAP nutzen? ĂbertrĂ€gt es nicht Passwörter im Klartext?
Ja, das ist richtig. Die Kommunikation zwischen FreeRadius und FreeIPA wird genau so ablaufen. Im Debug-Modus kann man verfolgen, wie der Benutzername und das Passwort gesendet werden. Und selbst wenn sie gesendet werden, haben nur Sie Zugriff auf den FreeRadius-Server.
Mehr Informationen zur Funktionsweise von EAP-TTLS finden Sie hier.
FreeRADIUS
Wir werden FreeRadius auf CentOS 7.6 installieren. Hier gibt es nichts Kompliziertes, wir installieren es auf die ĂŒbliche Weise.
yum install freeradius freeradius-utils freeradius-ldap -yDie Version 3.0.13 wird aus den Paketen installiert. Die neueste Version finden Sie unter
Nach dieser Installation funktioniert FreeRadius bereits. Sie können die Zeile in /etc/raddb/users auskommentieren.
steve Cleartext-Password := "testing"Starten Sie den Server im Debug-Modus.
freeradius -XUnd fĂŒhren Sie einen Testanschluss von localhost durch.
radtest steve testing 127.0.0.1 1812 testing123Wir erhielten die Antwort. Received Access-Accept Id 115 from 127.0.0.1:1812 to 127.0.0.1:56081 length 20., also alles gut. Machen wir weiter.
Wir binden das Modul ein. ldap.
ln -s /etc/raddb/mods-available/ldap /etc/raddb/mods-enabled/ldapUnd Àndern es direkt. FreeRadius muss auf FreeIPA zugreifen können.
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}})"
}
...Wir starten den Radius-Server neu und ĂŒberprĂŒfen die Synchronisation der LDAP-Benutzer:
radtest user_ldap password_ldap localhost 1812 testing123 Wir bearbeiten eap in mods-enabled/eap
Hier fĂŒgen wir zwei Instanzen von eap hinzu. Sie unterscheiden sich nur in den Zertifikaten und SchlĂŒsseln. Ich erklĂ€re weiter unten, warum genau so.
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"
}
}Bearbeiten wir weiter site-enabled/default. Es interessieren uns die Abschnitte authorize und 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
}Im Abschnitt authorize entfernen wir alle Module, die wir nicht benötigen. Wir lassen nur ldap. Wir fĂŒgen eine ĂberprĂŒfung des Clients anhand des Benutzernamens hinzu. Genau dafĂŒr haben wir oben zwei Instanzen von eap hinzugefĂŒgt.
Multi EAPTatsĂ€chlich verwenden wir beim Anschluss bestimmter GerĂ€te Systemzertifikate und geben die Domain an. Wir haben ein Zertifikat und einen SchlĂŒssel von einer vertrauenswĂŒrdigen Zertifizierungsstelle. Persönlich finde ich, dass diese Anmeldeprozedur einfacher ist, als auf jedes GerĂ€t ein selbstsigniertes Zertifikat zu legen. Aber auch ohne selbstsignierte Zertifikate kommen wir nicht ganz aus. Samsung-GerĂ€te und Android-Versionen < 6 können keine Systemzertifikate benutzen. Daher erstellen wir fĂŒr diese GerĂ€te eine separate Instanz von eap-guest mit selbstsignierten Zertifikaten. FĂŒr alle anderen GerĂ€te verwenden wir eap-client mit einem vertrauenswĂŒrdigen Zertifikat. User-Name wird im Feld Anonymous bei der GerĂ€teverbindung bestimmt. Es sind nur 3 Werte erlaubt: Guest, Client und ein leeres Feld. Alles andere wird verworfen. Dies wird in den Richtlinien konfiguriert. Ein Beispiel gebe ich spĂ€ter.
Wir bearbeiten die Abschnitte authorize und authenticate in 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
}Als NĂ€chstes mĂŒssen wir in den Richtlinien festlegen, welche Namen fĂŒr den anonymen Zugang verwendet werden können. Wir bearbeiten policy.d/filter.
Wir mĂŒssen Zeilen finden, die so aussehen:
if (&outer.request:User-Name !~ /^(anon|@)/) {
update request {
Module-Failure-Message = "User-Name ist nicht anonymisiert"
}
reject
}Und unten in elsif die benötigten Werte hinzufĂŒgen:
elsif (&outer.request:User-Name !~ /^(guest|client|@)/) {
update request {
Module-Failure-Message = "User-Name ist nicht anonymisiert"
}
reject
}Jetzt mĂŒssen wir in das Verzeichnis wechseln certs. Hier mĂŒssen der SchlĂŒssel und das Zertifikat von der vertrauenswĂŒrdigen Zertifizierungsstelle abgelegt werden, die wir bereits haben, und es mĂŒssen selbstsignierte Zertifikate fĂŒr eap-guest generiert werden.
Ăndern der Parameter in der Datei ca.cnf.
ca.cnf
...
default_days = 3650
default_md = sha256
...
input_password = blablabla
output_password = blablabla
...
countryName = RU
stateOrProvinceNmae = Bundesland
localityNmae = Stadt
organizationName = NONAME
emailAddress = admin@admin.ru
commonName = "CA FreeRadius"Die gleichen Werte tragen wir in die Datei ein server.cnf. Ăndern wir nur
commonName:
server.cnf
...
default_days = 3650
default_md = sha256
...
input_password = blablabla
output_password = blablabla
...
countryName = RU
stateOrProvinceNmae = Bundesland
localityNmae = Stadt
organizationName = NONAME
emailAddress = admin@admin.ru
commonName = "Server Zertifikat FreeRadius"Erstellen:
makeFertig. Die erhaltenen server.crt und server.key sind bereits oben in eap-guest eingetragen.
Und schlieĂlich fĂŒgen wir unsere Zugangspunkte in die Datei ein client.conf. Ich habe 7 davon. Um nicht jeden Zugangspunkt einzeln hinzuzufĂŒgen, tragen wir nur das Netzwerk ein, in dem sie sich befinden (meine Zugangspunkte befinden sich in einem separaten VLAN).
client APs {
ipaddr = 192.168.100.0/24
password = password_AP
}Ubiquiti Controller
Wir erstellen ein separates Netzwerk auf dem Controller. Lassen Sie es 192.168.2.0/24 sein.
Gehen Sie zu den Einstellungen -> Profil. Erstellen Sie ein neues:

Tragen Sie die Adresse und den Port des Radius-Servers sowie das Passwort ein, das wir in der Datei festgelegt haben. clients.conf:

Erstellen Sie einen neuen Namen fĂŒr das drahtlose Netzwerk. WĂ€hlen Sie WPA-EAP (Enterprise) als Authentifizierungsmethode aus und geben Sie das erstellte Radius-Profil an:

Alles speichern, anwenden und weitermachen.
Klienteneinstellungen
Beginnen wir mit dem schwierigsten!
Windows 10
Die Schwierigkeit besteht darin, dass Windows bisher nicht in der Lage ist, sich ĂŒber die Domain mit einem Unternehmens-WiFi zu verbinden. Daher mĂŒssen wir unser Zertifikat manuell im Trusted Certificate Store ablegen. Hier können sowohl selbstsignierte als auch von einer Zertifizierungsstelle stammende Zertifikate verwendet werden. Ich werde das zweite verwenden.
Als nĂ€chstes mĂŒssen Sie eine neue Verbindung erstellen. Gehen Sie dazu zu Netzwerk- und Interneteinstellungen -> Netzwerk- und Freigabecenter -> Neue Verbindung oder neues Netzwerk erstellen und konfigurieren:



Manuell den Netzwerknamen eingeben und den Sicherheitstyp Ă€ndern. Danach klicken wir auf Verbindungseinstellungen Ă€ndern und wĂ€hlen im Tab Sicherheit die Netzwerkauthentifizierung â EAP-TTLS.



Gehen Sie zu den Einstellungen, geben Sie die Vertraulichkeitsauthentifizierung ein â client. WĂ€hlen Sie als vertrauenswĂŒrdige Zertifizierungsstelle unser hinzugefĂŒgtes Zertifikat aus, aktivieren Sie das KontrollkĂ€stchen âBenutzer nicht um Erlaubnis bitten, wenn die Autorisierung des Servers fehlschlĂ€gtâ und wĂ€hlen Sie als Authentifizierungsmethode â unverschlĂŒsseltes Passwort (PAP).

Gehe zu den erweiterten Einstellungen, aktiviere die Option âAuthentifizierungsmodus angebenâ. WĂ€hle die Option âBenutzerauthentifizierungâ und klicke auf Anmeldeinformationen speichern. Hier muss der username_ldap und password_ldap eingegeben werden



Alles speichern, anwenden, und schlieĂen. Man kann sich mit dem neuen Netzwerk verbinden.
Linux
Ich habe es auf Ubuntu 18.04, 18.10, Fedora 29, 30 getestet.
ZunĂ€chst laden wir das Zertifikat herunter. Ich habe in Linux nicht gefunden, ob es möglich ist, die Systemzertifikate zu verwenden und ob es dort ĂŒberhaupt ein solches Speicher gibt.
Wir werden uns ĂŒber die Domain verbinden. Daher benötigen wir das Zertifikat der Zertifizierungsstelle, von der unser Zertifikat erworben wurde.
Die gesamte Verbindung erfolgt in einem Fenster. WĂ€hlen Sie unser Netzwerk aus:

anonym â client
domain â die Domain, fĂŒr die das Zertifikat ausgestellt wurde
Android
non-Samsung
Ab Version 7 kann beim Verbinden mit WiFi das Systemzertifikat verwendet werden, indem nur die Domain angegeben wird:

domain â die Domain, fĂŒr die das Zertifikat ausgestellt wurde
anonym â client
Samsung
Wie bereits oben erwĂ€hnt, unterstĂŒtzen Samsung-GerĂ€te die Verwendung von Systemzertifikaten bei der Verbindung mit WiFi nicht, und sie haben nicht die Möglichkeit, sich ĂŒber die Domain zu verbinden. Daher muss das Wurzelzertifikat der Zertifizierungsstelle (ca.pem, erhalten vom Radius-Server) manuell hinzugefĂŒgt werden. Hier wird das selbstsignierte verwendet.
Lade das Zertifikat auf dein GerÀt herunter und installiere es.
Zertifikatsinstallation



In diesem Fall muss ein Entsperrmuster, ein PIN-Code oder ein Passwort eingerichtet werden, falls dies noch nicht geschehen ist:


Ich habe die komplexe Variante der Zertifikatsinstallation gezeigt. Bei den meisten GerÀten reicht es aus, einfach auf das heruntergeladene Zertifikat zu tippen.
Wenn das Zertifikat installiert ist, kann es mit der Verbindung weitergehen:

Zertifikat â wir geben das an, das wir installiert haben
anonymer Benutzer â guest
macOS
Apple-GerĂ€te können von Haus aus nur EAP-TLS verwenden, aber dennoch muss ihnen ein Zertifikat bereitgestellt werden. Um eine andere Verbindungsmethode anzugeben, muss Apple Configurator 2 verwendet werden. Daher muss es vorher auf dem Mac heruntergeladen, ein neues Profil erstellt und alle notwendigen WiFi-Einstellungen hinzugefĂŒgt werden.
Apple Configurator

Hier geben wir den Namen unseres Netzwerks an
Sicherheitstyp â WPA2 Enterprise
Akzeptierte EAP-Typen â TTLS
Benutzername und Passwort â lassen wir leer
Innere Authentifizierung â PAP
ĂuĂere IdentitĂ€t â client
Registerkarte Vertrauen. Hier geben wir unsere Domain an
Fertig. Das Profil kann gespeichert, signiert und auf GerÀte verteilt werden
Nachdem das Profil erstellt wurde, muss es auf dem Mac heruntergeladen und installiert werden. Bei der Installation mĂŒssen die Benutzeranmeldeinformationen username_ldap und password_ldap eingegeben werden.



iOS
Der Prozess ist analog zu macOS. Es ist erforderlich, ein Profil zu verwenden (es kann dasselbe wie fĂŒr macOS sein. Wie man ein Profil im Apple Configurator erstellt, siehe oben).
Wir laden das Profil herunter, installieren es, geben die Anmeldedaten ein und verbinden uns:






Das ist alles. Wir haben den Radius-Server eingerichtet, ihn mit FreeIPA synchronisiert und den Zugangspunkten von Ubiquiti die Verwendung von WPA2-EAP zugewiesen.
Mögliche Fragen
Frage: Wie ĂŒbertrĂ€gt man das Profil/Zertifikat an den Mitarbeiter?
A: Alle Zertifikate/Profile speichere ich auf einem FTP-Server mit Webzugriff. Ich habe ein GĂ€stew Netzwerk mit Geschwindigkeitsbegrenzung und nur Internetzugang eingerichtet, mit Ausnahme des FTP.
Die Authentifizierung dauert 2 Tage, danach wird sie zurĂŒckgesetzt und der Client hat keinen Internetzugang mehr. Wenn ein Mitarbeiter sich mit WiFi verbinden möchte, verbindet er sich zunĂ€chst mit dem GĂ€stew Netzwerk, geht auf den FTP, lĂ€dt das benötigte Zertifikat oder Profil herunter, installiert sie und kann sich dann mit dem Unternehmensnetzwerk verbinden.
Frage: Warum nicht das MSCHAPv2-Schema verwenden? Es ist doch sicherer!
A: Erstens funktioniert dieses Schema gut mit NPS (Windows Network Policy System), in unserer Implementierung mĂŒssen zusĂ€tzlich LDAP (FreeIpa) konfiguriert werden und die Passwort-Hashes auf dem Server gespeichert werden. ZusĂ€tzliche Einstellungen sind unerwĂŒnscht, da sie zu verschiedenen Synchronisationsproblemen fĂŒhren können. Zweitens ist der Hash MD4, was die Sicherheit nicht erhöht.
Frage: Kann man GerÀte anhand von MAC-Adressen authentifizieren?
A: NEIN, das ist nicht sicher, ein Angreifer kann die MAC-Adressen fĂ€lschen, und auĂerdem wird die Authentifizierung ĂŒber MAC-Adressen von vielen GerĂ€ten nicht unterstĂŒtzt.
Frage: Warum ĂŒberhaupt all diese Zertifikate verwenden? Man könnte sich auch ohne verbinden.
A: Zertifikate werden verwendet, um einen Server zu authentifizieren. Das heiĂt, das GerĂ€t ĂŒberprĂŒft bei der Verbindung, ob es sich um den vertrauenswĂŒrdigen Server handelt oder nicht. Wenn ja, wird die Authentifizierung fortgesetzt, andernfalls wird die Verbindung geschlossen. Man kann sich auch ohne Zertifikate verbinden, aber wenn ein Angreifer oder Nachbar zu Hause einen Radius-Server und einen Zugangspunkt mit demselben Namen wie unser Netzwerk einrichtet, kann er leicht die Anmeldedaten des Benutzers abfangen (nicht vergessen, dass diese unverschlĂŒsselt ĂŒbertragen werden). Bei Verwendung eines Zertifikats sieht der Angreifer in seinen Protokollen nur unsere fiktiven Benutzernamen â GĂ€ste oder Klienten und einen Fehler vom Typ â Unbekanntes CA-Zertifikat.
Noch ein bisschen ĂŒber macOSIn der Regel wird auf macOS das System ĂŒber das Internet neu installiert. Im Wiederherstellungsmodus muss der Mac mit WiFi verbunden werden, und hier wird weder unser Unternehmens-WiFi noch das GĂ€ste-Netzwerk funktionieren. Ich habe persönlich ein weiteres Netzwerk eingerichtet, ein normales ĂŒber WPA2-PSK, versteckt, nur fĂŒr technische Operationen. Alternativ kann man auch vorher einen bootfĂ€higen USB-Stick mit dem System erstellen. Wenn der Mac jedoch nach 2015 gebaut wurde, wird man zusĂ€tzlich einen Adapter fĂŒr diesen USB-Stick benötigen.)
Quelle: habr.com
