
Es wurden bereits einige Beispiele fĂŒr die Organisation von Unternehmens-WiFi beschrieben. Hier erklĂ€re ich, wie ich eine Ă€hnliche Lösung umgesetzt habe und welche Probleme beim Anschluss an verschiedenen GerĂ€ten aufgetreten sind. Wir verwenden ein bestehendes LDAP mit angelegten Benutzern, richten FreeRadius ein und konfigurieren WPA2-Enterprise auf dem Ubnt-Controller. Scheint einfach zu sein. Mal sehenâŠ
Einige Methoden des EAP
Bevor wir mit der Aufgabenstellung beginnen, mĂŒssen wir klĂ€ren, welche Authentifizierungsmethode wir in unserer Lösung verwenden werden.
Aus Wikipedia:
EAP ist ein Authentifizierungsrahmenwerk, 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, den SchlĂŒsselĂŒbertrag und die Verarbeitung dieser SchlĂŒssel durch Module, die als EAP-Methoden bezeichnet werden, auszuwĂ€hlen. Es gibt viele EAP-Methoden, sowohl solche, die zusammen mit dem EAP selbst definiert sind, als auch solche, die von einzelnen Herstellern herausgegeben werden. EAP definiert nicht die zweite Schicht, sondern nur das Nachrichtenformat. Jedes Protokoll, das EAP verwendet, hat sein eigenes EAP-Nachrichten-Kapselungsprotokoll.
Die Methoden selbst:
- LEAP â ein proprietĂ€res Protokoll, das von CISCO entwickelt wurde. Es wurden Schwachstellen gefunden. Derzeit wird eine Nutzung nicht empfohlen.
- EAP-TLS â wird von Anbietern drahtloser Verbindungen gut unterstĂŒtzt. Es handelt sich um ein sicheres Protokoll, da es der Nachfolger der SSL-Standards ist. Die Client-Konfiguration ist ziemlich komplex. Ein Client-Zertifikat ist neben dem Passwort erforderlich. Es wird in vielen Systemen unterstĂŒtzt.
- EAP-TTLS â wird in vielen Systemen weit unterstĂŒtzt, bietet eine gute Sicherheit, indem PKI-Zertifikate lediglich auf dem Authentifizierungsserver verwendet werden.
- EAP-MD5 â ein weiterer offener Standard. Bietet minimale Sicherheit. Ist anfĂ€llig und unterstĂŒtzt weder die gegenseitige Authentifizierung noch die SchlĂŒsselgenerierung.
- EAP-IKEv2 â basiert auf dem Internet Key Exchange Protocol Version 2. Es gewĂ€hrleistet die gegenseitige Authentifizierung und die Einrichtung eines SitzungsschlĂŒssels zwischen Client und Server.
- PEAP â eine gemeinsame Lösung von CISCO, Microsoft und RSA Security als offener Standard. Weit verbreitet in Produkten und bietet sehr gute Sicherheit. Ăhnlich wie EAP-TTLS, benötigt es nur ein Zertifikat auf der Serverseite.
- PEAPv0/EAP-MSCHAPv2 â nach EAP-TLS der weltweit zweitweitverbreitetste Standard. Es wird fĂŒr die Client-Server-Interaktion in Microsoft, Cisco, Apple und Linux verwendet.
- PEAPv1/EAP-GTC â von Cisco als Alternative zu PEAPv0/EAP-MSCHAPv2 entwickelt. SchĂŒtzt die Authentifizierungsdaten in keiner Weise. Nicht unterstĂŒtzt in Windows OS.
- EAP-FAST â eine Methode, die von Cisco zur Behebung der MĂ€ngel von LEAP entwickelt wurde. Verwendet Protected Access Credential (PAC). Ist noch nicht vollstĂ€ndig ausgereift.
Trotz dieser Vielfalt ist die Auswahl doch nicht groĂ. Von der Authentifizierungsmethode 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 aufkommen â warum sollte man PAP verwenden? ĂbertrĂ€gt es doch Passwörter im Klartext?
Ja, das ist korrekt. Die Kommunikation zwischen FreeRadius und FreeIPA erfolgt genau so. Im Debug-Modus kann man verfolgen, wie Benutzername und Passwort gesendet werden. Und wenn sie gesendet werden, dann haben Sie Zugriff auf den FreeRadius-Server.
Weitere Informationen zur Funktionsweise von EAP-TTLS finden Sie hier.
FreeRADIUS
Wir werden FreeRadius auf CentOS 7.6 einrichten. Das ist ganz einfach, wir installieren es auf die gewohnte Weise.
yum install freeradius freeradius-utils freeradius-ldap -yDie installierte Version ist 3.0.13. Die neueste Version finden Sie auf
Nach dieser Installation funktioniert FreeRadius bereits. In /etc/raddb/users können wir die Zeile 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 testing123Antwort erhalten Received Access-Accept Id 115 from 127.0.0.1:1812 to 127.0.0.1:56081 length 20, das bedeutet, alles ist gut. Weiter geht's.
Wir aktivieren das Modul ldap.
ln -s /etc/raddb/mods-available/ldap /etc/raddb/mods-enabled/ldapUnd Àndern es sofort. Wir benötigen, dass FreeRadius auf FreeIPA zugreifen kann.
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}})"
}
...Starten Sie den Radius-Server neu und ĂŒberprĂŒfen Sie 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. Diese unterscheiden sich nur durch die Zertifikate und SchlĂŒssel. Weiter unten erklĂ€re ich, 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"
}
}Dann bearbeiten wir weiter site-enabled/default. Wir interessieren uns fĂŒr 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 ĂŒbrig. ZusĂ€tzlich fĂŒgen wir eine ĂberprĂŒfung des Clients anhand des Benutzernamens hinzu. Genau dafĂŒr haben wir weiter oben zwei Instanzen von eap hinzugefĂŒgt.
Multi EAPEs ist so, dass wir beim Anschluss bestimmter GerĂ€te systemweite Zertifikate nutzen und die Domain angeben werden. Wir verfĂŒgen ĂŒber ein Zertifikat und einen SchlĂŒssel von einer vertrauenswĂŒrdigen Zertifizierungsstelle. Persönlich denke ich, dass ein solcher Anschluss einfacher ist, als jedes GerĂ€t mit einem selbstsignierten Zertifikat zu versehen. Allerdings konnten wir auch nicht ohne selbstsignierte Zertifikate auskommen. GerĂ€te von Samsung und Android-Versionen <= 6 unterstĂŒtzen keine systemweiten Zertifikate. Daher erstellen wir fĂŒr diese GerĂ€te ein separates Exemplar von eap-guest mit selbstsignierten Zertifikaten. FĂŒr alle anderen GerĂ€te verwenden wir eap-client mit dem vertrauenswĂŒrdigen Zertifikat. Der Benutzername wird anhand des Feldes Anonymous beim Anschluss des GerĂ€ts 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 etwas 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 Zugriff verwendet werden dĂŒrfen. Bearbeiten wir. policy.d/filter.
Wir mĂŒssen Zeilen finden, die so Ă€hnlich sind:
if (&outer.request:User-Name !~ /^(anon|@)/) {
update request {
Module-Failure-Message = "User-Name ist nicht anonymisiert"
}
reject
}Und unten im 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 wir mĂŒssen selbstsignierte Zertifikate fĂŒr eap-guest generieren.
Wir Àndern die Parameter in der Datei ca.cnf.
ca.cnf
...
default_days = 3650
default_md = sha256
...
input_password = blablabla
output_password = blablabla
...
countryName = DE
stateOrProvinceNmae = Bundesland
localityNmae = Stadt
organizationName = NONAME
emailAddress = admin@admin.de
commonName = "CA FreeRadius"Die gleichen Werte tragen wir in die Datei ein server.cnf. Wir Àndern nur
commonName:
server.cnf
...
default_days = 3650
default_md = sha256
...
input_password = blablabla
output_password = blablabla
...
countryName = DE
stateOrProvinceNmae = Bundesland
localityNmae = Stadt
organizationName = NONAME
emailAddress = admin@admin.de
commonName = "Server-Zertifikat FreeRadius"Wir erstellen:
makeFertig. Die erhaltenen server.crt und server.key sind bereits oben in eap-guest aufgefĂŒhrt.
Und zuletzt fĂŒgen wir unsere Zugangspunkte in die Datei client.conf. Ich habe sieben. Um nicht jeden Punkt einzeln hinzuzufĂŒgen, geben wir nur das Netzwerk an, in dem sie sich befinden (meine Zugangspunkte sind in einem separaten VLAN).
client APs {
ipaddr = 192.168.100.0/24
password = password_AP
}Ubiquiti Controller
Auf dem Controller richten wir ein separates Netzwerk ein. Lassen Sie es 192.168.2.0/24 sein.
Gehen Sie zu Einstellungen -> Profil. Erstellen Sie ein neues:

