Skip to content

Radius Grundlagen

Das Radius Protokoll findet vielfache Anwendung im Netzwerk bzw. IT Umfeld. Primär wird es zur Nutzer Authentisierung verwendet, kann aber auch Accounting Aufgaben übernehmen. Es kommt häufig bei der zentralen Netzwerk Zugangskontrolle im LAN oder WLAN zum Einsatz immer in Verbindung mit Port Security nach 802.1x bzw. WPA2/3-Enterprise oder auch Mac Adress Authentisierung (Mac Authentication Bypass, MAB) bzw. einer Kombination beider Verfahren. (Flexible Authentication) Zur Netzwerk Zugangs Sicherheit gehört ebenso die zentrale Authentisierung von VPN Zugängen, WLAN Hotspots oder Management Zugriffen auf Infrastruktur Komponenten u.a. Hierbei kann es u.a. dynamische VLANs, Accesslisten und auch QoS Einstellungen nutzerbezogen zuweisen. Radius ist quasi die zentrale "Ausweiskontrolle" im Netzwerk bzw. IT Umfeld und sichert so den Zugang zum Netzwerk. In klassischen Microsoft Umgebungen ist dies sehr oft das Tandem AD mit NPS (Radius). Zudem bieten einige Hersteller Radius Server Funktionen auf ihren Switches und Routern wie unter Anderen z.B. Mikrotik. Eine freie, kostengünstige Alternative zu NPS ist der hier vorgestellte Freeradius Server als meistgenutzte Open Source Radius Lösung. Im Default wird Freeradius etwas sperrig über Textdateien konfiguriert, was in kleinen Netzwerkumgebungen mit wenig Nutzern noch tolerabel ist aber in größeren Netzen schnell an seine Management Grenzen stößt. Zudem ist es im Gegensatz zu einem GUI fehleranfälliger.

Das folgende Praxistutorial beschreibt eine einfache Lösung mit der Bindung des Freeradius Servers an eine SQL Datenbank und ein zentrales, Webbrowser basiertes Benutzermanagement mit dem freien Daloradius WebGUI. Über diese Browser Schnittstelle können zusätzlich auch CSV basierte Nutzerlisten im- und exportiert werden. Diese Kombination bietet nicht nur einen Radius gesichterten Zugang zum Netzwerk sondern sichert auch den Management Zugang und den von VPN Nutzern. Mit dem Browser basierten Management ist eine einfache, schnelle und sehr flexible User- (802.1x) und Mac Adress (MAB) Verwaltung der Netzwerk Zugangssicherheit inklusive der dynamischen Zuweisung von VLANs, Accesslisten und QoS Settings gegeben. Die drei Basiskomponenten sind der Freeradius Server, ein schneller Nginx Webserver und eine MySQL / MariaDB SQL Datenbank.


🧰 Voraussetzungen

  • Debian/Ubuntu-Server (getestet mit Ubuntu 22.04)
  • Root-Zugriff oder Benutzer mit sudo-Rechten
  • Internetverbindung

🏗️ Grundinstallation aller Komponenten

Das Tutorial beschreibt die Installation aller erforderlichen Komponenten auf einem klassischen, Debian basiertem Linux (Ubuntu, Mint, Raspberry Pi OS etc.) und nutzt dafür die normale Standard apt Package Installation mit apt install. Der Installationsprozess geht von einem Minimal Basissystem mit oder ohne GUI aus und erfordert durchgängig Root User (sudo su) Rechte! Die Installation gilt analog auch für alle anderen Linux Distributionen mit ggf. anderen Dateipfaden. Alle Schritte sind sowohl für eine bare Metal Installation als auch für eine VM grundsätzlich gleich. Als Texteditor zum Anpassen der Konfigurationsdateien wird der bordeigene nano Texteditor verwendet. Zum Troubleshooting der TCP/IP Kommunikation empfiehlt es sich mit apt install tcpdump ein Netzwerk Sniffer Tool als helfendes Werkzeug mit zu installieren. Ein klein wenig Linux Basiswissen sollte vorhanden sein. Los gehts...


