Netzwerkzugriff über Radius

Autor des Abschnitts: @cweikl, @thomas, @foer

RADIUS (Remote Authentification Dial-In User Service) ist ein Client-Server Protokoll, das zur Authentifizierung, Autorisierung und für das Accounting (Triple A) von Benutzern in einem Netzwerk dient.

Der RADIUS-Server dient als zentraler Authentifizierungsserver, an den sich verschiedene IT-Dienste für die Authentifizierung wenden können. RADIUS bietet sich an, um in grossen Netzen sicherzustellen, dass ausschließlich berechtigte Nutzer Zugriff haben. Der Zugriff kann zudem auch auf bestimmte Endgeräte beschränkt werden. Um die Authentifizierungsdaten zu übertragen, wird oftmals das Protokoll EAP (Extensible Authentification Protocol) genutzt.

Viele Geräte und Anwendungen, wie z.B. Access Points, Captive Portals oder Wireless Controller bieten neben einer einfachen Benutzerauthentifizierung auch eine Überprüfung mit Hilfe eines RADIUS-Servers an (WPA-Enterprise, 802.1X). Werden die Geräte so konfiguriert, dass diese zur Authentifizierung den RADIUS-Server nutzen, so kann sichergestellt werden, dass nur berechtigte Benutzer Zugriff auf z.B. das WLAN haben.

FreeRADIUS: Einsatz in linuxmuster.net

FreeRadius ist ein Open-Source RADIUS-Server, der in der linuxmuster.net v7 zum Einsatz kommt.

Dieser RADIUS-Server kann auf dem (optionalen) Docker-Host (eigene VM) installiert, als Dienst aktiviert und so konfiguriert werden, dass die Benutzerauthentifizierung anhand der Daten im ActiveDirectory (AD) des linuxmuster.net Servers erfolgt, die vom RADIUS-Server via LDAP oder direkt abgefragt werden.

Hinweis

Es wird grundsätzlich empfohlen, zusätzliche Dienste nicht auf dem lmn-Server zu installieren. Diese sollten auf dem Docker-Host (Vm) installiert werden. Die OPNSense verfügt über ein Freeradius - Plugin. Allerdings unterstützt OPNSense bislang N I C H T die Radius <– –> AD Kommunikation mithilkfe von auth_ntlm.

Der Zugriff soll über die Schulkonsole gesteuert werden. Dafür werden Benutzer einer speziellen Gruppe wifi hinzugefügt oder daraus entfernt.

Bemerkung

Das Standardverhalten der linuxmuster.net ist, dass ein neu angelegter Benutzer immer in der Gruppe wifi ist, d.h. auch alle Schüler dürfen zunächst in das WLAN, sobald ein WLAN-Zugriff auf Basis dieser Gruppe wifi erstellt wurde.

Zugehörigkeit zur Gruppe wifi einmalig festlegen

Die Steuerung der Gruppenzugehörigkeit kann auf der Konsole auf dem lmn-Server wie folgt gesetzt werden. Wenn man z.B. nur die Gruppe der Lehrer und der Schüler der Oberstufenklassen „k1“ und „k2“ für WLAN-Zugang konfigurieren will, erstellt man eine Vorlage und setzt die wifi-Gruppe dann

server ~ # cat << EOF > /etc/linuxmuster/sophomorix/default-school/wifi.teachers_and_oberstufe.conf
MEMBER_ROLE=teacher,globaladministrator
MEMBER_CLASS=teachers,k1,k2
EOF

server ~ # sophomorix-managementgroup --set-wifi teachers_and_oberstufe

Um noch weitere einzelne Schüler hinzuzunehmen oder zu entfernen, nutzt man danach die Funktion --wifi bzw. --nowifi mit von Komma getrennten Benutzernamen.

server ~ # sophomorix-managementgroup --nowifi lempel,fauli
server ~ # sophomorix-managementgroup --wifi schlaubi,torti

FreeRADIUS auf dem Docker-Host einrichten & testen

Freeradius installieren und aktivieren

server ~ # apt install freeradius
server ~ # systemctl enable freeradius.service

NTLM Authentifizierung in Samba erlauben

In der Datei /etc/samba/smb.conf ist in der Rubrik [global] folgende Zeile einzufügen:

[global]
...
ntlm auth = mschapv2-and-ntlmv2-only

Danach muss der Samba-Dienst neu gestartet werden:

server ~ # systemctl restart samba-ad-dc.service

Radius konfigurieren

Radius wird für das Protokoll PEAP/MSChapv2 konfiguriert. Dem Freeradius-Dienst muss Zugriff auf den lokalen winbind-Dienst gegeben werden.

server ~ # usermod -a -G winbindd_priv freerad

In dem Verzeichnis /etc/freeradius/3.0/sites-enabled in die Dateien default und inner-tunnel ganz am Anfang unter authenticate ist ntlm_auth einzufügen.