Geben Sie die Adresse und den Port des RADIUS-Servers sowie das Passwort an, das Sie in der Datei angegeben haben. clients.conf:

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

Alles speichern, anwenden und weitergehen.
Client-Konfiguration
Beginnen wir mit dem Schwierigsten!
Windows 10
Die Schwierigkeit besteht darin, dass Windows derzeit noch nicht in der Lage ist, sich mit dem Unternehmens-WLAN ĂŒber die DomĂ€ne zu verbinden. Daher mĂŒssen wir unser Zertifikat manuell in das Trusted Certificate Store importieren. Hier kann sowohl ein selbstsigniertes als auch ein Zertifikat von einer Zertifizierungsstelle verwendet werden. Ich werde das zweite verwenden.
Als NĂ€chstes mĂŒssen Sie eine neue Verbindung erstellen. Gehen Sie dazu zu Netzwerkeinstellungen und -internet -> Netzwerk- und Freigabecenter -> Neue Verbindung oder Netzwerk einrichten und konfigurieren:



Wir geben manuell den Netzwerkname ein und Ă€ndern den Sicherheitstyp. Danach klicken wir auf Einstellungen fĂŒr die Verbindung Ă€ndern und im Tab Sicherheit wĂ€hlen wir die Netzwerkauthentifizierung â EAP-TTLS.



