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.

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

Beitritt zur AD-Domain

Bearbeiten der /etc/samba/smb.conf:

[global]
   workgroup = STANGNETH
   security = ADS
   realm = STANGNETH.COM
   winbind use default domain = yes
   winbind offline logon = 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 ntlm_auth anpassen

In /etc/freeradius/3.0/mods-enabled/ntlm_auth:

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

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 = yes
  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}([|]|$)/) {
                    update control {
                        Auth-Type := Accept
                    }
                } 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.