FreeRADIUS
Es ist erstaunlich wie schlecht die Inbetriebnahme des RADIUS-Servers FreeRADIUS unter Ubuntu dokumentiert ist. Ich habe folgenden Anwendungszweck: Gäste sollen sich in unserem Netzwerk mit Benutzername und Passwort am WLAN authentifizieren. Die Benutzerdaten sollen zwecks einfacher Verwaltung in einer MySQL-Datenbank stehen.
Installation FreeRADIUS
Zu aller Erst installieren wir FreeRADIUS, dessen MySQL-Anbindung und OpenSSL. Die korrekte Installation eines LAMP-Server setze ich an dieser Stelle voraus.
apt-get update apt-get install freeradius freeradius-mysql openssl
Dann können wir mit der Konfiguration beginnen. Zu aller Erst erstellen wir eine neue Datenbank radius mit vollen Schreibrechten für den Benutzer radius mit dem Passwort radius. Mit Hilfe dieses Benutzers legen wir dann das Datenbank-Schema an.
mysql -u radius -p radius < /etc/freeradius/sql/mysql/schema.sql mysql -u radius -p radius < /etc/freeradius/sql/mysql/nas.sql
Haben wir das gemacht, konfigurieren wir den SQL-Zugriff für FreeRADIUS in /etc/freeradius/sql.conf
login = "radius" password = "radius" # Database table configuration for everything except Oracle radius_db = "radius"
Daraufhin binden wir die Datei in FreeRADIUS ein via /etc/freeradius/radiusd.conf (ca. Zeile 700):
$INCLUDE sql.conf
und aktivieren (sind schon als Kommentar vorhanden) die Authentifizierungsmethoden in /etc/freeradius/sites-enabled/default jeweils unter authorize, accounting, session und post-auth sowie in der Datei /etc/freeradius/sites-enabled/inner-tunnel in authorize, session und post-auth
Testen der Konfiguration
Via
freeradius -X
können wir FreeRADIUS nun im Debug-Modus starten. Hier könnten einige Fehler auftreten. Wichtig ist zu kontrollieren, dass alle SQL-Parameter in den beiden oben genannten Dateien aktiviert sind.
Darüber hinaus kann es sein, dass SSL-Zertifikate fehlen, die zur Verschlüsselung der Authentifizierungsverbindung genutzt werden. FreeRADIUS benötigt folgende Dateien:
- ca.pem (Zertifikat der Certificate Authority als PEM)
- server.pem (Server-eigenes Zertifikat)
- server.key (Server-eigener Schlüssel)
- dh (Diffie-Hellmann)
Die Dateinamen können ggf. in /etc/freeradius/eap.conf ca. ab Zeile 150 abgeändert werden.
Der Betrieb einer eigenen Root-CA zur Erstellung der Zertifikate ist bei Ubuntuusers dokumentiert.
Wichtig ist, dass der Ordner und die Zertifikate auch dem FreeRADIUS-Benutzer und der Gruppe gehören
chown -R freerad.freerad /etc/freeradius/certs/
Fehlerbehebung
Die Log-Dateien unter /var/log/freeradius/radius.log geben gute Auskunft, alternativ auch der Debug-Modus von FreeRADIUS.
Tool zur Manipulation
Zur Manipulation der Daten benutze ich das Tool PHPRadiusAdmin. Dieses ist unter Apache mit PHP lauffähig und ist sehr einfach zu konfigurieren. Unter lib/dbconfig.php werden die Daten des SQL-Zugriffs für FreeRADIUS eingegeben. Man kann natürlich auch einen individuellen Zugang auf die Datenbank radius einrichten. Die Datenbank muss um folgende Tabellen erweitert werden (radius.sql):
CREATE TABLE IF NOT EXISTS `adminbans` ( `id` int(25) NOT NULL AUTO_INCREMENT, `ip` varchar(25) COLLATE latin1_general_ci NOT NULL, `hostname` varchar(255) COLLATE latin1_general_ci NOT NULL, `datetime` datetime NOT NULL, `reason` varchar(255) COLLATE latin1_general_ci NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=1 ; CREATE TABLE IF NOT EXISTS `adminconfig` ( `setting` varchar(255) COLLATE latin1_general_ci NOT NULL DEFAULT , `value` varchar(255) COLLATE latin1_general_ci NOT NULL DEFAULT , `description` varchar(255) COLLATE latin1_general_ci NOT NULL DEFAULT , PRIMARY KEY (`setting`), KEY `value` (`value`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; INSERT INTO `adminconfig` (`setting`, `value`, `description`) VALUES ('max_failed', '5', 'The maximum failed logins before a ban is issued.'), ('failed_timeout', '2', 'In hours, the timespan for the failed login timeouts.'), ('webmaster_email', 'webmaster@danodemano.com', 'The email address for the site webmaster.'), ('email_ban', '1', 'Send an email to the webmaster when an IP is banned'), ('email_from', 'webmaster@danodemano.com', 'The default email address messages are sent from'); CREATE TABLE IF NOT EXISTS `adminfaillog` ( `id` int(25) NOT NULL AUTO_INCREMENT, `ip` varchar(25) COLLATE latin1_general_ci NOT NULL, `username` varchar(255) COLLATE latin1_general_ci NOT NULL, `datetime` datetime NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=1 ; CREATE TABLE IF NOT EXISTS `adminusers` ( `id` int(25) NOT NULL AUTO_INCREMENT, `username` varchar(50) COLLATE latin1_general_ci NOT NULL, `password` varchar(50) COLLATE latin1_general_ci NOT NULL, `active` tinyint(1) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=2 ; INSERT INTO `adminusers` (`id`, `username`, `password`, `active`) VALUES (1, 'test', 'a94a8fe5ccb19ba61c4c0873d391e987982fbbd3', 1); CREATE TABLE IF NOT EXISTS `expire` ( `id` int(25) NOT NULL AUTO_INCREMENT, `user_id` int(25) NOT NULL, `expires` datetime NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=1 ;
Hier wird auch gleich ein Admin-Account test mit dem Passwort test für die Administration über das Web eingerichtet.
Mit Hilfe des Tools radtest können die Accounts direkt auf dem Rechner ausprobiert werden:
radtest benutzer passwort localhost 18128 testing123
testing123 hier ist ein Standard-Secret mit dessen Hilfe man vom localhost aus auf die RADIUS-Datenbank zugreifen kann.
Konfiguration der AccessPoints
Die meisten AccessPoints können heute mit RADIUS-Authentifizierung umgehen. Wichtig ist, dass man zwei Seiten konfigurieren muss. Einerseits die Authentifizierung und das Accounting. Meistens sind die aber untereinander aufgeführt. Oft ist die Konfiguration der RADIUS-Daten auch ausgelagert, zum Beispiel auf einem Netgear-AP: