WLAN sichern mit Radius

Individuelle Authentifizierung mit Freeradius unter Linux

Praxis & Tipps | Praxis

WPA-PSK genügt zwar, um den Datenverkehr in WLANs sicher zu verschlüsseln. Mit einem Passwort für alle taugt es für Heimnetze, aber kaum für Firmen mit Dutzenden oder Hunderten Nutzern. Die kann man mit wenig Mühe mit individuellen WLAN-Passworten ausstatten, wenn schon ein Linux-Server läuft.

Beim WLAN-Einsatz in Unternehmen reicht die simple Authentifizierung über ein gemeinsames Passwort (Shared Secret) mit WPA-PSK nicht: Das Geheimnis ist bei großer Verbreitung zu schnell keines mehr. Spätestens wenn ein Kunde vorübergehend einen Zugang bekommen hat, muss man es ändern. Mit serverseitig zugeteilten Passwörtern erspart sich der Administrator viel Arbeit und Nachfragen seiner Nutzer.

Für solche Einsatzfälle ist die Spielart WPA Enterprise gedacht, bei der die WLAN-Basisstation Verbindungsanfragen von ihren Clients über das Protokoll IEEE 802.1x mit einem nachgelagerten Radius-Server aushandelt. Auf Linux-Systemen ist dazu das Open-Source-Paket Freeradius gängig. Wir schildern im Folgenden, wie man es unter Opensuse 11.2 konfiguriert und Clients unter verschiedenen Betriebssystemen einrichtet.

Freeradius steckt schon in der Alternativ-Firmware für manche preisgünstige WLAN-Router.

Eine Alternative ist der Dienst Internet Authentication Service (IAS), den Windows-Server-Versionen ab 2003 an Bord haben, unter anderem auch der Windows Home Server. Soll der Radius-Dienst unter anderen Windows-Versionen laufen, kommen fast nur kommerzielle Produkte in Betracht: In der Liste finden Sie auch den Freeware-Server Tekradius, aber dieser setzt einen SQL-Server von Microsoft voraus und ist damit nicht wirklich kostenfrei.

So konnten wir neben der Windows-Umsetzung von Freeradius keinen kostenlos nutzbaren Radius-Server auftreiben. Leider ist der Freeradius-Port auf dem veralteten Stand 1.1.7 stehen geblieben, sodass wir ihn nicht weiter in Betracht ziehen. Falls Sie partout einen Radius-Server auf Windows XP oder Windows 7 betreiben wollen, dürfte der einfachste Weg derzeit sein, ein Linux in eine virtuelle Maschine zu stecken und dort Freeradius zu installieren.

Auch wenn gar kein Server im zu schützenden Netz läuft, können Sie Radius einsetzen: Manche WLAN-Router oder -Basisstationen (Access Points) enthalten selbst einen einfachen Radius-Server, beispielsweise Modelle von Lancom Systems. Selbst preisgünstige WLAN-Router, die mit einer Alternativ-Firmware wie DD-WRT bestückt werden, können als Radius-Server fungieren.

Von simplen Authentifizierungsmethoden, bei denen Nutzername und Passwort im Klartext übertragen wurden, hat sich Freeradius schnell weiterentwickelt. Mit dem Extensible Authentication Protocol (EAP) unterstützt es verschiedene kryptografisch gesicherte Methoden (EAP-TLS/-TTLS, PEAP, LEAP), One-Time-Passworte und SIMs. Für die Authentifizierung sind Username/Passwort-Kombinationen oder Zertifikate gebräuchlich.

Die Anmeldedaten liegen auf dem Radius-Server in einer simplen Textdatei oder auf nachgeschalteten Datenbanken (LDAP, SQL). Für eher kleine WLANs mit einigen Dutzend Nutzern wie in unserem Beispiel begnügen wir uns mit Name/Passwort-Einträgen in der Textdatei.