🗃️ Installation MariaDB SQL Server

apt install mariadb-server

🗃️ Radius Datenbank erstellen

Im ersten Schritt loggt man sich mit dem Root User Passwort im Datenbank Management ein und erzeugt nacheinander mit den folgenden Kommandos eine SQL Datenbank und den dazugehörigen Nutzeraccount. Der hier verwendete Datenbankname ("radiusdb"), Nutzername ("raduser") und das Nutzerpasswort ("geheim123") sind ggf. auf eigene Namensgebung anzupassen und unbedingt zu merken!

mariadb -u root -p

CREATE DATABASE radiusdb;
CREATE USER 'raduser'@'localhost' IDENTIFIED BY 'geheim123';  
GRANT ALL ON radiusdb.* TO raduser@localhost;
FLUSH PRIVILEGES;

Mit "exit" verlässt man die Datenbankverwaltung.

Weiter geht es mit dem Freeradius Server...


📦 Installation Freeradius Server

apt install freeradius freeradius-mysql freeradius-utils 

⚠️ Mit der clients.conf und der eap Datei sind zwei wichtige Konfigurationsdateien im Freeradius vorab anzupassen damit der Server Radius Requests aus dem lokalen Netz(en) annimmt und PEAP Requests richtig handhabt.

Dazu editiert man mit dem nano Texteditor die Datei clients.conf im Konfig Verzeichnis des Freeradius.

nano /etc/freeradius/3.0/clients.conf

und definiert dort seine lokalen IP Netze aus denen Radius Anfragen kommen sowie das Radius Server Passwort mit dem sich diese Netzwerk Komponenten am Server ausweisen. Z.B. wenn das Management IP Netz 192.168.188.0 /24 und das Radius Server Passwort testing123 lautet: client1.

Die Netzmaske kann hier bequem als Wildcard verwendet werden. Weitere IP Netze fügt man analog hinzu. Ein zusätzlicher Netz Eintrag z.B. 10.10.0.0 /16 würde z.B. Radius Requests aus allen 10.10.x.y. Subnetzen erlauben. Die Bezeichnungen "network-1" usw. sind rein kosmetisch und kann immer individuell angepasst werden wie z.B. "Management" oder "Labornetz". Anmerkung zur clients.conf Datei: Diese o.a. Anpassung der clients.conf Datei ist nicht zwingend nötig und kann auch weggelassen werden. Allerdings müssen diese Authenticator IP Adressen (AP, Switch, etc.) dann später in der Datenbank über das WebGUI im Menüpunkt "Management -> NAS" vorab erfasst werden! Andernfalls nimmt der Radius Server aus Sicherheitsgründen keine Anfragen dieser Netzwerk Komponenten an. Ob man diese Authenticator Netze bzw. Adressen statisch, wie hier in der clients.conf Datei, vordefiniert oder später zentral über WebGUI und Datenbank erfasst, ist eine reine Management Geschmacksfrage.

Die nächste anzupassende Datei ist die EAP Konfig Datei:

nano /etc/freeradius/3.0/mods-available/eap

Dort sucht man den Abschnitt "peap { " und setzt dort den Parameter use_tunneled_reply = yes auf yes (Suchen im nano Editor mit w)

Eine weitere kosmetische Anpassung, die nicht betriebsrelevant ist, betrifft die TLS Version um Warnmeldungen im Log vorzubeugen. Man sollte die alten TLS Konfig Kommandos vollständig mit "#" einkommentieren wenn nicht schon geschehen. tls1 Und im nächsten Zug ausschliesslich nur noch die tls_min_version, tls_max_version Parameter nutzen. Da der TLS Standard 1.3 noch nicht abgeschlossen ist, macht man mit Ver. 1.2 nichts falsch und schont das Serverlog. tls2

Mit und sichert man im nano Editor beide geänderten Dateien clients.conf und eap.


🔐 Freeradius Server für SQL Datenbank anpassen

