Categories:

IPSK mit Freeradius am Cisco 9800 WLC

Veröffentlicht von empy
Lesezeit: 6 Minuten

IPSK ist eine Authentifizierungsmethode, die auf Pre-Shared-Key (PSK) basiert, jedoch ermöglicht, dass nicht alle Clients auf demselben WLAN-Netzwerk denselben PSK verwenden müssen. Stattdessen können die Clients nach Geräteklasse oder anhand anderer Kriterien gruppiert werden, wobei jedem Gerät (oder Gruppe von Geräten) ein eigener PSK zugewiesen wird. Durch die Kombination von IPSK mit dynamischer VLAN-Zuweisung können Zonen aufgebaut werden, was insbesondere für IoT-Geräte von Vorteil ist, da viele dieser Geräte 802.1X nicht unterstützen und man diese Geräte meist in einem separaten Netz haben möchte.

Technisch handelt es sich bei IPSK um eine klassische WPA2-PSK-Lösung, die um eine MAC-Authentifizierung erweitert wird (dem sog. MAC Authentication Bypass, MAB). Konkret bedeutet dies, dass der WLAN-Controller eine Radius-Anfrage schickt, die die MAC-Adresse des WLAN-Endgeräts beinhaltet. Der Radius-Server lehnt die Anfrage entweder ab oder akzeptiert die Anfrage.

Wird die Anfrage akzeptiert, schickt der Radius-Server mit seinem Access-Accept-Frame zusätzliche Attribute wie den individuellen WPA2-PSK für die MAC-Adresse (also dem WLAN-Client) oder eine VLAN ID, mit der der WLAN-Client dann vom WLAN-Controller einem festen VLAN zugeordnet wird. Auch ein lesbarer Username ist möglich. Schickt der Radius-Server nur das Access-Accept-Frame ohne PSK, wird derjenige PSK verwendet, der am WLAN-Controller unmittelbar an der SSID hinterlegt wurde.

Kennt der Radius-Server die MAC-Adresse nicht, erfolgt ein Access-Reject und der WLAN-Client kann sich nicht mit dem WLAN verbinden, selbst wenn er den korrekten WPA2-PSK kennt. Meldet sich ein WLAN-Endgerät mit gespoofter MAC-Adresse im WLAN an, benötigt er dennoch den korrekten WPA2-PSK, der selbiger MAC-Adresse zugeordnet ist. Ohne passenden Pre-Shared-Key wird der WLAN-Client abgelehnt. Und das ist gut so, denn schließlich ist ein MAC-Filter allein keine sichere Zugangsbeschränkung ins WLAN. Nur wenn der PSK vom WLAN-Endgerät mit dem am WLAN-Controller definierten (bzw. per Radius erhaltenen IPSK) übereinstimmt, erhält das Endgerät Zugang zum WLAN.

Der Grund für die Durchführbarkeit des Szenarios liegt in der Logik des WLAN-Verbindungsaufbaus: Die Anmeldung per MAC-Adresse ist Teil der Association und findet statt, bevor der eigentlich so wichtige 4-Way-Handshake beginnt. Der WLAN-Controller kennt also den individuellen PSK für den ankommenden Client bereits anhand seiner MAC-Adresse und kann bei Radius den jeweiligen PSK anfragen, bevor der 4-Way-Handshake stattfindet.  Das WLAN-Endgerät bekommt davon überhaupt nichts mit!

Freeradius installieren

Ich arbeite mit einer Debian-12-VM. Zuerst überprüfen wir, ob die Distribution aktuell ist, dann installieren wir Freeradius.


sudo apt update
sudo apt upgrade
sudo apt install freeradius

Einfach dem Dialog folgen, mit Ja bestätigen.

WLAN-Controller als Radius Client anlegen und Secret vergeben

Damit der WLAN-Controller später vom Radius-Server überhaupt Antworten auf seine Request bekommt, muss der WLAN-Controller in Freeradius als Client hinterlegt werden. An dieser Stelle hinterlegen wir auch gleich ein passendes Secret. Die IP-Adresse ist die Adresse des WLAN-Controllers.