Damit diese Daten nicht im Klartext durch die Luft beziehungsweise über die Leitung zwischen Basisstation und Radius-Server laufen, verschlüsselt Freeradius sie. Voraussetzung dafür ist, dass auf dem Client mindestens ein Stammzertifikat (Root CA Certificate) installiert ist, von dem das Zertifikat des Radius-Servers abgeleitet ist. Mit dem Stammzertifikat prüft der Client auch, dass er sich beim richtigen Radius-Server authentifiziert.

Bei Radius reicht der Authenticator – ein WLAN-Access-Point oder ein 802.1x-fähiger Switch – Anmeldeanfragen an den Authentication Server weiter. Der entscheidet, ob der Antragsteller (Supplicant) Zugang bekommt.

Als Unterhändler (Authenticator) zwischen dem Client (auch Supplicant genannt) und dem Radius-Server agieren ein oder mehrere WLAN-Basisstationen. Diese müssen die Authentifizierungsmethode WPA2 Enterprise, manchmal auch als WPA2-1x oder WPA2/802.1x bezeichnet, unterstützen. Hilfsweise tut es auch WPA. Wir nahmen zum Erproben unseres selbstaufgesetzten Radius-Servers einen Access Point L310agn von Lancom, doch auch viele andere APs und WLAN-Router unterstützen 802.1x.

In den Basisstationen müssen Sie das zu schützende Funknetz auf WPA2 Enterprise umstellen, dabei die IP-Adresse des Radius-Servers angeben und ein gemeinsames Passwort (Shared Secret) eintragen, mit dem der Server und der Access Point ihre Kommunikation sichern.

Bei einem frisch installierten Opensuse 11.2 muss man zwei Pakete nachziehen, den Radius-Server freeradius-server sowie make, damit später das Erzeugen von Zertifikaten per Skript klappt. Wer die Dokumentation lokal haben und Admin-Werkzeuge nutzen will, spielt auch gleich freeradius-server-doc und freeradius-server-utils auf.

Opensuses Systemverwaltungswerkzeug Yast bietet leider keine Option zur Freeradius-Einrichtung an. Um das Bearbeiten von Konfigurationsdateien mit dem bevorzugten Editor kommt man leider nicht herum. Zwar steht in der Paketverwaltung auch freeradius-server-dialupadmin zur Verfügung, aber dieses per Browser steuerbare Werkzeug ist auf die Nutzerverwaltung per LDAP oder SQL-Datenbank in großen Installationen wie etwa bei Internet-Providern spezialisiert und für unsere Zwecke überdimensioniert.

Die Freeradius-Konfigurationsdateien liegen in /etc/raddb, die Logdatei in /var/log/radius. Das Log kann man zur Fehlersuche in einem Terminalfenster mitlaufen lassen: tail -f -n25 /var/log/radius/radius.log. Nutzer ohne Root-Rechte stellen ein sudo voran.

Nun passt man fünf Konfigurationsdateien an und erzeugt Zertifikate. Ans Ende der Datei users tragen Sie die Radius-Nutzer mit Klartextpasswörtern ein (siehe Beispiel im Listing). Weil darauf root und die Nutzergruppe radiusd Zugriff haben, sollten Sie unbedingt separate Zugangsdaten verwenden, keinesfalls auch anderswo gebrauchte Namen und Passwörter.

"eltern"         Cleartext-Password := "duerfenimmer"
"kinder" Cleartext-Password := "duerfenseltener", \
Login-Time := "Wk0800-2000,Sa0800-2200,Su0800-2000"
"gast" Cleartext-Password := "darfauchmal", Login-Time := "Al0700-2300"
"Karl Ranseier" Auth-Type := Reject, Reply-Message = "ist tot!"

Der Parameter Login-Time bei den Einträgen in /etc/raddb/users beschränkt die Anmeldung beispielsweise für den Nachwuchs auf bestimmte Stunden.

