Freeradius mit MySQL, daloRADIUS und dynamische VLANs mit Ubiquiti Unifi

Dieser Beitrag handelt davon, wie man sich einen freeradius-Server aufsetzt, der per daloRADIUS per Webkonsole gepflegt werden kann und bei dem eine Authentifizierung per MAC-Adresse möglich ist. Über die entsprechende MAC-Adresse kann dann eine dynamische Zuweisung des VLANs gemacht werden. Dies ermöglicht eine Zuweisung von Geräten in die entsprechenden Netze, ohne das mehrere WLAN-SSIDs ausgestrahlt werden müssen. Ich habe ja bereits über das Thema hier geschrieben (802.1X und dynamische VLANs im WLAN mit Ubiquiti Unifi), die Einrichtung hier geht noch einen Schritt weiter und nutzt statt einer Datei für die Clients eine richtige Datenbank, weiterhin kann die Pflege weiterer Clients per Web-GUI gemacht werden oder alternativ auch per MySQL-Skript.

Ein paar vorweg Worte zur Installation

Ich habe ein bisschen gebraucht, um die ganze Geschichte sauber hinzubekommen. Dies liegt zum einen daran, dass es nicht “die eine Doku” dafür gibt, ich musste mir die Informationen über verschiedene Blogs, Foren und Videos zusammensammeln und so bündeln, dass die Installation funktioniert. Hinzu kommt, dass ich beim Thema Datenbanken nahezu blank bin an Kenntnissen, da mich das nie interessiert hat und ich nahezu keine Berührungspunkte mit dem Thema hatte.

Die Seiten und Videos, die mir bei dieser Einrichtung geholfen haben:

Debian als Basis des Setups

Ich nutze in meinem Fall ein Debian 10 in der aktuellen Version als VM für meine freeradius-Installation. Ihr könnt hier auch ein anderes System nutzen wie Ubuntu, CentOS oder was-auch-immer, ich weiß nur nicht ob die Befehle, Pakete und andere Dinge dann passen. Debian läuft sehr stabil und ich habe zig Systeme davon laufen, daher weiche ich auch hier nicht davon ab.

Ihr braucht eine VM in der Grundinstallation, wahlweise mit oder ohne Desktop (Ich installiere ohne, um Ressourcen zu sparen) und mit einer statischen IP-Adresse. Die Installation beschreibe ich hier nicht nochmal explizit, dafür gibt es unzählige Howto-Artikel in diesem Internetz.

Installation der benötigten Pakete

Für den Betrieb brauchen wir einige Pakete, die wir installieren müssen. Wir starten mit einem Update der Paketquellen und einem Update, falls notwendig.

Datenbank

Danach installieren wir die Datenbank, in meinem Fall MariaDB. Hier wäre auch MySQL direkt möglich, wenn gewünscht.

Um die Installation direkt abzusichern, empfiehlt sich der Aufruf von

Hiermit durchlaufen wir einen Assistenten, der die Installation absichert mit einem Kennwort, den Gast-Zugriff entfernt, nur einen Zugriff vom lokalen System aus zulässt usw. Nach Eingabe des neuen root-Kennworts kann man den Assistenten mit Enter durchlaufen, da die korrekten Eingaben alle als default hinterlegt sind.

Jetzt schauen wir uns an, ob der Dienst sauber läuft und setzen ihn dann auf Autostart.

Anlegen der Datenbank und einem eigenen radius-Benutzer

Wir erstellen nun eine neue Datenbank, einen neuen Benutzer und geben diesem Benutzer die vollen Rechte auf die Datenbank. Ändern Sie den Wert “KENNWORT” durch ein sicheres Kennwort Ihrer Wahl.

Damit hätten wir den Datenbank-Teil abgeschlossen. Kommen wir nun zur Installation von freeradius.

Freeradius

Damit wird der freeradius-Server installiert, und wahrscheinlich auch direkt gestartet. Es gibt die Möglichkeit, den Server auf der Kommandozeile mit visuellem Output zu starten. Dies zeigt immer sehr gut an, ob und was passiert. Das geht aber nur, wenn der Dienst nicht läuft, da sonst der Port schon belegt ist und ein erneuter Start nicht möglich ist. Daher beenden wir jetzt den Dienst und starten ihn danach manuell.

Das sieht gut aus, mit einem STRG+C beenden wir den Dienst wieder.

Um die Benutzer in der MySQL-Datenbank zu speichern, brauchen wir nun ein paar Befehle. Als erstes importieren wir eine Schema-Datei in unsere Datenbank, die wir erzeugt haben.

Wir brauchen hier das root-Kennwort der Datenbank.

Wir können nun prüfen, ob der Import funktioniert hat. Wichtig: Hier brauchen wir jetzt den radius-Benutzer, nicht den root.