authenticate {
    ntlm_auth
    # ab hier geht es weiter

Die Datei /etc/freeradius/3.0/mods-enabled/mschap ist im Abschnitt mschap mit zwei Zeilen zu ergänzen:

mschap {
        use_mppe = yes
        with_ntdomain_hack = yes
        # hier geht es weiter

Im selben Abschnitt ist auch die Variable ntlm_auth weiter unten anzupassen. Zuerst das Kommentarzeichen # entfernen, dann die Zeile folgendermaßen anpassen:

# eine Zeile
ntlm_auth = "/usr/bin/ntlm_auth --allow-mschapv2 --request-nt-key --domain=DOMÄNE --require-membership-of=DOMÄNE\wifi --username=%{%{Stripped-User-Name}:-%{%{User-Name}:-None}} --challenge=%{%{mschap:Challenge}:-00} --nt-response=%{%{mschap:NT-Response}:-00}"

Dabei muss DOMÄNE an beiden Stellen durch den eigenen Domänennamen (Samba-Domäne) ersetzt werden. Die Option --require-membership-of=... lässt nur Mitglieder der Gruppe wifi zu. So funktioniert die WLAN-Steuerung über die WebUI.

Danach ist die Datei /etc/freeradius/3.0/mods-enabled/ntlm_auth noch anzupassen. Zuerst ist das Kommentarzeichen # zu entfernen. Danach ist die Zeile wie folgt anzupassen:

exec ntlm_auth {
        wait = yes
        # eine Zeile
        program = "/usr/bin/ntlm_auth --allow-mschapv2 --request-nt-key --domain=DOMÄNE --require-membership-of=DOMÄNE\wifi --username=%{mschap:User-Name} --password=%{User-Password}"
}

Dabei muss auch hier DOMÄNE beides Mal durch den eigenen Domänennamen (Samba-Domäne) ersetzt werden.

Nun ist der Freeradius-Dienst neuzustarten:

server ~ # systemctl restart freeradius.service

Hinweis

Der Eintrag Auth-Type wird für die Datei /etc/freeradius/3.0/users nicht mehr empfohlen. http://deployingradius.com/documents/configuration/auth_type.html

Firewallregeln anpassen

Auf der Firewall OPNSense muss je nach eigenen Voraussetzungen dafür gesorgt werden, dass die APs aus dem WLAN-Netz den Server auf dem Port 1812 via udp erreichen können. Es ist darauf zu achten, dass die IP des Servers den eigenen Netzvorgaben entspricht (also z.B. 10.0.0.1 oder 10.16.1.1)

Die Regel auf der OPNSense hierzu könnte, wie nachstehend abgebildet, in den Firewall-Regeln für LAN eingetragen werden.

FW Rule for Radius Service

Jetzt sollte die Authentifizierung per WPA2-Enterprise funktionieren, sofern der Testuser in der Gruppe wifi ist. Ein Zertifikat ist bei Verwendung von PEAP/MSChapv2 nicht erforderlich.

Sollte das nicht funktionieren, hält man den Freeradius-Dienst an und startet ihn im Debugmodus.

server ~ # service freeradius stop
server ~ # service freeradius debug

Jetzt sieht man alle Vorgänge während man versucht, sich mit einem Device zu verbinden.

Weiter geht es mit APs im Freeradius eintragen

FreeRADIUS auf dem lmn-Server einrichten & testen (workaround)

Die linuxmuster.net v7 sieht vor, dass optionale Dienste auf dem Docker-Host betrieben werden. Um dauerhaft ein reibungsloses Update des linuxmuster.net Servers zu gewährleisten, sollen hier keinerlei zusätzliche Dienste installiert werden.

In der Community wird bei einigen Installationen der optionale Docker-Host nicht genutzt, so dass eine INstallation des FreeRadius - Dienste auf dem linuxmuster.net Server durchgeführt wurde. Dies ist prinzipiell möglich.

Hinweis

Es wird hier nochmals deutlich daraufg hingewiesen, dass dies N I C H T der empfohlene Betrieb des FreeRadius-Dienstes ist.

Freeradius installieren und aktivieren

# apt install freeradius
# systemctl enable freeradius.service

ntlm_auth in samba erlauben

In der Datei /etc/samba/smb.conf ist folgende Zeile einzufügen:

[global]

...
ntlm auth = mschapv2-and-ntlmv2-only

Danach muss der samba-ad-dc Dienst neu gestartet werden:

# systemctl restart samba-ad-dc.service

Radius konfigurieren

Dem Freeradius-Dient muss Zugriff auf winbind gegeben werden:

# usermod -a -G winbindd_priv freerad
# chown root:winbindd_priv /var/lib/samba/winbindd_privileged/

In dem Verzeichnis /etc/freeradius/3.0/sites-enabled in die Dateien default und inner-tunnel ganz am Anfang unter authenticate ist ntlm_auth einzufügen.

authenticate {
   ntlm_auth
   # ab hier geht es weiter

Die Datei /etc/freeradius/3.0/mods-enabled/mschap sind im Abschnitt mschap zwei Einträge zu ergänzen:

mschap {
        use_mppe = yes
        with_ntdomain_hack = yes
        # hier geht es weiter

Anpassen des Abschnitts ntlm_auth weiter unten. Zuerst das Kommentarzeichen # entfernen, dann die Zeile folgendermaßen anpassen:

# eine Zeile
ntlm_auth = "/usr/bin/ntlm_auth --allow-mschapv2 --request-nt-key --domain=DOMÄNE --require-membership-of=DOMÄNE\wifi --username=%{%{Stripped-User-Name}:-%{%{User-Name}:-None}} --challenge=%{%{mschap:Challenge}:-00} --nt-response=%{%{mschap:NT-Response}:-00}"

Dabei muss DOMÄNE durch den eigenen Domänennamen (Samba-Domäne) ersetzt werden. Die Option –require-membership-of=… lässt nur Mitglieder der Gruppe wifi zu. So funktioniert die WLAN-Steuerung über die WebUI.

Danach ist die Datei /etc/freeradius/3.0/mods-enabled/ntlm_auth noch anzupassen. Zuerst ist das Kommentarzeichen # zu entfernen. Danach ist die Zeile wie folgt anzupassen:

exec ntlm_auth {
  wait = yes
     # eine Zeile
     program = "/usr/bin/ntlm_auth --allow-mschapv2 --request-nt-key --domain=DOMÄNE --require-membership-of=DOMÄNE\wifi --username=%{mschap:User-Name} --password=%{User-Password}"
}

Dabei muss DOMÄNE durch den eigenen Domänennamen (Samba-Domäne) ersetzt werden.

In der Datei /etc/freeradius/3.0/users ist ganz oben nachstehende Zeile einzufügen.

DEFAULT     Auth-Type = ntlm_auth

Nun ist der Freeradius-Dienst neuzustarten:

# systemctl restart freeradius.service

Hinweis

Das Defaultverhalten der lmn7 ist, dass ein neu angelegter User immer in der Gruppe wifi ist, d.h. auch alle Schüler dürfen zunächst in das WLAN.

Die Steuerung der Gruppenzugehörigkeit kann auf der Konsole wie folgt gesetzt werden:

# sophomorix-managementgroup --nowifi/--wifi user1,user2,...

Um alle Schüler aus der Gruppe wifi zu nehmen, läßt man sich alle User des Systems auflisten und schreibt diese in eine Datei. Dies kann wie folgt erledigt werden:

# samba-tool user list > user.txt

Jetzt entfernt man alle User aus der Liste, die immer ins Wlan dürfen sollen. Danach baut man die Liste zu einer Kommazeile um mit:

#less user |  tr '\n' ',' > usermitkomma.txt

Die Datei kann jetzt an den o.g. Sophomorix-Befehl übergeben werden:

# sophomorix-managementgroup --nowifi $(less usermitkomma.txt)

Firewallregeln anpassen

Auf dem lmn-Server ist in der Datei /etc/linuxmuster/allowed_ports der Radiusport 1812 einzutragen:

udp domain,netbios-ns,netbios-dgm,9000:9100,1812

Danach ist der lmn-Server neu zu starten.

Auf der Firewall OPNSense muss je nach eigenen Voraussetzungen dafür gesorgt werden, dass die AP’s aus dem Wlan-Netz den Server auf dem Port 1812 via udp erreichen können. Es ist darauf zu achten, dass die IP des Servers den eigenen Netzvorgaben entspricht (also z.B. 10.0.0.1/16 oder /24 oder 10.16.1.1/16 oder /24)

Die Regel auf der OPNSense hierzu könnten, wie nachstehend abgebildet, eingetragen werden.

FW Rule für Radius Service

Jetzt sollte die Authentifizierung per WPA2-Enterprise funktionieren, sofern der Testuser in der Gruppe wifi ist. Ein Zertifikat ist nicht erforderlich.

Sollte das nicht funktionieren, hält man den Freeradius-Dienst an und startet ihn im Debugmodus.

# service freeradius stop
# service freeradius debug

Jetzt sieht man alle Vorgänge während man versucht, sich mit einem Device zu verbinden.

Weiter geht es mit APs im Freeradius eintragen

APs im Freeradius eintragen

Die APs müssen im Freeradius noch in der Datei /etc/freeradius/3.0/clients.conf eingetragen werden. Dies erfolgt wie in nachstehendem Schema dargestellt:

client server {
ipaddr = 10.0.0.1
secret = GeHeim
}

client opnsense {
ipaddr = 10.0.0.254
secret = GeHeim
}

client unifi {
ipaddr = 10.0.0.10
secret = GeHeim
}

Um den APs feste IPs zuzuweisen, sollten diese auf dem lmn-Server in der Datei /etc/linuxmuster/sophomorix/default-school/devices.csv eingetragen sein.

Je nachdem ob in jedem (Sub)-netz die APs angeschlossen werden, ist die zuvor dargestellte Firewall-Regel anzupassen. Der Radius-Port in der OPNSense müsste dann z.B. von Subnetz A (blau) zu Subnetz B (grün Servernetz) geöffnet werden, damit alle APs Zugriff auf den Radius-Dienst erhalten.