Schließen Sie die Nutzernamen wie im Beispiel generell in Anführungsstriche ein, damit Leerzeichen nicht zum Problem werden. Meiden Sie Umlaute, Sonder- und Satzzeichen bei Namen und Passwörtern, denn manchmal setzen die Client-Programme sie unterschiedlich um, sodass trotz korrekter Eingabe keine Verbindung zustande kommt. Beispielsweise wertet Freeradius einen Punkt im Namen als Trenner für einen Hinweis auf den gewünschten Diensttyp: Aus "radtest.ppp" würde es ableiten, dass ein PPP-Zugang gewünscht sei.

Der Parameter Login-Time verhindert, dass sich jemand außerhalb des angegebenen Zeitraums einloggen kann. Er wirft aber niemanden bei Ablauf der Frist automatisch aus dem Netz, das muss der Access Point durch regelmäßige Reauthentifizierung etwa im Viertelstundentakt erledigen. Die Login-Zeiten definieren Sie als Kombination aus Wochentagskürzel (Al = Alle, Wk = Werktage, sonst englische Kürzel, etwa Tu für Dienstag) und minutengenauen Zeitraum (hhmm-hhmm).

Damit der Radius-Server weiß, auf welche Unterhändler er lauschen muss und welches Shared Secret dabei zum Einsatz kommt, tragen Sie sie in clients.conf ein. Mit einem Eintrag wie

client 192.168.111.8/29 {
secret = radiustest123
shortname = APs-im-Testnetz
}

horcht der Daemon radiusd auf Anfragen aus dem Subnetz 192.168.111.8 bis .15. Falls Sie nur eine WLAN-Basisstation betreiben und diese eine feste IP-Adresse hat, können Sie sie mit angehängtem /32 auch direkt eintragen.

Zum Erzeugen des Stammzertifikats und des abgeleiteten Serverzertifikats bringt Freeradius Beispieldateien und ein Make-Skript mit, was den Prozess erheblich erleichtert.

Als root wechseln Sie in der Shell ins Verzeichnis /etc/raddb/certs. Dort löschen Sie zunächst die mitgelieferten Beispiel-Zertifikate und -Schlüssel mit rm -f *.pem *.der *.csr *.crt *.key *.p12 serial* index.txt*

Dann passen Sie die vom Skript verwendete Konfigurationsdatei ca.cnf an: Setzen Sie den Parameter default_days unter [ CA_default ] auf 1826 (Tage) oder höher, damit das Erneuern und Verteilen frühestens nach fünf Jahren fällig wird. Stellen Sie dabei unter [ req ] gleich eigene Passwörter ein.

Um das eigene Stammzertifikat im Verwaltungswerkzeug des Client-Betriebssystems später leichter wiederzufinden, ändern Sie auch die Einträge unter [certificate_authority] (siehe Beispiele im Listing). Diese Änderungen wiederholen Sie in der Konfigurationsdatei server.cnf und erzeugen schließlich ein neues Stamm- und Server-Zertifikat sowie die Server-Schlüssel mit make all.

[ CA_default ]
default_days = 3660
[ req ]
input_password = radiustest123
output_password = radiustest123
[certificate_authority]
countryName = DE
stateOrProvinceName = radius@ct
localityName = Hannover
organizationName = Redaktion ct
emailAddress = ea@ct.de
commonName = "radiustest -- ea@ct"

[Abschnitte] und zu ändernde Parameter der Datei /etc/raddb/certs/ca.cnf für automatisierte Zertifikatserzeugung: Den 6-Zeilen-Block unter [certificate_authority] können Sie in die gleichermaßen anzupassende server.cnf unter [server] kopieren.

Damit der Radius-Server beim Starten den Server-Schlüssel lesen kann, tragen Sie schließlich das in ca.cnf selbstgesetzte Passwort auch in /etc/raddb/eap.conf bei private_key_password ein.

Nun können Sie wiederum als root auf der Kommandozeile den Radius-Server aktivieren und starten: chkconfig freeradius on sorgt dafür, dass der Dienst bei jedem Booten mitgestartet wird; rcfreeradius start wirft ihn nach dem Konfigurieren gleich an.

