Freeradius, Installation und Konfiguration, Authentifizierung an AD

Der Freeradius-Dienst installieren wir auf unserem dc1. Der Dienst kann man selbstverständlich bei größeren Umgebungen auch auf einem anderen Server installieren.
Nach der Installation des Freeradius Dienstes muss man den Dienst und die Access Point konfigurieren. Die APs müssen mit dem Dienst kommunizieren können. 
Auf dem APs muss man in WLAN Bereich (WPA/WPA2 - Enterprise) die IP-Adresse des Radiusdienstes und das gemeinsame Passwort für AP und den Radiusdienst eintragen. Das machen wir auf allen APs. Die SSID sollte auf jedem AP das Gleiche sein.
Auf dem Server tragen wir wieder alle APs mit den entsprechenden IP-Adressen und dem gemeinsamen Passwort.

Wie sollte die Verbindung funktionieren? WLAN-Gerät verbindet sich mit bestimmte SSID des WLANs. Auf dem Gerät kommt dann ein Fenster nach der Frage des Benutzernamen und des Passwortes. Der Radiusserver wird so konfiguriert, dass die Benutzerdaten der Domäne genutzt werden können. Wenn die Authentifizierung passt, bekommt das Gerät die entsprechende IP-Adresse, etc. Danach kann das Gerät auch ins Internet.

Unsere Konfigurationsdaten des Servers dc1 (Domänen Controller)

Betriebssystem: Debian 11
Servername: dc1
Domäne: schule.lan
IP-Adresse: 172.16.0.10
Netmask: 255.255.252.0
Gateway: 172.16.0.1
DNS: 172.16.0.10

Wir überprüfen zuerst, ob sich die Benutzer authentifizieren können. Wir haben schon in der Domäne SCHULE einen Benutzer manfred mit dem Passwort secret123. So testen wir es. Wenn NT Status mit OK rauskommt, ist alles in Ordnung.

 

root@dc1:~# ntlm_auth --request-nt-key --domain=SCHULE --username=manfred --password=secret123

 

Punkt
Wir installieren die benötigte Freeradius Pakete.

 

root@dc1:~# apt-get install freeradius

 

Punkt
In erstem Schritt brauchen wir Verbindung zwischen dem Freeradius-Dienst und den Access Points, das bedeutet, wir müssen dem Freeradius-Dienst mitteilen welche IP-Adressen haben die APs und mit welchem RADIUS Server Passwort sind die geschützt. Zu diesem Zweck nutzen wir die Datei /etc/freeradius/3.0/clients.conf. Am Ende dieser Datei können wir die benötigte Daten eintragen und die Datei speichern. In unserem Fall sind da zwei APs, hätten wir mehr, dann müssten wir alle benötigte eintragen.

 

client AP-Client1 {
     ipaddr = 172.16.0.11
     secret = secret123+-
}
 
client AP-Client2 {
     ipaddr = 172.16.0.12
     secret = secret123+-
}
Punkt
Jetzt müssen wir die APs konfigurieren. Beide APs bekomme die gleiche SSID: WLAN-MBS. Die IP-Adressen werden auf den APs eingetragen.
IP-Adresse: 172.16.0.11
Netmask: 255.255.252.0
Gateway: 172.16.0.1
Der zweite AP bekommt die IP-Adresse: 172.16.0.12

Auf jedem AP werden die gleiche Wireless Daten eingetragen, also die IP-Adresse des Freeradius-Dienstes und das gemeinsame RADIUS Server Passwort.
Als Beispiel habe ich ein TP-Link TL-WR902AC mit der IP: 172.16.0.11 genommen. Die anderen Geräte müssten auch die Möglichkeit haben, Wireless als WPA/WPA2-Enterprise zu konfigurieren. 
 
Punkt
Wir möchten zu Authentifizierung die Domänen-Benutzer verwenden. Aus diesem Grund werden die entsprechenden Dateien konfiguriert.
/etc/freeradius/3.0/mods-enabled/ntlm_auth
/etc/freeradius/3.0/mods-available/mschap
/etc/freeradius/3.0/sites-enabled/default
/etc/freeradius/3.0/sites-enabled/inner-tunnel
# Wenn wir eigenes Zertifikat erstellen, dann müssen wir noch die folgende Datei bearbeiten
/etc/freeradius/3.0/mods-enabled/eap

Punkt
Wir bearbeiten die Datei /etc/freeradius/3.0/mods-enabled/ntlm_auth. Den Eintrag program= müssen wir anpassen. In unserem Fall sollte das so aussehen, alles in einer Zeile.

 

program = "/usr/bin/ntlm_auth --request-nt-key --domain=SCHULE --username=%{mschap:User-Name} --password=%{User-Password}"

 

Wenn wir möchten, dass nur bestimmte Benutzer der Domäne Zugriff per WLAN bekommen, dann können wir auch das begrenzen. Wir erstellen in der Domänen eine Gruppe z.B. GG_WLAN und wir passen den oberen Eintrag an. Die Benutzer, die den Zugriff bekommen sollten, fügen wir in die Gruppe ein.

 

program = "/usr/bin/ntlm_auth --request-nt-key --domain=SCHULE --require-membership-of=SHULE\GG_WLAN --username=%{mschap:User-Name} --password=%{User-Password}"

 