Damit Freeradius zusammen mit der statischen User Datei auch die SQL Datenbank zur Nutzerabfrage verwendet, ist vorab noch etwas Handarbeit erforderlich. Dazu stoppt man zuerst den Radius Server mit

systemctl stop freeradius

Jetzt kopiert man die Schema Datei in die Datenbank:

mariadb -u root -p radiusdb < /etc/freeradius/3.0/mods-config/sql/main/mysql/schema.sql

Das importierte Schema überprüft man mit:

mariadb-show radiusdb

Anschliessend editiert man mit dem nano Editor die Freeradius SQL Konfigurations Datei sql :

nano /etc/freeradius/3.0/mods-available/sql

Hier passt man jetzt die Parameter zur Nutzung der MySQL/MariaDB Datenbank an. Dazu setzt man im Abschnitt "sql {" den dialect auf mysql und kommentiert mit einem "#" davor den Parameter driver = "rlm_sql_null" ein und entfernt gleichzeitig vor driver = "rlm_sql_${dialect}" das Kommentarzeichen "#".

Danach sucht man den Abschnitt mysql {...} und versieht dort alle TLS Parameter mit einem Kommentarzeichen "#" am Anfang der Zeile. Da die Datenbank und der Freeradius Server auf dem gleichen Server arbeiten ist TLS nicht erforderlich.

Nun scrollt man herunter zum Parameter # Connection info: der die Zugangsdaten zur oben erstellten SQL Datenbank beinhaltet und ändert diese auf den oben gesetzten Datenbanknamen sowie User und Passwort:

Zum Abschluss ändert man noch etwas weiter unten den Parameter read_clients = yes auf yes.

Damit sind alle Änderungen in dieser Datei abgeschlossen. Mit und sichert man im nano abschliessend diese SQL Konfig Datei.

Final sind dann noch das SQL Modul im Freeradius zu aktivieren und der Group Owner richtig zu setzen. Dies erledigen die 2 folgenden Kommandos:

ln -s /etc/freeradius/3.0/mods-available/sql /etc/freeradius/3.0/mods-enabled/
chown -h freerad:freerad /etc/freeradius/3.0/mods-enabled/sql

⚙️ Freeradius Logging

Normalerweise logt der Freeradius alle akzeptierten und zurückgewiesenen Authentisierungen in der Default Einstellung nicht mit! Das ist verständlich, denn so ein Log kann in größeren Umgebungen sehr schnell sehr groß werden mit entsprechenden Nachteilen in Bezug auf den Speicherplatz. In kleineren Umgebungen oder Heimnetzen ist dies aber ggf. tolerabel, entsprechenden Speicherplatz vorausgesetzt. Das Logging des Freeradius ist optional und lässt sich granular einstellen indem es z.B. nur abgewiesene oder nur akzeptierte Authentisierungen oder auch beides anzeigt. Hier muss jeder nach seinen Vorlieben selber entscheiden. Im Zweifel belässt man es wie es ist. (Default = Logging deaktiviert)

Die Logging Einstellungen werden in der Server Konfigurations Datei radiusd.conf im Abschnitt "log { " vorgenommen.

nano /etc/freeradius/3.0/radiusd.conf

auth = no -> Kein Logging der Authentisierung (Default), "yes" = loggt sowohl abgewiesene als auch akzeptierte Authentisierungen auth_accept = "yes" loggt nur akzeptierte Authentisierungen (Macht nur Sinn wenn "auth = no" gesetzt ist!) auth_reject = "yes" loggt nur abgewiesene Authentisierungen (Macht nur Sinn wenn "auth = no" gesetzt ist!) auth_badpass und auth_goodpass = loggen die falschen bzw. richtigen Passwörter abgewiesener oder akzeptierter Authentisierungen. (auth_badpass = yes macht hier ggf. Sinn) freelog Tip: Man sollte an Authentisierungen nur das loggen was man wirklich sehen will!


✅ Freeradius Funktion checken

Sind die o.a. Schritte alle erledigt, kann man mit dem Kommando

freeradius -X 