Wir sehen hier, dass mehrere Tabellen hinzugefügt wurden.

Nun müssen wir die Anbindung an die Datenbank konfigurieren. Dies geschieht über die Datei /etc/freeradius/3.0/mods-available/sql

Hier müssen die folgenden Einträge angepasst werden:

Wert vorherWert nachher
driver = “rlm_sql_null”driver = “rlm_sql_mysql”
dialect = “sqlite”dialect = “mysql”

Zusätzlich müssen die vier Felder aktiviert werden und es müssen die korrekten Werte eingetragen werden:

  • server
  • port
  • login
  • password

Nun können wir die Datei verlinken, so dass sie aktiv genutzt wird.

Streng genommen müssen wir nun noch die Berechtigungen an der Datei anpassen, auch wenn die Datei auf 777 steht

Das geht mit

Wir können nun erneut prüfen, ob der Dienst noch sauber startet um sicherzustellen, dass wir keinen Fehler eingebaut haben:

Berechtigungen für die Access Points vergeben

Im nächsten Schritt müssen wir ein Shared Secret vergeben und einen IP-Bereich, aus dem die WLAN-Geräte sich authentifizieren dürfen. Dies wird gemacht in der Datei /etc/freeradius/3.0/clients.conf.

Hier muss in die Datei der folgende Block eingefügt werden:

Wie der Bereich heißt und wie groß er ist, ist euch überlassen. Man könnte hier theoretisch jeden AP mit seiner IP einzeln eintragen. Ich habe das /24-Netzwerk freigegeben, in dem die Geräte zuhause sind. Da in dem Netz sowieso nur Netzwerk-Geräte vorhanden sind, tut das der Sicherheit nicht wirklich einen Abbruch.

Aktivierung eines Default / Fallback-Netzes

Nun kommt ein sehr wichtiger Teil. Wenn Geräte, die nicht mit ihrer MAC-Adresse bekannt und eingetragen sind, einen Zugriff auf das Netzwerk bekommen sollen, muss dies aktiviert werden. Die einsprechende Einstellung ist in der Datei /etc/freeradius/3.0/mods-config/sql/main/mysql/queries.conf zu finden. Hier muss die folgende Zeile aktiviert werden:

Wenn dies nicht gemacht wird, werden unbekannte Geräte / MAC-Adressen abgelehnt und können keine Verbindung aufbauen.

Nun können wir erneut testen, ob der Start des Dienstes funktioniert:

Die Installation von daloRADIUS

Nun kommen wir zur Installation der daloRADIUS Weg-GUI. Basis hierfür ist der Apache2 Webserver. Wir benötigen hierfür ein PHP-Modul, welches unter Debian per default nicht mehr vorhanden ist (php-db). Da ohne dieses Paket die Weboberfläche aber nicht läuft, müssen wir es per Hand installieren. Erstmal können wir aber die normal verfügbaren Pakete installieren.

Nun kommen wir zu dem fehlenden Paket. Dazu besuchen wir die Seite https://packages.debian.org/stretch/all/php-db/download und wählen hier einen Spiegelserver unserer Wahl aus.

Nun laden wir daloRADIUS herunter und verschieben es in das Webserver-Verzeichnis.

Danach müssen wir die Konfig-Vorlagen-Datei kopieren auf den korrekten Namen:

Zuletzt müssen wir die Datei anpassen und die folgenden Zeilen anpassen

Angepasst werden müssen die Zeilen

Bei Bedarf kann noch das Logfile umgebogen werden, dies ist im weiteren Verlauf der Datei zu finden:

Die Datei speichern und verlassen.

Füllen der Datenbank

Nun müssen die Tabellen für daloRADIUS in die Datenbank importiert werden. Hierzu müssen wir uns im Verzeichnis /var/www/html/daloradius befinden, sonst findet der Befehl die Datei nicht.

Nun müssen wir noch ein paar Berechtigungen anpassen.

Erster Aufruf der daloRADIUS Web-GUI

Sind alle Befehle erfolgreich durchgelaufen, können wir nun die Webseite das erste Mal aufrufen. Dazu öffnen wir

Hat alles geklappt, werden wir von der folgenden Seite begrüßt:

Anmelden können wir uns mit
Benutzername: Administrator und
Kennwort: radius

Standard-Kennwort ändern

Um das Standard-Kennwort zu ändern, wechseln wir unter Config zu Operators und lassen uns die aktuellen Benutzer anzeigen.

Klickt man auf das Benutzerkonto, kann man hier das Kennwort ändern und speichern.

Anlegen der VLANs und Benutzergruppen

