
Einige Beispiele für Unternehmens-WLAN wurden bereits beschrieben. Hier werde ich beschreiben, wie ich eine ähnliche Lösung implementiert habe und welche Probleme ich beim Anschließen an verschiedene Geräte hatte. Wir werden das vorhandene LDAP mit den etablierten Benutzern verwenden, FreeRadius erhöhen und WPA2-Enterprise auf dem Ubnt-Controller konfigurieren. Es scheint, dass alles einfach ist. Mal sehen ...
Ein bisschen über EAP-Methoden
Bevor wir mit der Aufgabe fortfahren, müssen wir entscheiden, welche Authentifizierungsmethode wir in unserer Lösung verwenden.
Aus Wikipedia:EAP ist ein Authentifizierungsframework, das häufig in drahtlosen Netzwerken und Punkt-zu-Punkt-Verbindungen verwendet wird. Das Format wurde zuerst in RFC 3748 beschrieben und in RFC 5247 aktualisiert.
EAP wird verwendet, um eine Authentifizierungsmethode auszuwählen, Schlüssel zu übertragen und diese Schlüssel mit Plug-Ins zu verarbeiten, die als EAP-Methoden bezeichnet werden. Es gibt viele EAP-Methoden, die sowohl mit EAP selbst als auch von einzelnen Herstellern definiert wurden. EAP definiert nicht die Verbindungsschicht, sondern nur das Nachrichtenformat. Jedes Protokoll, das EAP verwendet, verfügt über ein eigenes Protokoll zum Einkapseln von EAP-Nachrichten.
Die Methoden selbst:- LEAP ist ein proprietäres Protokoll, das von CISCO entwickelt wurde. Sicherheitslücken gefunden. Derzeit nicht empfohlen
- EAP-TLS wird von Mobilfunkanbietern gut unterstützt. Es ist ein sicheres Protokoll, da es der Nachfolger von SSL-Standards ist. Das Einrichten des Clients ist ziemlich kompliziert. Benötigen Sie zusätzlich zum Passwort ein Client-Zertifikat. Wird auf vielen Systemen unterstützt
- EAP-TTLS - auf vielen Systemen weit verbreitet - bietet gute Sicherheit bei Verwendung von PKI-Zertifikaten nur auf dem Authentifizierungsserver
- EAP-MD5 ist ein weiterer offener Standard. Bietet minimale Sicherheit. Anfällig, unterstützt keine gegenseitige Authentifizierung und Schlüsselgenerierung
- EAP-IKEv2 - Basierend auf dem Internet Key Exchange Protocol Version 2. Bietet gegenseitige Authentifizierung und Sitzungsschlüsselerstellung zwischen Client und Server
- PEAP ist eine gemeinsame Sicherheitslösung von CISCO, Microsoft und RSA als offener Standard. Weit verbreitet in Produkten, bietet sehr gute Sicherheit. Ähnlich wie bei EAP-TTLS, für das nur ein serverseitiges Zertifikat erforderlich ist
- PEAPv0 / EAP-MSCHAPv2 - nach EAP-TLS ist es der zweitgrößte Standard der Welt. Verwendete Client-Server-Beziehung in Microsoft, Cisco, Apple, Linux
- PEAPv1 / EAP-GTC - Erstellt von Cisco als Alternative zu PEAPv0 / EAP-MSCHAPv2. Schützt Authentifizierungsdaten in keiner Weise. Wird unter Windows nicht unterstützt
- EAP-FAST ist eine von Cisco entwickelte Methode zur Behebung von LEAP-Mängeln. Verwendet PAC (Protected Access Credential). Nicht voll entwickelt
Von all dieser Vielfalt ist die Auswahl immer noch nicht groß. Die Authentifizierungsmethode war erforderlich: 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.
Vielleicht stellt sich die Frage: Warum PAP verwenden? weil es Passwörter im Klartext überträgt?
Ja, das ist richtig. Die Kommunikation zwischen FreeRadius und FreeIPA erfolgt auf diese Weise. Im Debug-Modus können Sie verfolgen, wie Benutzername und Passwort gesendet werden. Ja, und lassen Sie sie los, nur Sie haben Zugriff auf den FreeRadius-Server.
Lesen Sie hier mehr über die Arbeit von EAP-TTLS
.
Freeradius
Wir werden FreeRadius unter CentOS 7.6 erhöhen. Hier ist nichts kompliziertes, wie üblich eingestellt.
yum install freeradius freeradius-utils freeradius-ldap -y
Ab Paketen wird Version 3.0.13 installiert. Letzteres kann unter https://freeradius.org/ abgerufen werden.Danach funktioniert FreeRadius bereits. Sie können die Zeile in / etc / raddb / users auskommentieren
steve Cleartext-Password := "testing"
Führen Sie den Server im Debug-Modus aus
freeradius -X
Und stellen Sie eine Testverbindung mit localhost her
radtest steve testing 127.0.0.1 1812 testing123
Erhielt eine Antwort
Received Access-Accept Id 115 von 127.0.0.1:1812 bis 127.0.0.1►6081 Länge 20 , dann ist alles in Ordnung. Mach weiter.
Wir verbinden das
ldap- Modul.
ln -s /etc/raddb/mods-available/ldap /etc/raddb/mods-enabled/ldap
Und sofort ändern. Wir brauchen FreeRadius, um auf FreeIPA zugreifen zu 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
Bearbeiten von eap in
mods-enabled / eapFügen Sie hier zwei eap-Instanzen hinzu. Sie unterscheiden sich nur in Zertifikaten und Schlüsseln. Ich werde gleich unten erklären, warum
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 Sie als Nächstes
Site-fähig / Standard . Interessiert an den Abschnitten zum Autorisieren und Authentifizieren.
Site-fähig / Standard 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 Autorisierungsbereich entfernen wir alle Module, die wir nicht benötigen. Lass nur ldap. Wir fügen die Kundenüberprüfung nach Benutzername hinzu. Aus diesem Grund haben wir die beiden oben genannten eap-Instanzen hinzugefügt.
Multi eapTatsache ist, dass wir durch das Anschließen einiger Geräte Systemzertifikate verwenden und die Domäne angeben. Wir haben ein Zertifikat und einen Schlüssel von einer vertrauenswürdigen Zertifizierungsstelle. Persönlich ist ein solches Verbindungsverfahren meiner Meinung nach einfacher, als auf jedem Gerät ein selbstsigniertes Zertifikat zu erstellen. Aber auch ohne selbstsignierte Zertifikate hat es nicht geklappt. Samsung-Geräte und Android = <6-Versionen wissen nicht, wie Systemzertifikate verwendet werden. Daher erstellen wir für sie eine separate Instanz von eap-guest mit selbstsignierten Zertifikaten. Für alle anderen Geräte verwenden wir eap-client mit einem vertrauenswürdigen Zertifikat. Der Benutzername wird durch das Feld Anonym bestimmt, wenn das Gerät angeschlossen ist. Es sind nur 3 Werte zulässig: Gast, Client und leeres Feld. Der Rest wird verworfen. Dies ist in den Richtlinien konfiguriert. Ich werde später ein Beispiel geben
Bearbeiten Sie autorisierte Abschnitte und authentifizieren Sie sie im
Site-fähigen / inneren TunnelSite-fähig / Innentunnel 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 Sie in den Richtlinien angeben, welche Namen für die anonyme Anmeldung verwendet werden können. Bearbeiten Sie
policy.d / filter .
Sie müssen ähnliche Zeilen finden:
if (&outer.request:User-Name !~ /^(anon|@)/) { update request { Module-Failure-Message = "User-Name is not anonymized" } reject }
Und unten in elsif fügen Sie die notwendigen Werte hinzu:
elsif (&outer.request:User-Name !~ /^(guest|client|@)/) { update request { Module-Failure-Message = "User-Name is not anonymized" } reject }
Jetzt müssen wir in das Verzeichnis
certs wechseln . Hier müssen Sie den Schlüssel und das Zertifikat von einer vertrauenswürdigen Zertifizierungsstelle ablegen, die wir bereits haben, und müssen selbstsignierte Zertifikate für eap-guest generieren.
Ändern Sie die Parameter in der Datei
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"
Die gleichen Werte sind in der Datei
server.cnf angegeben. Wir ändern uns nur
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"
Wir schaffen:
make
Fertig. Die resultierende
server.crt und
server.key sind bereits oben in eap-guest registriert.
Zuletzt fügen Sie unsere Zugangspunkte zur Datei
client.conf hinzu . Ich habe sie 7. Um nicht jeden Punkt einzeln hinzuzufügen, registrieren wir nur das Netzwerk, 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
Auf dem Controller erheben wir ein separates Netzwerk. Sei es 192.168.2.0/24
Gehen Sie zu Einstellungen -> Profil. Erstellen Sie eine neue:

Wir schreiben die Adresse und den Port des Radius-Servers und das Passwort, die in der Datei
clients.conf registriert wurden:

Erstellen Sie einen neuen drahtlosen Namen. Wählen Sie als Authentifizierungsmethode WPA-EAP (Enterprise) aus und geben Sie das erstellte Radiusprofil an:

Wir speichern, bewerben und gehen weiter.
Kundeneinrichtung
Beginnen wir mit dem Schwierigsten!
Windows 10
Die Komplexität beruht auf der Tatsache, dass Windows immer noch keine Verbindung zum Unternehmens-WLAN über die Domäne herstellen kann. Daher müssen Sie unser Zertifikat manuell in den Trust Store hochladen. Hier können Sie sowohl selbstsigniert als auch von einer Zertifizierungsstelle verwenden. Ich werde den zweiten verwenden.
Als Nächstes müssen Sie eine neue Verbindung erstellen. Gehen Sie dazu zu den Netzwerk- und Interneteinstellungen -> Netzwerk- und Freigabecenter -> Neue Verbindung oder neues Netzwerk erstellen und konfigurieren:



Registrieren Sie den Netzwerknamen manuell und ändern Sie die Art der Sicherheit. Nachdem wir auf "
Verbindungseinstellungen ändern" geklickt haben und im Abschnitt "Sicherheit" die Netzwerkauthentifizierung - EAP-TTLS - auswählen.