sudo nano /etc/freeradius/3.0/clients.conf

client 9800wlc {
        ipaddr          = 192.168.190.200
        secret          = ganzwichtigtesgeheimespasswort1
}

User in Radius anlegen

Anschließend die Users-File öffnen mit folgendem Befehl:

sudo nano /etc/freeradius/3.0/users

Im Users-File pro WLAN-Endgerät muss folgender Datenblock in die Users-Datei. Wichtig: Bitte die MAC-Adresse durch die WLAN-MAC-Adresse des Endgeräts ersetzen, sowohl beim Username als auch beim Cleartext-Passwort. Die MAC-Adresse muss in Kleinbuchstaben notiert werden.

Bitte auch die VLAN-ID anpassen, die Radius an den WLAN-Controller zurückgeben soll (der WLC setzt den Client dann in das entsprechende VLAN) sowie natürlich den PSK anpassen. Ich überschreibe in diesem Zuge gleich den Username, welcher im Standard die MAC-Adresse ist, durch einen lesbaren Klarnamen. So erkenne ich meine Endgeräte am WLAN-Controller einfach besser.

xxxxxxxxxxxx    Cleartext-Password := "xxxxxxxxxxxx"
                Tunnel-Type = "VLAN",
                Tunnel-Medium-Type = "IEEE-802",
                Tunnel-Private-Group-ID = 777,
                Cisco-AVPair = "psk-mode=ascii",
                Cisco-AVPair += "psk=presharedkey1",
                User-Name += "Lesbarer Username 1"

yyyyyyyyyyyy    Cleartext-Password := "yyyyyyyyyyyy"
                Tunnel-Type = "VLAN",
                Tunnel-Medium-Type = "IEEE-802",
                Tunnel-Private-Group-ID = 777,
                Cisco-AVPair = "psk-mode=ascii",
                Cisco-AVPair += "psk=zweitepsk",
                User-Name += "Lesbarer Username 2"


zzzzzzzzzzzz    Cleartext-Password := "zzzzzzzzzzzz"
                Tunnel-Type = "VLAN",
                Tunnel-Medium-Type = "IEEE-802",
                Tunnel-Private-Group-ID = 350,
                Cisco-AVPair = "psk-mode=ascii",
                Cisco-AVPair += "psk=einepsk",
                User-Name += "Lesbarer Username 3"

Am besten ihr bereitet obige Liste für alle eure WLAN-Endgeräte vor, die ins WLAN dürfen. Ein Endgerät, welches hier nicht aufgeführt wird, darf per Default der Radius-Konfiguration später nicht ins WLAN, denn der Radius-Server sendet für alle MAC-Adressen, welche nicht in obiger Liste stehen, ein Access-Reject.

Nun müssen wir Freeradius neu starten, damit die geänderten Konfigurationsdateien eingelesen und angewendet werden:

sudo service freeradius restart

Konfiguration mit radtest überprüfen

Die Konfiguration kann mit dem Tool radtest (kommt mit der Installation von Freeradius) getestet werden. Dazu einfach den Befehl in der CLI absetzen.

radtest xxxxxxxxxxxx  xxxxxxxxxxxx  localhost 1 testing123

Der Befehl erwartet die Parameter Username (eure Client-MAC-Adresse), das Cleartext-Passwort sowie den Client samt Radius-Secret. Womöglich habt ihr es bereits gesehen: localhost war in der Konfigurations-Datei der Clients /etc/freeradius/3.0/clients.conf standardmäßig hinterlegt. Deshalb funktioniert der obige Befehl.

radtest xxxxxxxxxxxx  xxxxxxxxxxxx  localhost 1 testing123

Sent Access-Request Id 37 from 0.0.0.0:43467 to 127.0.0.1:1812 length 82
        User-Name = " xxxxxxxxxxxx "
        User-Password = " xxxxxxxxxxxx "
        NAS-IP-Address = 127.0.1.1
        NAS-Port = 1
        Message-Authenticator = 0x00
        Cleartext-Password = " xxxxxxxxxxxx "