Im nächsten Schritt müssen wir nun dem System beibringen, welche VLANs existieren. Jedes VLAN kann mit einem sprechenden Namen (Gruppen-Name) ausgestattet werden, dies vereinfacht die Zuweisung später in der Weboberfläche.
Die VLANs werden direkt in die Datenbank geschrieben. Pro VLAN / Gruppe brauchen wir hier drei Zeilen Code. Um das alles ein bisschen besser zu beschreiben, hier eine Beschreibung der Zeilen:

Diese drei Einträge müssen wir für jedes VLAN erzeugen, was genutzt und zugewiesen werden soll.

Um nun ein Standard-Fallback-Netz bzw. -VLAN zu definieren, brauchen wir die folgenden zwei Zeilen Code:

Achtet unbedingt darauf, dass die Gruppe (das Attribut groupname) vorhanden ist! Heißt: Als Standard-Gruppe kann nur eine bereits vorhandene Gruppe ausgewählt werden.

Anlegen einer Clients per SQL-Befehl (Optional)

Wenn ihr einen oder mehrere Clients per MySQL-Befehl anlegen wollt, könnt ihr dies wie folgt machen:

Achtet darauf, dass das Format der MAC-Adressen mit den Einstellungen im Unifi Controller übereinstimmt. Wir haben an dieser Stelle die Einstellung noch nicht vorgenommen, das kommt noch.

Die Priorität beachten

Jeder Eintrag hat eine Priorität. Ich habe die Befehle hier so angepasst und gesetzt, dass die Priorität 0 überall vorhanden ist. Somit sind alle Einträge gleich priorisiert. Wenn z.B. der DEFAULT-Eintrag eine Priorität von 10 hat und die MAC-Adressen der Geräte eine Priorität 0 (wie sie erstellt wird, wenn nichts manuelles eingetragen wird), wird immer der DEFAULT-Eintrag ausgewählt und die manuell erstellten Einträge werden ignoriert.

Konfiguration des Unifi RADIUS-Profils

Wir melden uns nun im Ubiquiti Unifi-Controller an, gehen in die Einstellungen und wechseln hier unter Profiles in den Reiter RADIUS.

Dort legen wir einen neuen Eintrag an, der wie folgt aussieht:

Der Name des Profils ist euch überlassen. Als IP-Adresse muss nun die IP der freeradius-VM eingetragen werden, die Ports verbleiben auf den Standard-Einstellungen. Das Kennwort haben wir im Verlauf der Installation in der clients.conf definiert. Diesen Eintrag speichern wir ab.

RADIUS-basiertes WLAN erstellen

Im Unifi Controller wechseln wir in den Punkt Wireless Networks und erzeugen hier ein neues WLAN. Wichtig sind hier die folgenden Einstellungen:

  • Name: Der Name von eurem WLAN
  • Enabled: Macht Sinn, woll 🙂
  • Security: Das WLAN bekommt eine WPA2-Verschlüsselung mit einem Kennwort. Alternativ wäre hier auch WPA2 Enterprise möglich, wenn man die Sicherheit weiter erhöhen möchte.
  • VLAN: Hier wird automatisch die korrekte Einstellung gewählt, sobald man weiter unten die RADIUS-basierte Authentifizierung einschaltet. Diese Option sieht in neueren Controller-Versionen etwas anders aus.
  • RADIUS MAC AUTHENTICATION: Hier muss die Option aktiviert werden.
  • RADIUS Profile: Hier wählen wir das gerade angelegte Profil aus
  • MAC Address Format: Hier müssen wir nun einstellen, in welchem Format die Adressen erwartet werden. Dies muss übereinstimmen mit den Einträgen im freeradius-Server. Die MAC-Adresse aa-bb-cc-dd-ee-ff ist etwas anderes als aa:bb:cc:dd:ee:ff

Die restlichen Einstellungen können nach Bedarf gesetzt und eingestellt werden. Wir speichern das WLAN und machen gleich den ersten Test mit einem Endgerät.

Test des RADIUS Servers

Damit wir den freeradius-Server nun testen können, empfiehlt sich ein manueller Start mit dem Parameter -X:

Hier können wir dann sehen, ob die Verbindung passt oder ob es zu Problemen kommt.

Nun versuche ich, mich mit meinem Handy an dem neuen WLAN anzumelden.

Die Verbindung in meinem Fall funktioniert, ich werde am Netzwerk angemeldet. Da ich die MAC-Adresse von meinem Handy noch nicht eingetragen habe, falle ich in das Fallback-Netzwerk.

SQL-Fehler im Logfile

Ich hatte bei meinem System und auch auf dem Kundensystem, was ich installiert habe, diverse Fehlermeldungen im Logfile. Diese waren unter anderem:

(40) sql: ERROR: rlm_sql_mysql: ERROR 1054 (Unknown column ‘acctupdatetime’ in ‘field list’): 42S22