Schließlich kopieren Sie sich noch das selbsterzeugte Stammzertifikat ca.der aus /etc/raddb/certs auf einen USB-Stick, um es später auf den Radius-Clients zu installieren.

Ab Ubuntu 10.04 können Sie Freeradius mit der Paketverwaltung installieren und wie vorn beschrieben einrichten. Die Konfigurationsdateien liegen hier unter /etc/freeradius. Das Zertifikateverzeichnis /etc/freeradius/certs ist allerdings noch leer. Dort hinein kopieren Sie aus /usr/share/doc/freeradius/examples/certs fünf Dateien: ca.cnf, server.cnf, client.cnf, xpextensions und Makefile. Die Logdatei liegt unter /var/log/freeradius.

Bei Freeradius-Versionen vor 2.1.8 aus den Ubuntu-Repositories fehlt dem Server nach unserer Erfahrung ein wesentlicher Bestandteil: Sichere Authentifizierung mit kryptografischen Methoden ist nicht möglich, da das Paket ohne OpenSSL-Unterstützung übersetzt wurde. Das vollständige Freeradius-Paket können Sie indes mit wenigen Schritten selbst bauen und installieren. Dazu ist allerdings ein Ausflug in die Shell nötig (Anwendungen/Zubehör/Terminal).

Erstellen Sie zunächst ein Unterverzeichnis fürs Bauen (mkdir build;cd build). Dann laden Sie aus einem Mirror das Quelltextpaket für die aktuelle Freeradius-Version dahinein herunter; beim Erstellen dieses Beitrags war es Version 2.1.8. Nun ist lediglich eine Folge von Befehlen und ein Viertelstündchen Geduld nötig:

sudo apt-get install fakeroot dpkg-dev libssl-dev quilt autotools-dev libtool \
libltdl3-dev libpam0g-dev libmysqlclient-dev libgdbm-dev libldap2-dev \
libsasl2-dev libiodbc2-dev libkrb5-dev libperl-dev libpcap-dev python-dev \
libsnmp-dev libpq-dev debhelper

tar zxf freeradius-server-2.1.8.tar.gz

cd freeradius-server-2.1.8

fakeroot dpkg-buildpackage -b -uc

cd ..

sudo dpkg -i libfreeradius2_2.1.8+git_i386.deb freeradius-common_2.1.8+git_all.deb \
freeradius_2.1.8+git_i386.deb freeradius-utils_2.1.8+git_i386.deb


Der längliche erste Befehl installiert alle zum Bauen nötigen Pakete. Beim Übersetzen mit fakeroot landen die .deb-Binaries im übergeordneten Pfad. Der letzte sudo-Befehl installiert schließlich den Freeradius-Server nebst Admin-Werkzeugen (utils). Sollten Sie eine neuere Fassung nehmen, ersetzen Sie in den Dateinamen sinngemäß die Versionsnummer 2.1.8 durch x.y.z.

Wenn Sie nicht den Backport installieren wollen, funktioniert das Übersetzen und Installieren genauso auch unter Debian. Wie man Freeradius für andere Betriebssysteme (Redhat, Opensuse, Mac OS X, Solaris) baut, ist im Freeradius-Wiki beschrieben.

Nach der Installation ist das Zertifikateverzeichnis /etc/freeradius/certs leer. Kopieren Sie deshalb den Inhalt aus ~/build/freeradius-server-2.1.8/raddb/certs/ dort hinein. Anschließend editieren Sie in /etc/freeradius/certs ca.cnf und server.cnf und erzeugen die Zertifikate wie weiter vorn beschrieben.

Beim Installieren wird Freeradius gleich als Dienst aktiviert, sodass es beim nächsten Neustart automatisch anläuft. Wenn Sie zum Ausprobieren den Rechner nicht neustarten wollen, werfen Sie den Dienst manuell mit sudo /etc/init.d/freeradius start an.