den Radius Server testweise manuell im Debug Mode starten. Dieser sollte, wenn alles richtig konfiguriert wurde, mit der Meldung: "Ready to process requests" am Ende antworten! stoppt den Debug Mode wieder.

War dieser Test fehlerfrei, wird der Freeradius danach wieder als Daemon (Dienst) gestartet mit:

systemctl restart freeradius 

🔐 Freeradius Server Zertifikate

Die Zertifikats Erstellung ist optional und muss nur dann durchgeführt werden wenn man mit dem Client den Radius Server per Zertifikat überprüfen möchte (Security) oder auch auf der Benutzerseite mit User Zertifikaten statt Username/Passwort (PSK) arbeiten möchte. Mit cd /etc/freeradius/3.0/certs/ ins Zertifikats Verzeichnis wechseln Hier zuerst mit rm -f .pem .der .csr .crt .key .p12 serial index.txt alle ggf. vorhandenen alten Zertifikatsdaten löschen. Die weitere Zertifikatserstellung mit der Einrichtung der CA, des Server Zertifikats und ggf. Nutzerzertifikaten für 802.1x beschreibt dieses Tutorial mit OpenSSL. Wer eher mit einem GUI arbeitet sollte den Klassiker XCA zur Zertifikatsverwaltung nutzen der für alle Betriebssysteme frei verfügbar ist. Eine andere Option ist die Fraunhofer Initiative Volksverschlüsselung. Es gibt viele Wege nach Rom...

👉🏽 Bei Windows Client Zertifikaten muss zwingend die EKU "extendedKeyUsage=clientAuth" eingefügt werden! Ein Forenthread beschreibt HIER die korrekte Vorgensweise und Erstellung ebenfalls mit OpenSSL. Die erstellten Zertifikate werden in das o.a. .../certs Verzeichnis kopiert und sind dann in der ebenfalls erwähnten Datei /etc/freeradius/3.0/mods-available/eap im Abschnitt "EAP TLS" zu aktivieren.