(62) sql: ERROR: rlm_sql_mysql: ERROR 1054 (Unknown column ‘acctinterval’ in ‘field list’): 42S22

Neben acctupdatetime und acctintervallwurden auch noch die Werte framedipv6address, framedipv6prefix, framedinterfaceid und delegatedipv6prefix angemerkt. Ursache hierfür ist, dass diese Einträge in der Datenbank nicht vorhanden sind. Ich habe einige Zeit gebraucht um herauszufinden, wie ich sie (korrekt) hinzufügen kann. Die benötigten Zeilen hierfür sind

In meiner Debian-basierten Installation hat das ausgereicht, um den Fehler bei der Anmeldung von einem Client zu beseitigen. Auf der Kundeninstallation, die ich vorgenommen habe, mussten noch ein paar mehr Einträge erzeugt werden. Der Befehl dazu ist immer gleich, allerdings ändert sich die Art der Einträge. Alle korrekten Werte können hier abgeguckt werden:
https://github.com/FreeRADIUS/freeradius-server/blob/master/raddb/mods-config/sql/main/mysql/schema.sql

Neue Clients anlegen per daloRADIUS

Auf der daloRADIUS-Admin Konsole können wir nun beginnen, die Clients einzutragen und den Netzen zuzuweisen.

Username und Password ist jeweils die MAC-Adresse des Clients, unter Group kann dann das gewünschte VLAN eingetragen werden. Im Reiter User Info empfiehlt es sich, einen sprechenden Namen für das Gerät bei Vorname oder Nachname einzutragen, dadurch ist auf der Hauptseite direkt sichtbar, um welches Gerät es sich handelt.

Nun muss der Eintrag gespeichert werden, danach kann sich das Gerät am WLAN anmelden und fällt automatisch in das korrekte VLAN.

Fazit

Mit diesen Einstellungen lässt sich eine SQL-unterstützte RADIUS-Authentifizierung mittels freeradius und daloRADIUS als Web-Frontend einrichten. Die Pflege der Geräte funktioniert einfach über einen Browser, und das RADIUS-System selbst ist nicht zwangsläufig an Ubiquiti Unifi-Geräte gebunden, hier wäre auch eine andere WLAN-Lösung möglich.

Wenn Fragen sind oder ihr generell was zu dem Thema loswerden wollt, hinterlasst mir einen Kommentar.


Sie benötigten persönliche Unterstützung oder haben nicht die richtige Lösung für Ihr Problem gefunden?

Dieser Blog wird von mir, Jan Kappen, in seiner Freizeit betrieben, hier beschreibe ich Lösungen für Probleme aller Art oder technische Anleitungen mit Lösungsansätzen.

Die berufliche Unabhängigkeit

Ich bin seit Januar 2020 vollständig selbstständig und habe meine eigene Firma gegründet, die Building Networks mit Sitz in Winterberg im schönen Sauerland. Hier stehe ich als Dienstleister gerne für Anfragen, Support oder Projekte zur Verfügung.

Die Firma Building Networks bietet Ihnen:

  • Hilfe und Support per Telefon, Fernwartung oder persönlich vor Ort
  • Projekt-Unterstützung
  • Ausgezeichnete Kompetenz zu den Themen
    • Microsoft Hyper-V
    • Microsoft Failover Clustering & HA
    • Storage Spaces Direct (S2D) & Azure Stack HCI
    • Veeam Backup & Recovery
    • Microsoft Exchange
    • Microsoft Exchange Hybrid Infrastruktur
    • Microsoft Active Directory
    • Microsoft Office 365
    • Ubiquiti
    • 3CX VoIP PBX
    • Fortinet Network Security
    • Baramundi Software
    • ...

Ich freue mich über Ihren Kontakt, weitere Informationen finden Sie auf der Webseite meiner Firma unter Building-Networks.de

Jan

Jan Kappen arbeitet seit 2005 in der IT. Er hat seine Ausbildung 2008 abgeschlossen und war bis 2018 als IT-Consultant im Bereich Hyper-V, Failover Clustering und Software Defined Storage unterwegs. Seit 2015 wurde er jährlich von Microsoft als Most Valuable Professional (MVP) im Bereich "Cloud & Datacenter Management" ausgezeichnet für seine Kenntnisse und die Weitergabe seines Wissens. Jan ist häufig auf Konferenzen als Sprecher zu finden, weiterhin bloggt er viel. Von September 2018 bis Dezember 2019 war Jan als Senior Network- und Systemadministrator bei einem großen mittelständischen Unternehmen im schönen Sauerland angestellt. Im Januar 2020 hat er den Sprung in die Selbstständigkeit gewagt und ist seitdem Geschäftsführer der Firma Building Networks in Winterberg. In seiner Freizeit kümmert er sich um das Freifunk-Netzwerk in Winterberg und Umgebung.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.