Die Anmeldung bei einem Radius-geschützten WLAN läuft etwas anders als gewohnt. Statt nur das gemeinsame WPA-Passwort brauchen Sie nun die beim Radius-Server hinterlegte Username/Passwort-Kombination.

Damit Windows 7 das selbsterzeugte Stammzertifikat korrekt im Speicher für "Vertrauenswürdige Stammzertifizierungsstellen" ablegt, muss man etwas nachhelfen.

Noch vorm ersten Anmelden importieren Sie das Stammzertifikat, etwa von einem USB-Speicherstick. Nach einem Doppelklick auf die Datei ca.der drücken Sie den Knopf "Zertifikat installieren". Dann klicken Sie sich bis zur Sicherheitswarnung "Sie sind im Begriff ..." durch und bestätigen die Installation. Windows XP nimmt dabei automatisch den korrekten Zertifikatsspeicher.

Anders bei Windows 7: Hier müssen Sie manuell "Vertrauenswürdige Stammzertifizierungsstellen" als gewünschten Zertifikatsspeicher wählen. Abgelaufene oder vorübergehend für Tests installierte Zertifikate können Sie mit dem Zertifikatsmanager aus dem Speicher entfernen. Das Tool erreichen Sie über das Startmenü, indem Sie certmgr.msc ins Suchfeld eingeben.

Anschließend richten Sie das WLAN im Netzwerkcenter von Hand ein (Hinzufügen/"Ein Netzwerkprofil manuell erstellen"): Wählen Sie dabei als Sicherheitstyp WPA2-Enterprise. Dann ändern Sie die Verbindungseinstellungen beim Reiter "Sicherheit": Die vorgegebene Methode "Microsoft: Geschütztes EAP (PEAP)" passt, muss aber durch Klick auf den Knopf "Einstellungen" angepasst werden. Hier aktivieren Sie mit einem Häkchen das eigene Zertifikat in der Liste der vertrauenswürdigen Stammzertifizierungsstellen und deaktivieren die Benutzeraufforderung zur Autorisierung neuer Server.

Ein individueller commonName bei der Zertifikatserzeugung hilft, das eigene Stammzertifikat im Verwaltungstool – bei Windows: certmgr.msc – leichter wiederzufinden.

Bei der Authentifizierungsmethode per gesichertem Kennwort (EAP-MSCHAPv2) schalten Sie per Klick auf "Konfigurieren" das automatische Übergeben der Windows-Anmeldedaten aus. Nach dem Druck auf OK wählen Sie unter "Erweiterte Einstellungen" als Authentifizierungsmodus "Benutzerauthentifizierung".

Unter Windows XP ist ebenso Handarbeit gefragt: Wählen Sie im Startmenü unter "Verbinden mit" Ihre WLAN-Verbindung aus, rufen die erweiterten Einstellungen auf und fügen beim Reiter "Drahtlosnetzwerke" ein neues hinzu. Tragen Sie beim Reiter "Zuordnung" den Funknetznamen ein und wählen Sie die passende Verschlüsselung, am besten WPA2/AES.

Unter "Authentifizierung" stellen Sie auf "Geschütztes EAP (PEAP)" um, wählen bei "Eigenschaften" das eigene Stammzertifikat und deaktivieren die Benutzeraufforderung zur Autorisierung neuer Server. Nun schalten Sie beim Konfigurieren der voreingestellten Authentifizierungsmethode (EAP-MSCHAPv2) noch das automatische Verwenden der Windows-Anmeldedaten ab.

Opensuse 11.2 (links, mit dem NetworkManager als Netzwerkverwalter) und Ubuntu 9.10 fassen die Einstellungen für Radius-geschützte WLANs in einem Formular zusammen. Auch hier muss das Stammzertifikat auf dem lokalen Massenspeicher bereitliegen.

Unter Ubuntu 9.10 fällt das Einrichten des Radius-WLANs sehr leicht: Kopieren Sie das Stammzertifikat ca.der vom USB-Stick ins Heimverzeichnis (Persönlicher Ordner) oder einen anderen zugänglichen Ort. Wählen Sie das Funknetz über das Netzwerk-Logo im Tray aus, setzen Sie das CA-Zertifikat auf die kopierte Datei, geben Sie noch Namen und Passwort ein, fertig.