Punkt
Wir bearbeiten die Datei /etc/freeradius/3.0/mods-available/mschap. Die Einträge sind sehr ähnlich wie in der Datei ntlm_auth. Wir suchen den Eintrag ntlm_auth = und wird in unserem Fall wie folgt angepasst. Alles in einer Zeile.

 

ntlm_auth = "/usr/bin/ntlm_auth --request-nt-key --domain=SCHULE --username=%{%{Stripped-User-Name}:-%{%{User-Name}:-None}} --challenge=%{%{mschap:Challenge}:-00} --nt-response=%{%{mschap:NT-Response}:-00}"

 

Wenn wir uns entschieden haben, den WLAN Zugriff nur für bestimmte Benutzer zu begrenzen, wie oben, dann müssen wir den Eintrag anpassen.

 

ntlm_auth = "/usr/bin/ntlm_auth --request-nt-key --domain=SCHULE --require-membership-of=SCHULE\GG_WLAN --username=%{%{Stripped-User-Name}:-%{%{User-Name}:-None}} --challenge=%{%{mschap:Challenge}:-00} --nt-response=%{%{mschap:NT-Response}:-00}"

 

In der gleichen Datei werden noch zwei Zeilen auskommentiert und angepasst.

 

winbind_username = "%{mschap:User-Name}"
winbind_domain = "SCHULE"

 

Punkt
Die Datei /etc/freeradius/3.0/sites-enabled/default wird bearbeitet. Es wird der Eintrag authenticate gesucht. Gleich in der nächsten Zeile machen wir den Eintrag ntlm_auth. Der Rest bleibt so wie es ist.

authenticate {
      ntlm_auth
...

 

Punkt
Die Datei /etc/freeradius/3.0/sites-enabled/inner-tunnel wird bearbeitet. Es wird der Eintrag authenticate gesucht. Gleich in der nächsten Zeile machen wir den Eintrag ntlm_auth. Der Rest bleibt so wie es ist.

authenticate {
      ntlm_auth
...
Punkt
Der Benutzer freerad wird der Gruppe winbindd_priv zugefügt. Die Rechte des Ordners /var/lib/samba/winbindd_privileged/ bitte überprüfen. Die Gruppe winbindd_priv sollte hier Lese- und Ausführrechte besitzen, wenn nicht, dann bitte setzen.

 

root@dc1:~# sudo usermod -a -G winbindd_priv freerad
root@dc1:~# chgrp winbindd_priv /var/lib/samba/winbindd_privileged/

 

Punkt
Die samba und freeradius Dienste bitte neu starten

 

root@dc1:~# systemctl restart samba-ad-dc.service
root@dc1:~# systemctl restart freeradius.service

 
Jetzt können wir uns mit einem WLAN Gerät mit dem definierten WLAN SSID verbinden. Wir nutzen dabei die Benutzer der Domäne, bzw. einen Benutzer, der sich in der definierten Gruppe befindet. Das ist von der Konfiguration abhängig.

Punkt
Sollten wir dennoch einen Bedarf haben, dass sich einige Benutzer per WLAN verbinden sollen, der nicht in der Domäne sind, dann können wir es wie folgt realisieren. Wir haben hier zwei Benutzer definiert. Die sollten in der Domäne nicht existieren. 
Am Ende der Datei /etc/freeradius/3.0/users fügen wir zwei Benutzer mit Passwörtern ein. z.B.

gast1 Cleartext-Password := "gast123", MS-CHAP-Use-NTLM-Auth := No
gast2 Cleartext-Password := "gast567", MS-CHAP-Use-NTLM-Auth := No

 

Wenn wir doch mehreren Benutzern, die nicht in der Domäne sind auch den WLAN-Zugriff ermöglichen wollen, dann können wir die Benutzer in einer separaten Datei definieren z.B. NoDomainUser.conf und nicht direkt in der users Datei. In der /etc/freeradius/3.0/users Datei müssen wir am Ende den entsprechenden Eintrag machen 
z.B.
$INCLUDE /etc/freeradius/3.0/NoDomainUser.conf.

...
$INCLUDE /etc/freeradius/3.0/NoDomainUser.conf

 

Erstelltes Zertifikat in die Radiuskonfiguration einbinden.

Wir haben ein neues Radius-Zertifikat erstellt. Wie man das macht, finden Sie es in dem Artikel
Konzept 1/Freeradius/Zertifikat.

 

Punkt
Die Datei /etc/freeradius/3.0/mods-enabled/eap wird bearbeitet. Die entsprechenden Pfade müssen angepasst werden.

private_key_file =
certificate_file =
ca_file=

Falls das Passwort geändert war, muss man auch das Passwort in dieser Datei anpassen.

 

              tls-config tls-common {
                               private_key_password = whatever
                               
                               # private_key_file = /etc/ssl/private/ssl-cert-snakeoil.key
                               private_key_file = /etc/freeradius/3.0/certs/server.key
                               ...

                               # certificate_file = /etc/ssl/certs/ssl-cert-snakeoil.pem
                               certificate_file = /etc/freeradius/3.0/certs/server.pem
                               ...

                               # ca_file = /etc/ssl/certs/ca-certificates.crt
                               ca_file = /etc/freeradius/3.0/certs/ca.pem

 

Punkt
Nach dem Neustart des Freeradius-Dienstes ist der Freeradius-Dienst mit dem von uns erstelltem Zertifikat einsatzbereit.

 

root@dc1~# systemctl restart freeradius.service