Wir gehen auf die Parameter ein, schreiben den Authentifizierungs-Datenschutz-
Client vor . Als vertrauenswürdige Zertifizierungsstelle wählen wir das Zertifikat aus, das wir hinzugefügt haben, aktivieren das Kontrollkästchen "Geben Sie dem Benutzer keine Einladung, wenn der Server nicht autorisiert werden kann" und wählen Sie die Authentifizierungsmethode - unverschlüsseltes Kennwort (PAP).

Gehen Sie als Nächstes zu den zusätzlichen Parametern und aktivieren Sie das Kontrollkästchen "Authentifizierungsmodus angeben". Wählen Sie den Punkt "Benutzerauthentifizierung" und klicken Sie auf
Anmeldeinformationen speichern . Hier müssen Sie username_ldap und password_ldap eingeben



Wir speichern, bewerben, schließen alles. Sie können eine Verbindung zum neuen Netzwerk herstellen.
Linux
Ich habe auf Ubuntu 18.04, 18.10, Fedora 29, 30 getestet.
Laden Sie zunächst ein Zertifikat herunter. Ich habe unter Linux nicht gefunden, ob es möglich ist, Systemzertifikate zu verwenden und ob es dort überhaupt einen solchen Speicher gibt.
Wir werden uns nach Domain verbinden. Daher benötigen Sie ein Zertifikat des Zertifizierungszentrums, von dem unser Zertifikat erworben wurde.
Alle Verbindungen werden in einem Fenster hergestellt. Wählen Sie unser Netzwerk:
anonym - Client
Domain - Domain, für die das Zertifikat ausgestellt wurde
Android
Nicht-Samsung
Ab Version 7 können Sie beim Herstellen einer WLAN-Verbindung Systemzertifikate verwenden, indem Sie nur die Domäne angeben:
Domain - Domain, für die das Zertifikat ausgestellt wurde
anonym - Client
Samsung
Wie bereits oben erwähnt, wissen Samsung-Geräte nicht, wie Systemzertifikate beim Herstellen einer WLAN-Verbindung verwendet werden, und sie können keine Verbindung nach Domäne herstellen. Daher müssen Sie das Stammzertifikat der Zertifizierungsstelle manuell hinzufügen (ca.pem, wir nehmen es auf dem Radius-Server). Hier wird selbstsigniert verwendet.
Laden Sie das Zertifikat auf Ihr Gerät herunter und installieren Sie es.
Installation des Zertifikats Wenn das Zertifikat installiert ist, können Sie mit der Verbindung fortfahren:
Zertifikat - Geben Sie das installierte Zertifikat an
anonymer Benutzer - Gast
macOS
Sofort einsatzbereite Apple-Geräte können nur eine Verbindung zu EAP-TLS herstellen, Sie müssen jedoch noch ein Zertifikat an sie senden. Um eine andere Verbindungsmethode anzugeben, müssen Sie Apple Configurator 2 verwenden. Dementsprechend müssen Sie diese zuerst auf die Mohnblume herunterladen, ein neues Profil erstellen und alle erforderlichen WLAN-Einstellungen hinzufügen.
Apple Konfigurator
Hier geben wir den Namen Ihres Netzwerks an
Sicherheitstyp - WPA2 Enterprise
Akzeptierte EAP-Typen - TTLS
Benutzername und Passwort - leer lassen
Innere Authentifizierung - PAP
Äußere Identität - Client
Registerkarte "Vertrauen". Hier geben wir unsere Domain anDas ist alles. Ein Profil kann gespeichert, signiert und an Geräte verteilt werden
Nachdem das Profil fertig ist, muss es auf die Mohnblume heruntergeladen und installiert werden. Während des Installationsvorgangs müssen Sie den Benutzer usernmae_ldap und password_ldap angeben:



iOS
Der Prozess ist ähnlich wie bei macOS. Sie müssen ein Profil verwenden (Sie können genauso wie unter macOS. So erstellen Sie ein Profil in Apple Configurator, siehe oben).
Laden Sie das Profil herunter, installieren Sie es, geben Sie die Anmeldeinformationen ein und verbinden Sie sich:






Das ist alles. Wir haben einen Radius-Server eingerichtet, ihn mit FreeIPA synchronisiert und Ubiquiti Access Points angewiesen, WPA2-EAP zu verwenden.
Mögliche Fragen
F: Wie übertrage ich ein Profil / Zertifikat an einen Mitarbeiter?
A: Alle Zertifikate / Profile, die ich auf FTP mit Zugriff über das Web speichere. Es wurde ein Gastnetzwerk mit einer Geschwindigkeitsbegrenzung und nur Internetzugang erstellt, mit Ausnahme von FTP.
Die Authentifizierung dauert 2 Tage. Danach wird sie zurückgesetzt und der Client bleibt ohne Internet. T.O. Wenn ein Mitarbeiter eine Verbindung zu WLAN herstellen möchte, stellt er zunächst eine Verbindung zum Gastnetzwerk her, besucht FTP, lädt das benötigte Zertifikat oder Profil herunter, installiert sie und kann dann eine Verbindung zum Unternehmensnetzwerk herstellen.
F: Warum nicht ein Schema mit MSCHAPv2 verwenden? Sie ist sicherer!
A: Erstens funktioniert ein solches Schema gut unter NPS (Windows Network Policy System). In unserer Implementierung ist es erforderlich, zusätzlich LDAP (FreeIpa) zu konfigurieren und Kennwort-Hashes auf dem Server zu speichern. Hinzufügen. Einstellungen sind nicht ratsam, weil Dies kann zu verschiedenen Problemen bei der Synchronisation von Ultraschall führen. Zweitens ist der Hash MD4, was die Sicherheit nicht wirklich erhöht.
F: Ist es möglich, Geräte über Mac-Adressen zu autorisieren?
A: NEIN, dies ist nicht sicher, ein Angreifer kann Mohnadressen fälschen, und außerdem wird die Autorisierung für Mohnadressen auf vielen Geräten nicht unterstützt
F: Warum alle diese Zertifikate verwenden? Sie können ohne sie verbinden
A: Zertifikate werden verwendet, um den Server zu autorisieren. Das heißt, Wenn das Gerät verbunden ist, prüft es, ob der Server vertrauenswürdig ist oder nicht. Wenn dies der Fall ist, geht die Authentifizierung weiter. Wenn nicht, wird die Verbindung geschlossen. Sie können eine Verbindung ohne Zertifikate herstellen. Wenn jedoch ein Angreifer oder ein Nachbar einen Radius-Server und einen Zugriffspunkt mit demselben Namen wie unseren abholt, kann er Benutzeranmeldeinformationen problemlos abfangen (vergessen Sie nicht, dass diese im Klartext übertragen werden). Und wenn das Zertifikat verwendet wird, sieht der Feind in unseren Protokollen nur unseren fiktiven Benutzernamen - Gast oder Client und einen Fehler vom Typ - Unbekanntes CA-Zertifikat
mehr über macOSUnter macOS erfolgt die Neuinstallation des Systems normalerweise über das Internet. Im Wiederherstellungsmodus muss die Mohnblume mit WLAN verbunden sein, und hier funktionieren weder unser Unternehmens-WLAN noch das Gastnetzwerk. Persönlich habe ich ein anderes Netzwerk, das übliche WPA2-PSK, versteckt, nur für technische Operationen. Oder Sie können im Voraus ein bootfähiges USB-Flash-Laufwerk mit dem System erstellen. Aber wenn die Mohnblume nach 2015, müssen Sie noch einen Adapter für dieses Flash-Laufwerk finden)