Received Access-Accept Id 37 from 127.0.0.1:1812 to 127.0.0.1:43467 length 134
        Tunnel-Type:0 = VLAN
        Tunnel-Medium-Type:0 = IEEE-802
        Tunnel-Private-Group-Id:0 = "777"
        Cisco-AVPair = "psk-mode=ascii"
        Cisco-AVPair = "psk= presharedkey1"

Wenn ihr eine MAC-Adresse als Username angebt, welche ihr vorher in der Users-Datei angelegt habt, dann solltet ihr ein Access-Accept erhalten sowie vom Radius-Server VLAN-ID uns WPA2-PSK angezeigt bekommen. Gebt ihr eine MAC-Adresse ein, die ihr nicht definiert habt, wird eure Anfrage mit Accept-Reject abgelehnt.

Firewall-Regel anlegen

Unter Umständen braucht ihr eine Firewall-Regel, die die Kommunikation zwischen WLAN-Controller und Radius-Server zulässt. Gebt dann die Ports 1812 (Authorization) und 1813 (Accounting) frei.

WLAN-Controller mit Freeradius verknüpfen

Im nächsten Schritt bereiten wir den WLAN-Controller auf die Zusammenarbeit mit Freeradius vor. Konkret müssen wir Freeradius als AAA-Server hinterlegen, dann müssen wir in der SSID den MAC Authentication Bypass aktivieren.

Für das Setup gehe ich davon aus, dass bereits eine reguläre SSID / Policy mit WPA2-PSK und VLAN-ID eingerichtet wurde. Diese werde ich um die IPSK-Funktionalität ergänzen.

AAA Server einrichten

Zuerst machen wir Freeradius dem WLAN-Controller bekannt. Dazu unter „Configuration -> Security -> AAA -> Servers / Groups -> Radius -> Servers“ einen neuen Radius-Server eintragen, in unserem Fall der Freeradius-Server.

Ihr braucht natürlich die IP-Adresse sowie das Secret, dass wir unter Freeradius in /etc/freeradius/3.0/clients.conf angelegt haben.

Damit der AAA-Server verwendet werden kann, muss am WLAN-Controller eine Server Group erstellt werden. Dort wird unter anderem hinterlegt, dass der WLAN-Controller die MAC-Adresse nutzt, um die Clients beim Radius-Server anzumelden: „Configuration -> Security -> AAA -> Servers / Groups -> Radius -> Server Groups“

Fügt also den eben angelegten Radius-Server den Assigned Servers hinzu und vergesst nicht, bei MAC-Filtering „mac“ auszuwählen (siehe Bild).

AAA Authorization List

Nun benötigen wir noch eine AAA Authorization List, die später dazu dient, den MAC Authentication Bypass in den Sicherheitseinstellungen der SSID mit dem Radius-Server zu verbinden.

Dazu unter: “Configuration -> Security -> AAA -> AAA Method List -> Authorization” eine neue AAA Authorization Method List erstellen.

Bei Type müsst ihr „network“ auswählen, dann greift die MAC Filter Authorization. Bei Group Type nehmt ihr „group“ für die AAA Authorization. Fügt unten eure Freeradius-Gruppe hinzu.

AAA Override

Nun muss an der bestehenden Policy zur gewünschten SSID der AAA Override aktiviert werden. Nur so nimmt der WLAN-Controller die Attribute für den PSK und VLAN-ID vom Radius-Server an.

Dazu unter: “Configuration -> Tags & Profiles -> Policy -> Advanced -> „AAA override“ aktivieren.”

SSID mit IPSK verknüpfen

Als abschließender Schritt müsst ihr nun den MAC Authentication Bypass an der SSID aktivieren. Dazu unter „Configuration -> Tags & Profiles -> WLANs“ die gewünschte SSID auswählen und im Reiter „Security / Layer 2“ den Haken für „MAC Filtering“ aktivieren.

Sobald „MAC Filtering“ aktiviert wurde, erscheint eine Auswahlbox für die „Authorization List“. Wählt dort die eben erstellte AAA Authorization List aus.

Wenn ihr nun mit „Update & Apply to Device“ bestätigt, dann wird eure neue IPSK-Konfiguration aktiviert. Testet sie ausgiebig!