Bei Opensuse 11.2 geht das Einrichten des Radius-Zugangs etwas umständlicher: Stellen Sie zunächst in den Netzwerkeinstellungen (Startmenü, "Netzwerk" ins Suchfeld eingeben) die Netzwerkverwaltung vom traditionellen ifup-Modell auf den wesentlich komfortableren NetworkManager um, falls noch nicht geschehen. Dann kopieren Sie ca.der auf den lokalen Massenspeicher. Anschließend rufen Sie per Klick auf das Tray-Icon des NetworkManagers "WLAN-Schnittstelle Netzwerkverbindung erstellen" auf, wählen aus der Liste Ihr Radius-WLAN aus und klicken auf "Verbinden". Stellen Sie die Authentifizierung auf "Tunneled TLS (TTLS)" um, setzen den Pfad auf das soeben kopierte Stammzertifikat, stellen die innere Authentifizierungsmethode auf "MSCHAPv2" und tragen die WLAN-Zugangsdaten ein.

Die richtigen Einstellungen für ein Android-2.1-Handy lauten PEAP und MSCHAPv2.

Auch drei Smartphones ließen sich mit ein wenig Mühe überreden, Verbindung mit unserem Radius-geschützten WLAN aufzunehmen: Das iPhone nahm mit der Einstellung "Automatisch" für die Authentifizierungsmethode ohne Weiteres Verbindung mit unserem Funknetz auf, nachdem es uns das vom Server vorgelegte Zertifikat zum Überprüfen angezeigt hatte. Auch ein unter Android 2.1 laufendes HTC Sense verband sich anstandslos mit seiner Default-Einstellung PEAP/MSCHAPv2.

Bei Nokias E65 mussten wir die WLAN-Verbindung von Hand einrichten, da sein WLAN-Assistent beim Verbindungsversuch mit dem Radius-Funknetz penetrant nach einem WPA-Passwort fragte. Also setzte ein fröhliches Hangeln durchs Menü ein, hier extrem gerafft: System/Einstellungen/Verbindung/Zugangspunkte/Optionen/Neuer Zugangspunkt/Standardeinstellungen, Verbindungsname = Radiustest, Datenträger = WLAN, WLAN-Netzname = cttest-rad, WLAN-Sich.-Einstellungen/EAP Plug-in-Einstell. = nur EAP-LEAP, Optionen/Konfigurieren: Benutzername und Passwort eintragen. Danach bekommt das Handy über den WLAN-Assistenten Verbindung mit dem Radius-Funknetz.

Freeradius' Log-Datei gibt Hinweise, warum Verbindungsversuche fehlschlagen: Hier will sich ein Client über ein unbekanntes Stammzertifikat anmelden. Der verwendete Nutzername steht dabei in eckigen Klammern.

Dem Freeradius-Server liegt das Tool radsniff bei. Es zeigt die zwischen Server und NAS ausgetauschten Radius-Pakete im Klartext an, wenn man es mit dem Shared Secret versorgt: radsniff -s radiustest123. Die in den Radius-Frames gekapselte EAP-Kommunikation kann radsniff zwar nicht entschlüsseln, verrät aber immerhin, ob die Kommunikation zwischen Antragsteller und Radius-Server überhaupt klappt und wer von beiden die Verbindung abgelehnt hat.

Um herauszufinden, ob das erfolglose Anmelden an einem Vertipper beim Nutzernamen liegt, kann man den Radius-Server die Verbindungsanfragen in seine Log-Datei schreiben lassen. Ersetzen Sie dazu das "no" in der Zeile auth = no im log{}-Abschnitt der Datei /etc/raddb/radiusd.conf durch ein "yes". Dann starten Sie den Radius-Server mit rcfreeradius restart neu. (ea)

Anzeige