Wi-Fi Alliance zertifiziert Wi-Fi 7
Die für die Wi-Fi-Standards zuständige Wi-Fi Alliance hat offiziell mit der Zertifizierung von Wi-Fi 7 begonnen. Zertifizierte Geräte erhalten dann das Siegel Wi-Fi Certified 7.
Die für die Wi-Fi-Standards zuständige Wi-Fi Alliance hat offiziell mit der Zertifizierung von Wi-Fi 7 begonnen. Zertifizierte Geräte erhalten dann das Siegel Wi-Fi Certified 7.
pfSense ist eine Open Source Firewalllösung, die man gut zu Hause, in der Schule oder in einem Unternehmen einsetzen kann (siehe Installation + Hardwareempfehlungen). In den meisten Fällen möchte man Clients nicht ausschließlich per Netzwerkkabel verbinden, sondern auch kabellos. Am einfachsten geht es, wenn man dazu einen WLAN Access Point an die Firewall mit anschließt, die sich um die kabellosen Geräte kümmert (z.B. Smartphones).
Ein Bild sagt bekanntlich mehr als 1000 Worte:
Die LAN-Schnittstelle von pfSense verbindet man mit einem Switch, an dem man dann den Access Point und weitere kabelgebundene Clients anschließen kann.
Nachdem der Access Point angeschlossen ist (in unserem Beispiel ein Access Point von tp-link), muss er noch eingerichtet werden. Jeder Access Point bringt meistens auch ein Webinterface mit, über dass man Einstellungen vornehmen kann. Die IP-Adresse des Access Point findet man in pfSense unter Status → DHCP-Leases heraus.
Nun kann man auf das Webinterface des Access Point zugreifen.
Nach dem Login (bei tp-link ist der Standardbenutzername und das Passwort admin) richtet man unter Quick Setup alle wichtigen Einstellungen ein:
Es gibt zwar auch Mini-Computer und -router für pfSense, die einen WLAN-Chip mitbringen, doch kann man davon nur sehr wenige im Access Point-Modus betreiben. Meistens unterstützen sie nur den Client-Mode, d.h. man kann sich damit mit einem WLAN-Netz verbinden, aber selbst keines aufspannen. PfSense unterstützt nur wenige Karten im Access Point-Modus. Eine Übersicht findet man hier. Schlussendlich ist es IMHO deutlich einfacher einen Access Point mit pfSense zu verbinden statt den richtigen WLAN Chip zu finden.
Der Beitrag WLAN Access Point mit pfSense verbinden erschien zuerst auf .:zefanjas:..
An unserer Schule haben wir ein offenes WLAN mit einem Captive Portal sowie ein weiteres WLAN-Netz (WPA Enterprise, 802.1X), welches nur für Lehrkräfte gedacht ist. Für beide Netze nutzen wir einen RADIUS-Server für die Authentifizierung. Freeradius ist der am weitesten verbreitete OpenSource RADIUS-Server, der auch bei uns zum Einsatz kommt. In diesem Artikel wollen wir einen Freeradius-Server und Zertifikate für eine verschlüsselte Verbindung einrichten. Im Besonderen möchte ich auf die Anbindung an Linuxmuster 6.2 eingehen und die Authentifizierung mit einem LDAP-Server beschreiben.
Ein RADIUS-Server kümmert sich im Allgemeinen um 3 Dinge: Authentifizierung, Autorisierung und Accounting (oft auch als Triple-A oder AAA bezeichnet). Wir werden uns nur mit den ersten beiden „As“ beschäftigen, d.h. ob die Zugangsdaten korrekt sind und ob der Benutzer berechtigt ist, einen Zugang zu erhalten (zum WLAN z.B.).
Die Installation führen wir auf einer aktuellen Linux-Installation (hier Ubuntu 18.04 Server) durch, z.B. in einem LXD Container oder einer virtuellen Maschine.
$ apt install freeradius freeradius-ldap freeradius-utils
Um unseren freeradius Server zu testen, kommentieren wir folgende Zeile in /etc/freeradius/3.0/users aus oder fügen sie zu Beginn der Datei ein:
# Das Kommentarzeichen "#" vor dieser Zeile entfernen steve Cleartext-Password := "testing"
Standardmäßig sollte in der Datei /etc/freeradius/3.0/clients.conf der localhost als Client eingerichtet sein:
client localhost { ipaddr = 127.0.0.1 secret = testing123 }
Nun können wir einen ersten Test durchführen. Dazu stoppen wir den freeradius-Service und starten ihn manuell im Debug-Modus neu:
$ systemctl stop freeradius.service $ freeradius -X ... Ready to process request
Wichtig ist, dass am Ende „Ready to process requests“ steht.
Als nächstes überprüfen wir, ob unser Test-Benutzer „Steve“ sich am RADIUS-Server anmelden kann (am besten in einem neuen/zweiten Terminal):
$ radtest steve testing 127.0.0.1 10 testing123
Falls alles passt, sollten wir folgende Antwort bekommen:
Sent Access-Request Id 234 from 0.0.0.0:40302 to 127.0.0.1:1812 length 75 User-Name = "steve" User-Password = "testing" NAS-IP-Address = 10.18.10.60 NAS-Port = 10 Message-Authenticator = 0x00 Cleartext-Password = "testing" Received Access-Accept Id 234 from 127.0.0.1:1812 to 0.0.0.0:0 length 20
Wichtig ist, dass wir ein „Received Access-Accept“ bekommen. Hat diese Anfrage geklappt ist der freeradius-Server grundlegend eingerichtet und die folgenden Authentifizierungsverfahren sollten ohne weitere Probleme klappen:
Diese Verfahren sind unterschiedliche Protokolle, die verschieden „sicher“ sind. Alle verwenden einen Benutzernamen und Passwort zur Authentifizierung. Die Bedeutung der (P)EAP Verfahren kann man hier nachlesen. MS-CHAPv1 und v2 sind Verfahren aus dem Hause Microsoft.
Hinweis: Die Zeile mit unserem Benutzer „Steve“ sollten wir jetzt wieder kommentieren oder löschen!
Wir werden im Folgenden das LDAP-Modul konfigurieren und neue Zertifikate für EAP-TTLS erstellen.
Die Konfiguration des LDAP-Servers nehmen wir in der Datei /etc/freeradius/3.0/mods-enabled/ldap vor. Falls diese Datei nicht existiert, müssen wir vorher noch einen symbolischen Link erstellen.
$ cd /etc/freeradius/3.0/mods-enabled/ $ ln -s ../mods-available/ldap ./
Ziemlich an Anfang der Datei konfigurieren wir unseren LDAP-Server:
server = "ldaps://linuxmuster.internal.example.com" identity = "cn=admin,dc=internal,dc=example,dc=com" password = superSecretPassword base_dn = "ou=accounts,dc=internal,dc=example,dc=com" ... group { ... membership_filter = "(|(member=%{control:Ldap-UserDn})(memberUid=%{%{Stripped-User-Name}:-%{User-Name}}))" ... }
Es muss sichergestellt sein, dass alle nötigen Ports für die Kommunikation zwischen dem RADIUS und LDAP-Server offen sind.
Hinweis: Wenn man Freeradius 3.0 zusammen mit linuxmuster.net v6.2 verwenden möchte, müssen noch folgende Zeilen angepasst werden, damit die Authentifizierung mit Windows klappt (sign…):
update { control:Password-With-Header += 'userPassword' control:NT-Password := 'sambaNTPassword' ... }
Nachdem der LDAP-Server in Freeradius konfiguriert ist, müssen wir ihn einmal neustarten und können anschließend testen, ob sich ein Benutzer aus dem LDAP am RADIUS-Server anmelden kann.
$ systemctl restart freeradius.service $ radtest testuser password localhost 10 testing123 Sent Access-Request Id 213 from 0.0.0.0:46425 to 127.0.0.1:1812 length 73 User-Name = "testuser" User-Password = "password" NAS-IP-Address = 10.18.10.60 NAS-Port = 10 Message-Authenticator = 0x00 Cleartext-Password = "password" Received Access-Accept Id 213 from 127.0.0.1:1812 to 0.0.0.0:0 length 20
Wenn wir wieder ein „Received Access-Accept“ als Antwort erhalten, klappt die Verbindung zwischen RADIUS und LDAP-Server. Falls es nicht klappt, sollten wir den RADIUS Server manuell starten und schauen, welche Fehler uns der RADIUS-Server ausgibt.
$ systemctl stop freeradius.service $ freeradius -X ... Ready to process request
Standardmäßig verwendet Freeradius sogenannte Snake-Oil-Zertifkate, die natürlich nicht für den produktiven Einsatz gedacht sind. Deshalb erstellen wir in den folgenden Schritten eine neue Root-CA und ein Zertifikat für den Server. Die Zertifikate und die dazugehörigen Konfigurationsdateien befinden sich unter /etc/freeradius/3.0/certs/. Zuerst öffnen wir die Datei ca.cnf und ändern ein paar wenige Einstellungen:
... [ CA_default ] ... default_days = 3650 ... default_md = sha256 ... [ req ] .... default_bits = 2048 input_password = supersecretandlongpassword output_password = supersecretandlongpassword ... [certificate_authority] countryName = US stateOrProvinceName = My State localityName = My Town organizationName = My School emailAddress = admin@my-school.org commonName = "CA Freeradius" ...
Ähnliche Einstellungen nehmen wir nun der Datei server.cnf vor:
... [ CA_default ] ... default_days = 3560 ... default_md = sha256 ... [ req ] ... default_bits = 2048 input_password = supersecretandlongpassword output_password = supersecretandlongpassword [server] countryName = US stateOrProvinceName = My State localityName = My Town organizationName = My School emailAddress = admin@my-school.org commonName = "Freeradius Server Certificate"
Das Passwort muss jetzt auch in der Datei /etc/freeradius/3.0/mods-enabled/eap geändert werden:
tls-config tls-common { private_key_password = supersecretandlongpassword ... }
Die Zertifikate erstellen wir mit einem einfachen make
:
$ cd /etc/freeradius/3.0/certs/ $ make
radtest
unterstützt leider keinen Test für eine EAP-TTLS Authentifizierung. Dazu brauchen wir das Tool eapol_test, welches Teil des wpa_supplicant Pakets ist. Leider wird dieses Tool standardmäßig nicht von wpa_supplicant gebaut, deswegen müssen wir das selbst machen. Wir laden den Quellcode herunter, entpacken ihn und müssen noch einige Abhängigkeiten installieren.
$ wget https://w1.fi/releases/wpa_supplicant-2.7.tar.gz $ tar -xzvf wpa_supplicant-2.7.tar.gz $ apt install build-essential pkg-config libnl-3-dev libssl-dev libnl-genl-3-dev $ cd wpa_supplicant-2.7 $ cp defconfig .config
Danach müssen wir die Datei .config öffnen und die Zeile #CONFIG_EAPOL_TEST=y
finden und das Kommentarzeichen entfernen.
$ nano .config # Kommentarzeichen "#" entfernen CONFIG_EAPOL_TEST=y
Mit dem folgenden Befehlen bauen wir nun das Programm und kopieren es noch an die richtige Stelle:
$ make eapol_test $ cp eapol_test /usr/local/bin
Um EAP-TTLS zu testen, brauchen wir für eapol_test eine kleine Config-Datei, die folgendermaßen aussehen kann:
$ nano eapol_test.conf network={ ssid="example" key_mgmt=WPA-EAP eap=TTLS identity="mustermann" anonymous_identity="anonymous" password="strenggeheim" phase2="auth=PAP" }
Nun können wir eapol_test aufrufen:
$ eapol_test -c eapol_test.conf -a 127.0.0.1 -p 1812 -s testing123
Wenn man am Ende diese Ausgabe erhält, war alles erfolgreich:
MPPE keys OK: 1 mismatch: 0 SUCCESS
Bisher haben wir immer nur direkt auf dem RADIUS-Server getestet. Im Normalfall wird die Anfrage für die Authentifizierung aber von einem Accesspoint, Captive Portal oder einem Wireless Controller kommen. Diese müssen auf dem RADIUS-Server als Clients eingerichtet werden. Wir öffnen dazu die Datei /etc/freeradius/3.0/clients.conf und fügen am Ende alle Accesspoints etc. mit ihrer IP und einem Passwort / Secret ein:
$ nano /etc/freeradius/3.0/clients.conf client AP1 { ipaddr = 10.0.0.10 secret = supersecretsecret }
Nun kann man auf dem Accesspoint ein WPA Enterprise (802.1X) Netzwerk einrichten und den RADIUS-Server mit seiner IP, den Port (1812) und dem eben festgelegten Passwort/Secret konfigurieren. Nun sollte man sich mit seinem mobilen Gerät im WLAN anmelden können.
An unserer Schule haben nur Mitarbeiter und Lehrkräfte sowie die Oberstufenschüler Zugang zum WLAN an der Schule. In linuxmuster.net ist das über die Gruppe p_wifi gelöst. Alle, die in dieser Gruppe sind, sollen Zugang bekommen. Bisher ist unser RADIUS-Server aber so konfiguriert, dass jeder Benutzer im LDAP Zugang erhält. Um den Zugang einzuschränken, fügen wir noch folgende Zeilen in der Datei /etc/freeradius/3.0/users hinzu:
DEFAULT Ldap-Group == "cn=p_wifi,ou=groups,dc=internal,dc=example,dc=com" DEFAULT Auth-Type := Reject Reply-Message = "Your are not allowed to access the WLAN!"
Die Installation von Freeradius für linuxmuster.net 6.2 ist in der Dokumentation beschrieben. Bis auf ein paar wenige Details ist die Konfiguration sehr ähnlich. In Freeradius 2.0 sind die Standardeinstellungen für die Zertifikate nicht mehr zeitgemäß, sodass es zu Verbindungsproblemen mit einigen Clients kommen kann (z.B. mit einem aktuellen macOS). Hier sollte man unbedingt die Vorgaben von Freeradius 3.0 verwenden (siehe oben)!
An unserer Schule haben wir ein Captive Portal für Gäste und Schüler, sowie ein WPA 802.1X (Enterprise) Netz für Mitarbeiter und Lehrkräfte. Während sich am Captive Portal alle anmelden können, die in der Gruppe p_wifi sind, sollen sie im WPA 802.1X Netzwerk nur Lehrkräfte und Mitarbeiter anmelden dürfen. Die Anfragen vom Captive Portal kommen von einer anderen IP (pfSense) als die für das WPA Enterprise Netzwerk. In der Datei /etc/freeradius/sites-enabled/inner-tunnel haben wir deshalb eine Abfrage eingebaut, die überprüft, von welcher IP die Anfrage kommt und entsprechend entscheidet, ob jemand Zugang bekommt oder nicht:
post-auth { ... #Only allow Teacher&Staff on WPA 802.1X Teacher and Staff network if (NAS-IP-Address == 10.0.0.10) { if (LDAP-Group == "cn=teachers,ou=groups,dc=internal,dc=example,dc=com" || LDAP-Group == "cn=staff,ou=groups,dc=internal,dc=example,dc=com") { noop } else { reject } } ... }
Dieser Artikel beschreibt nur eine von vielen Möglichen Konfigurationen. Ein RADIUS-Server ist komplex, aber dank der guten Standardkonfiguration von Freeradius (v.a. in Version 3) kommt man recht schnell zum Erfolg. Lange Zeit hatten wir nur das Captive Portal im Einsatz und es hat auch gut funktioniert, doch die Benutzerfreundlichkeit und Sicherheit ist mit einem WPA 802.1X (Enterprise) Netzwerk nochmal gestiegen. Ohne den RADIUS-Server wäre das aber nicht möglich gewesen.
Der Beitrag Wie man sein WLAN-Netzwerk mit Freeradius absichern kann erschien zuerst auf .:zefanjas:..