\#
        tls-config tls-common {
                private_key_password = <Srv_Key_Password>
                private_key_file = ${confdir}/certs/<RadiusServer.key_Key_Datei>
\#
                certificate_file = ${confdir}/certs/<RadiusServer.crt_Zert-Datei>
                #  Trusted Root CA list
                ca_file = ${confdir}/certs/<CA.crt_Zert_Datei> 

Weiter geht es mit dem Webserver...


🏗️ Installation Nginx Webserver mit erforderlichen PHP Komponenten

❗️Vorab: Natürlich rennt das WebGUI auch mit dem Apachen. Die Installation des Apache2 Webservers mit PHP beschreiben diverse Internet Tutorials und YouTube Filme sowie das Daloradius Installations ReadMe. Der Nginx Webserver wurde hier bewusst gewählt, weil er insgesamt und damit besonders auf kleineren Plattformen (z.B. Raspberry Pi u.a.) deutlich flotter läuft. (Bei der Wahl des Apachen kann das folgende Nginx Installationskapitel übersprungen werden!)

Los gehts mit der Webserver und PHP Installation...

apt install nginx php-fpm php-mysql php-zip php-mbstring php-cli php-common php-curl

Bzw. weitere erforderliche PHP Komponenten:

apt install php-gd php-db php-mail php-mail-mime

⚙️ PHP aktivieren

Um PHP im Nginx Webserver zu aktivieren, wird mit dem nano Editor dessen Konfig Datei angepasst.

nano /etc/nginx/sites-available/default

Die folgenden Zeilen werden im Abschnitt server {... entkommentiert ("#" am Zeilenanfang entfernen) bzw. angepasst:

'# Add index.php to the list if you are using PHP'
'index index.html index.htm index.php;'

In der gleichen Datei den Abschnitt der PHP Konfig ebenfalls per nano anpassen und die Kommentarzeichen "#" in den folgenden Zeilen entfernen:

\# pass PHP scripts to FastCGI server
        #
        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
        #
        #       # With php-fpm (or other unix sockets):
                fastcgi_pass unix:/run/php/php8.2-fpm.sock;
        #       # With php-cgi (or other tcp sockets):
        #       fastcgi_pass 127.0.0.1:9000;
        } 

⚠️ Bitte hier unbedingt die installierte PHP Version beachten! Siehe dazu auch HIER. (Beispiel der o.a. Zeile 7 bei PHP Version 8.2: "fastcgi_pass unix:/run/php/php8.2-fpm.sock"!)

Alle Änderungen sichert man im nano Editor wieder mit der Tastenkombination und . Ob die Nginx Konfiguration syntaktisch OK und ohne Tippfehler ist kann man mit dem Kommando nginx -t testen.

Nginx Webserver mit PHP testen

Im Webserver HTML Root Verzeichnis /var/www/html/ (Wechsel dahin mit cd /var/www/html) erzeugt man mit dem nano Editor abschliessend eine PHP Datei phpinfo.php mit folgendem Inhalt:

<?php
phpinfo();
?> 

Sie dient lediglich zum Testen der PHP Funktion.

Per Kommandozeile startet man den Webserver neu, um die geänderten Konfigs einzulesen.

systemctl restart nginx

Im Webbrowser öffnet man jetzt diese PHP Testdatei mit Eingabe von http:///phpinfo.php im Browserfenster, was dann die PHP Statusseite anzeigen sollte.

Ist das der Fall, ist der Nginx Webserver einsatzklar und es geht weiter mit der Installation des Daloradius WebGUIs...


🏗️ Daloradius WebGUI installieren

Für die Installation der Daloradius PHP Web Anwendung im Webserver Root Verzeichnis kann das Git Tool verwendet werden um das Programmverzeichnis lokal zu klonen (empfohlen). apt install git Installiert, wenn nicht schon geschehen, das Git Tool.

Danach wechselt man in das Webserver Root Verzeichnis und führt dort das folgende Kommando aus:

cd /var/www/html
git clone https://github.com/lirantal/daloradius.git 

Wer das Git Tool git nicht installieren möchte, kann es alternativ auch mit wget herunterladen, das ZIP Archiv dann entpacken und das entzippte Verzeichnis ins Webserver Verzeichnis kopieren.

wget https://github.com/lirantal/daloradius/archive/refs/heads/master.zip
unzip master.zip
mv daloradius-master /var/www/html/daloradius 

📦 Log und Var Verzeichnisse erstellen

Das erledigen die 2 Kommandos:

mkdir -p /var/log/nginx/daloradius/{operators,users}

sowie

cd /var/www/html/daloradius/
mkdir -p var/{log,backup}

🔐 SQL Schemadateien importieren

Mit diesen zwei Kommandos importiert man die Daloradius Schema Dateien in die Datenbank:

mysql -u root radiusdb < /var/www/html/daloradius/contrib/db/fr3-mariadb-freeradius.sql
mysql -u root radiusdb < /var/www/html/daloradius/contrib/db/mariadb-daloradius.sql 

⚙️ Daloradius Konfig Datei erstellen

Ins Konfig Verzeichnis wechseln mit

cd /var/www/html/daloradius/app/common/includes/ 

und dort die Konfig Datei aus der Beispieldatei erstellen und deren Dateirechte setzen:

cp daloradius.conf.php.sample daloradius.conf.php
chmod 664 daloradius.conf.php

Jetzt mit dem nano Texteditor diese Datei auf den o.a. SQL Datenbanknamen und den oben definierten SQL User mit Passwort anpassen. (Zeilen 5, 6 u. 7) Zusätzlich die Pfade der für den Betrieb relevanten Log und Var Verzeichnisse, Dictionary und das Radius Server Passwort (Zeile 12):

$configValues['FREERADIUS_VERSION'] = '3';  
$configValues['CONFIG_DB_ENGINE'] = 'mysqli';  
$configValues['CONFIG_DB_HOST'] = 'localhost';  
$configValues['CONFIG_DB_PORT'] = '3306';  
$configValues['CONFIG_DB_USER'] = 'raduser';  
$configValues['CONFIG_DB_PASS'] = 'geheim123';  
$configValues['CONFIG_DB_NAME'] = 'radiusdb';  
$configValues['CONFIG_PATH_DALO_VARIABLE_DATA'] = '/var/www/html/daloradius/var';  
$configValues['CONFIG_PATH_DALO_TEMPLATES_DIR'] = '/var/www/html/daloradius/app/common/templates';  
$configValues['CONFIG_LOG_FILE'] = '/var/www/html/daloradius/var/log/daloradius.log';  
$configValues['CONFIG_PATH_RADIUS_DICT'] = '/usr/share/freeradius';  
$configValues['CONFIG_MAINT_TEST_USER_RADIUSSECRET'] = 'testing123';  

Damit Daloradius das Freeradius Log auslesen kann muss noch die entsprechende Dateiberechtigung gesetzt werden.

chmod 644 /var/log/freeradius/radius.log 

Abschliessend wird das Webserver Root Verzeichnis auf den Webserver User und Group gesetzt:

chown -R www-data:www-data /var/www/html/

✅ Daloradius Funktionscheck

Sind alle obigen Anpassungen gemacht steht einem ersten Test des FreeRadius WebGUIs nichts mehr im Wege. Das Administrator Login ruft man im Browser unter http:///daloradius/app/operators/ auf. Hat alles geklappt wird man mit dem Login Schirm begrüsst.

Der Default Username ist administrator und das Passwort radius

Der erste Klick sollte auf den "Home" Button gehen und dort auf den Punkt "Services Status". Hier sollten alle 3 Services Radius, Datenbank und SSHd auf "Running" stehen.

Benutzern kann man als Radius Administrator erlauben ihre eigenen Accounts zu überprüfen. Dafür hat das Radius WebGUI einen speziellen Benutzer URL mit eingeschränktem Menü und Rechten unter: http:///daloradius/app/users/ vorgesehen. Dies muss im User Setup unter "User Info" vom Administrator explizit zusätzlich und individuell pro User erlaubt werden für den Fall das man Endbenutzern diesen Service bieten möchte. (Enable User Portal Login = Yes)


⚙️ URL Tuning

Wem die URLs zum Aufruf des WebGUIs etwas zu lang sind, kann diese optional im Webserver Setup mit einem Redirect Kommando /etc/nginx/sites-available/default am Ende des Abschnittes "server { " entsprechend kürzen. Z.B. /radius für das Management und /raduser für den Benutzerzugang.

#
        location /radius {
        return 301 /daloradius/app/operators;
        }
#
        location /raduser {
        return 301 /daloradius/app/users;
        } 

Danach ist der Nginx Webserver mit systemctl restart nginx neu zu starten.

Klappt alles, ist der Radius Server und das WebGUI einsatzklar und weiter geht es mit der Einrichtung der Benutzer.


⚙️ Benutzer Management

Das Benutzermanagement ist sehr einfach und mehr oder weniger selbsterklärend im Menü "Management - Users" zu finden. Man hat hier die Wahl zw. der Eingabe des Nutzernamens und Passwortes (WPA-Enterprise, 802.1x) oder der Mac Adresse für die Mac Authentisierung (Mac Authentication Bypass, MAB). Alle Nutzernamen bzw. Mac Adressen lassen sich sortieren und auch als CSV Datei (Excel etc.) sowohl exportieren als auch aus einer CSV Datei importieren. 802.1x Nutzer kann man alternativ anstatt Cleartext mit der Option NT Password anlegen, damit werden die Passwörter im GUI verschlüsselt dargestellt. Alternativ zur verschlüsselten Anzeige ist es im Menü unter Config - Interface Settings - Enable Password Hiding auch möglich die Anzeige der Passwörter in der GUI Listenansicht komplett unterdrücken.


✅ Nutzer Account Check

Im Menü Config - Maintenance lässt sich der eingerichtete Benutzer oder die Mac Adresse vorab überprüfen ob sie vom Radius Server korrekt authentisiert wird.


🔗 Beispielkonfigurationen

Folgt noch. 😉


📚 Quellen