Wir gehen zu den Einstellungen und geben die Datenschutzparameter fĂŒr die Authentifizierung ein â client. Als vertrauenswĂŒrdige Zertifizierungsstelle wĂ€hlen wir das von uns hinzugefĂŒgte Zertifikat aus, aktivieren das KontrollkĂ€stchen âBenutzer nicht auffordern, wenn die Serverauthentifizierung fehlschlĂ€gtâ und wĂ€hlen die Authentifizierungsmethode â unverschlĂŒsseltes Passwort (PAP).

Dann gehen wir zu den erweiterten Einstellungen, aktivieren das KontrollkĂ€stchen âGeben Sie den Authentifizierungsmodus anâ. Wir wĂ€hlen den Punkt âBenutzerauthentifizierungâ und klicken auf Anmeldeinformationen speichern. Hier mĂŒssen wir username_ldap und password_ldap eingeben.



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

anonymous â client
domain â die Domain, fĂŒr die das Zertifikat ausgestellt wurde
Android
non-Samsung
Ab Version C 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
anonymous â client
Samsung
Wie bereits erwĂ€hnt, können Samsung-GerĂ€te Systemzertifikate beim Verbinden mit WiFi nicht nutzen und haben keine Möglichkeit, sich ĂŒber die Domain zu verbinden. Daher muss das Stammzertifikat der Zertifizierungsstelle manuell hinzugefĂŒgt werden (ca.pem, auf dem Radius-Server zu finden). Hier wird ein selbstsigniertes Zertifikat verwendet.
Laden Sie das Zertifikat auf Ihr GerÀt herunter und installieren Sie es.
Zertifikatsinstallation



Dabei muss ein Entsperrbildschirm, ein PIN-Code oder ein Passwort eingerichtet werden, sofern dies noch nicht erfolgt ist:


Ich habe die komplizierte Variante der Zertifikatsinstallation gezeigt. Auf den meisten GerÀten reicht es aus, einfach auf das heruntergeladene Zertifikat zu klicken.
Nachdem das Zertifikat installiert ist, kann die Verbindung hergestellt werden:

Zertifikat â geben Sie das an, das Sie installiert haben.
anonymer Benutzer â guest
macOS
Apple-GerĂ€te können standardmĂ€Ăig nur mit EAP-TLS verbunden werden, benötigen jedoch trotzdem ein Zertifikat. Um eine andere Verbindungsmethode anzugeben, verwenden Sie Apple Configurator 2. Dazu mĂŒssen Sie es zuerst auf Ihrem Mac herunterladen, ein neues Profil erstellen und alle erforderlichen WiFi-Einstellungen hinzufĂŒgen.
Apple Configurator

Hier geben wir den Namen unseres Netzwerks an
Sicherheitstyp â WPA2 Enterprise
Akzeptierte EAP-Typen â TTLS
Benutzername und Passwort â lassen Sie leer
Innere Authentifizierung â PAP
ĂuĂere IdentitĂ€t â client
Reiter Vertrauensstellung. Hier geben wir unsere Domain an
Fertig. Das Profil kann gespeichert, signiert und auf den GerÀten verteilt werden.
Nachdem das Profil fertig ist, muss es auf den Mac heruntergeladen und installiert werden. WĂ€hrend der Installation mĂŒssen Sie username_ldap und password_ldap des Benutzers angeben:



iOS
Der Prozess ist Ă€hnlich wie unter macOS. Es muss ein Profil verwendet werden (es kann genau dasselbe wie fĂŒr macOS sein. Informationen zur Erstellung eines Profils im Apple Configurator finden Sie oben).
Laden Sie das Profil herunter, installieren Sie es, geben Sie die Anmeldedaten ein und verbinden Sie sich:






Das war's. Wir haben den Radius-Server konfiguriert, ihn mit FreeIPA synchronisiert und den Ubiquiti-Zugangs punkten angewiesen, WPA2-EAP zu verwenden.
Mögliche Fragen
Frage: Wie ĂŒbertrĂ€gt man das Profil/Zertifikat an einen Mitarbeiter?
Antwort: Ich speichere alle Zertifikate/Profile auf einem FTP-Server, der ĂŒber das Web zugĂ€nglich ist. Ich habe ein Gastnetzwerk mit Geschwindigkeitsbegrenzung und nur Internetzugang eingerichtet, mit Ausnahme des FTP-Zugangs.
Die Authentifizierung bleibt 2 Tage aktiv, danach wird sie zurĂŒckgesetzt und der Kunde hat keinen Internetzugang mehr. Wenn der Mitarbeiter sich mit dem WiFi verbinden möchte, verbindet er sich zunĂ€chst mit dem Gastnetzwerk, greift auf das FTP zu, lĂ€dt das benötigte Zertifikat oder Profil herunter, installiert diese und kann sich dann mit dem Unternehmensnetzwerk verbinden.
Frage: Warum die MSCHAPv2-Methode nicht verwenden? Sie ist doch sicherer!
Antwort: Erstens funktioniert diese Methode gut mit NPS (Windows Network Policy System). In unserer Implementierung mĂŒssen wir zusĂ€tzlich LDAP (FreeIPA) konfigurieren und die Passwort-Hashes auf dem Server speichern. ZusĂ€tzliche Einstellungen sind unerwĂŒnscht, da dies zu verschiedenen Synchronisationsproblemen fĂŒhren kann. Zweitens ist der Hash MD4, was die Sicherheit nicht wesentlich erhöht.
Frage: Kann man GerĂ€te ĂŒber MAC-Adressen authentifizieren?
Antwort: NEIN, das ist nicht sicher. Ein Angreifer könnte die MAC-Adressen fĂ€lschen, und eine Authentifizierung ĂŒber MAC-Adressen wird von vielen GerĂ€ten nicht unterstĂŒtzt.
Frage: Warum sollten wir ĂŒberhaupt all diese Zertifikate verwenden? Man kann sich doch auch ohne sie verbinden.
Antwort: Zertifikate werden verwendet, um den Server zu authentifizieren. Das bedeutet, dass das GerĂ€t beim Verbinden ĂŒberprĂŒft, ob es sich um den vertrauenswĂŒrdigen Server handelt oder nicht. Wenn ja, wird die Authentifizierung fortgesetzt; wenn nein, wird die Verbindung getrennt. Es ist möglich, sich ohne Zertifikate zu verbinden, aber wenn ein Angreifer oder Nachbar zu Hause einen RADIUS-Server und einen Access Point mit demselben Namen wie wir einrichtet, kann er leicht die Zugangsdaten des Benutzers abfangen (nicht vergessen, dass diese unverschlĂŒsselt ĂŒbertragen werden). Wenn ein Zertifikat verwendet wird, sieht der Angreifer in seinen Logs nur unsere fiktiven Benutzernamen â guest oder client â und einen Fehler wie - Unknown CA Certificate.
Noch etwas ĂŒber macOS.In der Regel erfolgt die Neuinstallation des Systems unter macOS ĂŒber das Internet. Im Wiederherstellungsmodus muss der Mac mit WiFi verbunden werden, und hier funktioniert weder unser Unternehmens-WiFi noch das Gastnetzwerk. Ich habe persönlich ein weiteres Netzwerk eingerichtet, ein normales WPA2-PSK-Netzwerk, versteckt, nur fĂŒr technische Operationen. Alternativ kann man auch im Voraus einen bootfĂ€higen USB-Stick mit dem System erstellen. Aber wenn der Mac nach 2015 hergestellt wurde, benötigt man auĂerdem einen Adapter fĂŒr diesen USB-Stick.)
Quelle: habr.com
