Hier zeige ich dir, wie du einen Freeradius-Server so einrichtest, dass er mit einem Active Directory (AD) zur Authentifizierung zusammenarbeitet. Mit dieser Konfiguration ist Folgendes möglich:
- Unterscheidung zwischen LAN und WLAN: Der Server erkennt, ob die Authentifizierung über ein kabelgebundenes Netzwerk (LAN) oder ein drahtloses Netzwerk (WLAN) erfolgt.
- MAC-Authentifizierung im LAN: Bei einer Authentifizierung im LAN wird die MAC-Adresse des Geräts mit der Users-Datei abgeglichen.
- LDAP- und MAC-Authentifizierung im WLAN: Für WLAN erfolgt die Authentifizierung über LDAP. Zusätzlich wird geprüft, ob die MAC-Adresse des Geräts in der Users-Datei für die verwendete SSID erlaubt ist.
Diese Anleitung basiert auf einem HP Switch und Aruba Access Points, die separat konfiguriert werden müssen.
Inhaltsverzeichnis
Systemvoraussetzungen
- Betriebssystem: Debian 12
- Softwareversionen:
- Freeradius 3.0
- Samba 4.x
- AD-Domain: Beispiel:
STANGNETH / stangneth.com
Vorbereitung
Installation der Pakete
apt update apt install freeradius freeradius-utils samba winbind libpam-winbind libnss-winbind krb5-user libpam-krb5
Beitritt zur AD-Domain
Bearbeiten der /etc/krb5.conf:
[libdefaults]
default_realm = STANGNETH.COM
dns_lookup_realm = false
dns_lookup_kdc = false
rdns = false
ticket_lifetime = 24h
forwardable = true
[realms]
STANGNETH.COM = {
kdc = dc.stangneth.com
admin_server = dc.stangneth.com
}
[domain_realm]
.stangneth.com = STANGNETH.COM
stangneth.com = STANGNETH.COM
Bearbeiten der /etc/samba/smb.conf:
[global] workgroup = STANGNETH security = ADS realm = STANGNETH.COM winbind use default domain = yes winbind offline logon = yes winbind refresh tickets = yes idmap config * : backend = tdb idmap config * : range = 3000-7999 idmap config STANGNETH : backend = rid idmap config STANGNETH : range = 10000-99999 template shell = /bin/bash template homedir = /home/%U kerberos method = secrets and keytab log file = /var/log/samba/%m.log log level = 1
Die Domain joinen:
net ads join -U admin
Überprüfen, ob der Beitritt erfolgreich war:
net ads testjoin Join is OK
Konfiguration von Freeradius
Module aktivieren
Sorge dafür, dass die notwendigen Module aktiviert sind. Dafür legst du symbolische Links in /etc/freeradius/3.0/mods-enabled/ an:
ln -s ../mods-available/mschap ln -s ../mods-available/ntlm_auth ln -s ../mods-available/eap ln -s ../mods-available/ldap
Modul eap anpassen
In der Datei /etc/freeradius/3.0/mods-enabled/eap passt du die Einstellungen für EAP an:
eap {
default_eap_type = peap
peap {
ssl {
dh_file = /etc/freeradius/3.0/certs/dh
certificate_file = /etc/freeradius/3.0/certs/server.pem
private_key_file = /etc/freeradius/3.0/certs/server.key
}
use_tunneled_reply = yes
}
}
Modul mschap anpassen
In /etc/freeradius/3.0/mods-enabled/mschap:
ntlm_auth = "/usr/bin/ntlm_auth --request-nt-key --allow-mschapv2 --username=%{%{Stripped-User-Name}:-%{%{User-Name}:-None}} --challenge=%{%{mschap:Challenge}:-00} --nt-response=%{%{mschap:NT-Response}:-00}"
use_winbind = yes
winbind_username = "%{Stripped-User-Name:-%{User-Name}}"
winbind_domain = "STANGNETH"
with_ntdomain_hack = yes
Modul ldap anpassen
In /etc/freeradius/3.0/mods-enabled/ldap:
ldap {
server = "ldaps://dc.stangneth.com"
identity = "cn=radius,dc=stangneth,dc=com"
password = "Str0ngSecre3t!"
base_dn = "dc=stangneth,dc=com"
filter = "(sAMAccountName=%{Stripped-User-Name:-%{User-Name}})"
start_tls = no
tls {
ca_file = /etc/freeradius/3.0/certs/ca.pem
}
}
Proxy-Konfiguration
In der Datei /etc/freeradius/3.0/proxy.conf fügst du die Realms hinzu, um die integrierte Windows-Authentifizierung zu ermöglichen:
realm stangneth.com {
type = radius
authhost = LOCAL
accthost = LOCAL
}
realm STANGNETH {
type = radius
authhost = LOCAL
accthost = LOCAL
}
default-Datei erweitern
Die Datei /etc/freeradius/3.0/sites-enabled/default enthält einige wichtige Regeln. Hier ein Beispiel für WLAN- und LAN-Unterscheidung mit Abfrage der MAC aus der users Datei im authorize { } Block:
if (&Service-Type == Login-User) {
files
}
if (&NAS-Port-Type == "Wireless-802.11") {
-ldap
if ((ok || updated) && User-Password && !control:Auth-Type) {
update control {
&Auth-Type := ldap
}
}
}
if (&Service-Type != Login-User) {
rewrite_calling_station_id
if (&Calling-Station-Id) {
update request {
User-Name := "%{Calling-Station-Id}"
}
}
files
if (&reply:Allowed-SSIDs) {
update control {
Allowed-SSIDs := "%{reply:Allowed-SSIDs}"
}
}
if (&NAS-Port-Type != "Wireless-802.11") {
if (&reply:Tunnel-Private-Group-Id) {
update reply {
Tunnel-Type := VLAN
Tunnel-Medium-Type := IEEE-802
Tunnel-Private-Group-Id := "%{reply:Tunnel-Private-Group-Id}"
}
update control {
Auth-Type := Accept
}
} else {
update control {
Auth-Type := Accept
}
update reply {
Tunnel-Type := VLAN
Tunnel-Medium-Type := IEEE-802
Tunnel-Private-Group-Id := 666
}
update {
&Tmp-String-0 := "Fallback VLAN 666 wurde angewendet"
}
}
} else {
if (!&control:Allowed-SSIDs) {
reject
} else {
if (&Aruba-Essid-Name && &control:Allowed-SSIDs) {
if ("%{control:Allowed-SSIDs}" =~ /(^|[|])%{Aruba-Essid-Name}([|]|$)/) {
u update control { Tmp-String-0 := "WLAN_OK" }
} else {
reject
}
}
}
}
} else {
noop
}
Dieser Abschnitt sorgt dafür, dass Nutzer je nach Netzwerkzugriff (LAN oder WLAN) unterschiedliche Authentifizierungsregeln durchlaufen.
Inner-Tunnel-Konfiguration
In der Datei /etc/freeradius/3.0/sites-enabled/inner-tunnel:
server inner-tunnel {
authorize {
preprocess
mschap
}
authenticate {
Auth-Type MS-CHAP {
mschap
}
}
}
Users-Datei anpassen
In /etc/freeradius/3.0/users fügst du eine strukturierte Users-Datei hinzu:
#########################################################
# FreeRADIUS Users-Datei
# Strukturierte Eintraege nach Kategorien:
# - VLAN-Zuweisungen fuerr kabelgebundene Geraete
# - WLAN-Zugriff basierend auf SSID
#########################################################
#########################################################
# VLAN-Zuweisungen fuer kabelgebundene Geraete (LAN)
#########################################################
# PC1
00:11:4B:04:8C:F7 Cleartext-Password := "00114b048cf7"
Tunnel-Type = VLAN,
Tunnel-Medium-Type = IEEE-802,
Tunnel-Private-Group-Id = 100
# PC2
38:EF:E3:0A:61:53 Cleartext-Password := "38efe30a6153"
Tunnel-Type = VLAN,
Tunnel-Medium-Type = IEEE-802,
Tunnel-Private-Group-Id = 200
#########################################################
# WLAN-Zugriff basierend auf SSID
#########################################################
# user1-lap
AC-84-B1-66-5A-DA Cleartext-Password := "ac84b1665ada"
Allowed-SSIDs := "SSID1"
# user2-lap
A0-02-C8-EB-DD-EF Cleartext-Password := "a002c8ebddef"
Allowed-SSIDs := "SSID1|SSID2"
#########################################################
# VLAN-Zuweisungen fuer Drucker (LAN)
#########################################################
# Drucker1
58:38:79:66:C2:1F Cleartext-Password := "58387966C21f"
Tunnel-Type = VLAN,
Tunnel-Medium-Type = IEEE-802,
Tunnel-Private-Group-Id = 300
Berechtigungen setzen
Erstelle die Gruppe winbindd_privileged, falls sie nicht existiert:
groupadd winbindd_privileged usermod -aG winbindd_privileged freerad
Setze die korrekten Berechtigungen für das Verzeichnis:
mkdir -p /var/run/samba/winbindd_privileged chown root:winbindd_privileged /var/run/samba/winbindd_privileged chmod 750 /var/run/samba/winbindd_privileged
Starte Winbind neu:
systemctl restart winbind
Fehlerbehebung
Debugging
Starte Freeradius im Debug-Modus:
freeradius -X
Disclaimer
Diese Anleitung dient als Orientierung und sollte an die jeweilige Umgebung angepasst werden. Die Artikel sind ausschließlich zu Testzwecken gedacht, und ich übernehme keine Haftung für eventuelle Schäden oder Fehlfunktionen. Ich empfehle, jede Konfiguration gründlich zu prüfen und in einer sicheren Testumgebung auszuprobieren. Gerne stehe ich Ihnen für eine individuelle Beratung und Umsetzung zur Verfügung.
Schreibe einen Kommentar