Schlagwort-Archive: network

WLAN Hotspot mit Chillispot(DD-WRT), Freeradius und MySQL unter Ubuntu

Heute mal ein etwas außergewöhnliches Tutorial. Wir richten einen WLAN-Hotspot ein, wie er zum Beispiel in einem Café, oder ähnlichem, zur Versorgung der Kunden mit drahtlosem Internet dienen könnte.

Für dieses Tutorial gehe ich von folgenden Vorraussetzungen aus:

Hardware:

  • Ein Router auf dem DD-WRT v2.4 (standard) lauffähig ist (Liste der unterstützten Geräte)
  • Ein Rechner (auch gerne etwas älter) auf dem die Ubuntu Server Edition läuft. Netzwerkzugang sollte er natürlich auch haben.

Netzwerk:

  • Getrennte Netze für das Gäste-WLAN (192.168.182.0/24) und das interne LAN (192.168.1.0/24)
  • Internet-Zugang erfolgt direkt über den Router, der auch das WLAN bereitstellt
  • IP-Adressen:
    • Router/Access-Point (Gateway, DNS): 192.168.1.1
    • Radius/Webserver: 192.168.1.254

Software:

  • DD-WRT v24 standard auf dem Router; Chillispot ist darin integriert
  • Freeradius (RADIUS-Server) zur Verwaltung der Gastzugänge (für Zeitbasierte Zugänge z.B.)
  • Apache 2 zur Anzeige der Login-Seite
  • MySQL zum halten der Daten die Freeradius verwendet

Einrichtung des Routers

Auf die Grundeinrichtung des Routers werde ich hier nicht eingehen, nur die Einstellungen für unser Setup werden kurz erwähnt.

Generelles Setup

Über den Tab "Setup"->"Basic Setup" muss der DHCP-Server ausgeschaltet werden, da dieser sonst mit dem Chillispot-internen kollidiert

WLAN Setup

Über den Tab "Wireless" das W-LAN einrichten, allerdings sollte die Verschlüsselung deaktiviert werden, da wir unsere Zugänge ja von Chillispot und Freeradius verwalten lassen.

Chillispot Setup

Unter dem Tab "Services->HotSpot" finden wir die Chillispot-Konfiguration.

Wie welche Felder auszufüllen sind, ist weiter unten beschrieben.

Erklärung der Optionen:

  • Chillispot - Aktivieren der Chillispot-Funktionalität auf dem Router
  • Seperate Wifi from LAN Bridge - Läßt zu, dass das Ethernet per Kabel, ohne Anmeldung genutzt werden kann.
  • Primary Radius Server - IP-Adresse des Radius-Servers
  • Backup Radius Server - wenn nur ein Radius-Server selbe IP wie oben
  • DNS IP - IP des DNS-Servers der an die Nutzer verteilt werden soll (i.d.R. der lokale Router)
  • Remote Network - Das Netz aus dem die Clients IP-Adressen bekommen (192.168.182.0/24 heißt 192.168.182.1 bis 192.168.182.254 - siehe http://de.wikipedia.org/wiki/Subnetz)
  • Redirect URL - Hierher werden die Nutzer umgeleitet um sich am HotSpot anzumelden
  • Shared Key - Damit wird die Verbindung zum Radius-Server verschlüsselt
  • DHCP-Interface - Netzwerkschnittstelle an die Chillispot gebunden werden soll (i.d.R. wl0 oder eth1, sollte auf jeden Fall das W-LAN-Interface sein)
  • Radius NAS ID - Name des AccessPoints (frei wählbar)
  • UAM Secret: Mit diesem Schlüssel wird die Verbindung zur der Seite verschlüsselt auf der die Nutzer Benutzername und Passwort angeben müssen
  • UAM Any DNS - legt fest ob der Nutzer einen selbst definierten DNS-Server benutzen darf (sollte man aus Sicherheitsgründen bei 0 belassen; nur auf 1 setzen, wenn man weiß was man tut)
  • UAM allowed - Hier können Domains eingetragen werden, die auch ohne Anmeldung zugänglich sein sollen (wichtig zum Beispiel wenn man die Bezahlung des Zugangs über einen externen Anbieter löst)
  • MACauth - legt fest ob die Authentifizierung der Nutzer über deren MAC-Adresse(http://de.wikipedia.org/wiki/MAC-Adresse) erfolgen soll. Wollen wir hier aber nicht
  • Additional Chillispot Options - Hier können weitergehende Optionen, wie z.B. Begrenzung der verteilten IP-Adressen ("dynip 192.168.182.128/26" für 192.168.182.128 bis 192.168.182.191) oder das Festlegen eines zweiten DNS-Servers ("dns2 8.8.8.8), für Chillispot angegeben werden, die aber für den Basisbetrieb nicht notwendig sind.

Installation des Servers:

Ich verwende Ubuntu Server Edition 10.04 als Basis. Wenn ihr eine andere Version benutzt, achtet bitte darauf, das ihr Freeradius in der Version 2.x zu benutzen, mit Version 1 wird dieses Tutorial nicht funktionieren.

Installation der Pakete

Apache/MySQL

sudo tasksel install lamp-server

Damit werden in einem Rutsch Apache, MySQL und PHP installiert.

Freeradius

sudo apt-get install freeradius freeradius-mysql

Chillispot (wird benötigt für die Anmeldeseite)

sudo apt-get install chillispot

Die Fragen die bei der Installation einfach ohne Eingabe mit Enter bestätigen. Chillispot muss hier nicht konfiguriert werden, da wir nur das Login-Script brauchen.

Konfiguration

Konfiguration von Apache

Für das Zusammenspiel mit Chillispot ist es nötig, dass der Webserver eine per SSL verschlüsselte Verbindung anbietet. Problematisch dabei ist, dass bei der Verwendung eines selbst signierten Zertifikats beim Aufrufen der Login-Seite der Browser eine Warnung anzeigen wird. Um das zu umgehen sollte man die Login-Seite hinter ein 'offiziell' signiertes Zertifikat legen. Darauf werde ich allerdings hier nicht eingehen, da das den Rahmen sprengen würde.

Also generieren wir uns unser SSL-Zertifikat erstmal selbst:

sudo openssl req -new -x509 -days 365 -nodes -out /etc/apache2/apache.pem -keyout /etc/apache2/apache.pem

Die Option '-days' besagt wie lange das Zertifikat gültig sein soll. Bitte den eigenen Vorlieben anpassen. Die geforderten Eingaben sind beliebig zu wählen. Lediglich bei 'Common Name' sollte der Hostname des Servers benutzt werden.

Damit Apache das Zertifikat findet, muss noch ein Symlink angelegt werden. Dabei darauf achten, das in Zeile 3 keine normalen Apostrophe, sondern so genannte Backticks (Akzent-Zeichen) verwendet werden müssen. da sonst der Befehl fehlschlägt:

sudo ln -sf /etc/apache2/apache.pem /etc/apache2/`/usr/bin/openssl x509 -noout -hash < /etc/apache2/apache.pem`.0
sudo chmod 600 /etc/apache2/apache.pem

Anschließend aktiviert man das SSL-Modul mit einem

sudo a2enmod ssl

aktiviert die Standard Apache SSL-Site

sudo a2ensite default-ssl

Zu guter Letzt wird das Login-Formular entpackt und an die passende Stelle gelegt:

sudo zcat /usr/share/doc/chillispot/hotspotlogin.cgi.gz > /usr/lib/cgi-bin/hotspotlogin.cgi
sudo chmod 755 /usr/lib/cgi-bin/hotspotlogin.cgi

In dieser Datei müssen noch eine Option angepasst werden, das Passwort dafür habt ihr bei der Konfiguration von Chillispot bei "UAM Secret" festgelegt:

$uamsecret = "nochmalgeheim";

Danach die Apache-Konfiguration neu laden,

sudo /etc/init.d/apache2 force-reload

und testen ob man die Seite https://[server-ip]/cgi-bin/hotspotlogin.cgi erreichen kann. (Dort sollte die Meldung "Chillispot Login failed" erschienen, was aber normal ist, da wie nicht von Chillispot auf diese Seite umgeleitet wurden.)

Falls die Seite angezeigt wird, kann direkt mit der Einrichtung von Freeradius weitergemacht werden, falls nicht, nochmal alles checken und gegebenenfalls berichtigen.

Konfiguration von Freeradius

Zuerst muss unser Access-Point (mit der IP 192.168.1.1) als Client akzeptiert werden. Dazu bearbeitet man die Datei '/etc/freeradius/clients.conf' und fügt folgende Zeilen am Ende der Datei ein:

client captive-portal {
    ipaddr = 192.168.1.1
    secret = ultrageheim
    nastype = other
}

Der Name hinter "client" sollte der selbe sein, den ihr im Feld Radius NAS ID in der Chillispot-Konfiguration verwendet habt sein. "ipaddr" sollte die IP-Adresse des Access-Points sein, "secret" der in der Chillispot-Konfiguration festgelegte "Shared Key". "nastype" sollte wie hier auf 'other' gesetzt werden.

Anbindung von Freeradius an die MySQL-Datenbank

Datenbank anlegen

mysql -u root -p
Enter password:
  1. mysql> CREATE DATABASE radius;
  2. mysql> quit

Tabellen für Freeradius aus den Vorlagen importieren

mysql -u root -p radius < /etc/freeradius/sql/mysql/schema.sql
mysql -u root -p radius < /etc/freeradius/sql/mysql/nas.sql

Benutzer anlegen und ihm Rechte an den Tabellen geben

mysql -u root -p
Enter password:
  1. GRANT ALL PRIVILEGES ON radius.* TO 'radius'@'localhost' IDENTIFIED BY 'sicherespasswort';
  2. FLUSH PRIVILEGES;
  3. quit

Radius für MySQL konfigurieren

In Datei '/etc/freeradius/radiusd.conf' müssen die Zeilen '$INCLUDE sql.conf' und '$INCLUDE sql/mysql/counter.conf' vom Kommentarzeichen befreit werden. Sollte dann hinterher so aussehen:

...
$INCLUDE sql.conf
...
$INCLUDE sql/mysql/counter.conf
...

Die erste Zeile aktiviert die generelle Nutzung der SQL Datenbank, die zweite aktiviert die Nutzung von SQL zur Verwaltung der Zeitbasierten Zugänge. In der Datei 'counter.conf' werden die MySQL-Abfragen definiert die das Verwalten der Zeitkonten regeln. Mit geeigneten SQL-Kenntnissen kann man sich hier gerner mal umschauen.

In der Datei '/etc/freeradius/sql.conf' die folgenden Zeilen ensprechend ändern um Freeradius die Zugangsdaten für den MySQL-Server mitzugeben:

server = "localhost"
login = "radius"
password = "sicherespasswort"

Außerdem müssen in der Datei '/etc/freeradius/sites-available/default' Änderungen gemacht werden. Die Datei ist in Sektionen unterteilt die jeweils mit einem 'name {' beginnen.
In der Sektion 'authorize' muss es heißen:

...
#files
sql
...

In der gleichen Sektion müssen am Ende diese drei Optionen hinzugefügt werden. Sie werden für die Zeitbasierten Zugänge gebraucht.

noresetcounter # Zuständig für zeitlich begrenzte Zugänge (dieser wird von uns verwendet)
dailycounter   # Zuständig für Tageslimits, die aber jeden Tag zurückgesetzt werden
monthlycounter # Zuständig für Monatslimits, die aber jeden Monat zurückgesetzt werden

Wir werden zwar nur den 'noresetcounter' brauchen, aber wenn wir schonmal hier sind, kann es nicht schaden, die anderen beiden auch einzutragen. Kurz zur Beachtung: Wir verwenden nicht den 'dailycounter', da dessen "Zähler" jeden Tag zurückgesetzt wird, und der Zugang so dauerhaft aktiv bleibt, was wir in unserem Café natürlich nicht wollen (Die Sätze nach den # müsst ihr übrigens nicht mit eintragen 😉 ).

In der Sektion 'accounting':

...
sql
...

In der Sektion 'session':

...
sql
...

Also jeweils das Kommentarzeichen vor den 'sql'-Zeilen entfernen. Das ist nötig damit freeradius SQL zur Konfiguration und zum Steuern der Zeitbasierten Konten benutzt.

anschließend kann man mit dem Befehl

sudo freeradius -XXX

testen ob der Server einwandfrei startet und man keinen Fehler in die Konfiguration gebaut hat. Wenn am Ende die Zeile

Info: Ready to process requests.

erscheint, war die Konfiguration zumindest für den Server selbst in Ordnung.
Falls alles erfolgreich verläuft beendet man den Freeradius Testmodus mit STRG-C und startet freeradius neu:

sudo /etc/init.d/freeradius restart

Danach sollte unser Hotspot fertig zur Benutzung sein.

Ein erster Test

Um unser Setup zu testen legen wir zunächst einen neuen Benutzer an, der den Hotspot nutzen darf. Wir tun das über das Terminal, generell kann man aber auch phpMyAdmin (oder eine Alternative) benutzen.

Benutzer und Zeitkonto anlegen

Die Tabelle für die Benutzerzugänge besteht aus 5 Spalten:

  • id (wird automatisch ausgefüllt)
  • username (der name unseres Benutzers
  • attribute (die Option die wir festlegen wollen
  • op (Operator, mit dem die Zuordnung von Attribut und Wert gemacht wird)
  • value (Wert gegen den das Attribut verglichen wird)

Dieses Layout erlaubt es in dieser Tabelle nicht nur das Passwort für einen Benutzer festzulegen, sondern zum Beispiel auch die Werte für die Zeitbegrenzung der Zugänge.

mysql -u root -p radius
  1. INSERT INTO radcheck VALUES ('','test0001','Password',':=','testpasswort');
  2. INSERT INTO radcheck VALUES ('','test0001','Max-All-Session',':=','3600');

Diese beiden Queries legen einen Benutzer mit Namen 'test0001' und Passwort 'testpasswort' an. Zusätzlich geben wir ihm 3600 Sekunden (1 Stunde) auf sein Zeitkonto. Nach deren Ablauf wird er automatisch ausgeloggt.

Mit diesem Benutzer kann man jetzt testen ob das Setup funktioniert, in dem man einen Client mit dem Drahtlosen Netzwerk verbindet und schaut ob man

  1. beim Aufruf einer beliebigen Internetseite auf die Login-Seite umgeleitet wird
  2. Sich mit unserem Test-Benutzer einloggen und danach surfen kann

Zum testen kann man das Zeitlimit auch kleiner wählen um zu sehen ob das automatische Rauswerfen auch funktioniert.

Nachbereitung

Einen funktionierenden Hotspot haben wir nun, aber was fehlt noch?
Nun zu erst fehlt natürlich ein komfortabler Weg um die Nutzerzugänge zu verwalten. Leider waren die die ich bisher getestet habe eher mäßig bis nicht zu gebrauchen. In der Richtung müsstet ihr also selbst mal suchen, oder selbst ein kleines Skript oder Interface zusammenschrauben, die SQL-Anbindung macht das ganze eigentlich ganz gut anpassbar.

Zweiter Punkt wäre eine Firewall um euren Gästen zum Beispiel nur den Zugang zu den Ports 80(http) und 443(https) zu erlauben (hier sollte man auch an Ports für VPN-Verbindungen denken), da man sonst ein nicht zu unterschätzendes Sicherheitsrisiko (z.B. durch P2P-Verkehr) eingeht. Anleitungen um das mit DD-WRT zu bewerkstelligen findet ihr im DD-WRT-Wiki.

Als letztes fehlt euch natürlich noch das passende Cafe und die zahlenden Gäste, aber dafür sorgt ihr besser selbst!

Disclaimer

Zum Schluss natürlich noch der Hinweis, das ich dieses Tutorial nach bestem Wissen und Gewissen erstellt und getestet habe, es aber natürlich Fehler enthalten kann, bzw. durch unsachgemäßen Gebrauch zu unvorhersehbaren Folgen führen kann, für die ich natürlich keine Haftung übernehmen kann. Alles auf eigene Gefahr.

W-LAN der Uni-Marburg mit Wicd nutzen

Da meine schöne (noch) Uni in Marburg zwar (löblicherweise) Informationen bereit stellt wie man unter Linux mit Hilfe des Network-Managers oder wpa_supplicant in das per EAP-TTLS gesicherte W-Lan-Netzwerk kommt, aber meinem Lieblingsnetzwerkverwalter Wicd keine Anleitung gewidmet wurde, holen wir das schnell mal nach. Zum Glück bietet Wicd die großartige Möglichkeit eigene Templates anzulegen, um neue Verschlüsselungsarten hinzuzufügen (nicht falsch verstehen, die gängigen sind schon mit dabei). Diese Templates basieren auf den Konfigurationsdateien für wpa_supplicant und eine Anleitung zur Umsetzung eurer Lieblingsverschlüsselung findet ihr hier: http://wicd.sourceforge.net/templates.php

Doch nun ans Werk.

Zunächst muss das Root-Zertifikat von der Uni-Seite heruntergeladen werden, dieses befindet sich hier: http://www.uni-marburg.de/hrz/internet/wlan/deutsche-telekom-root-ca-2.pem. Gespeichert werden sollte es an dem dafür vorgesehenen Ort: '/etc/ssl/certs/'. Dies muss mittels sudo gemacht werden:


cd /etc/ssl/certs
sudo wget http://www.uni-marburg.de/hrz/internet/wlan/deutsche-telekom-root-ca-2.pem

Bin mir gerade nicht sicher ob das Tool 'wget' zur Standardinstallation gehört, zur Not halt einfach installieren 😉

Anschließend wird aus folgender wpa_supplicant Konfiguration:

network={
ssid="UMRnet_students"
identity="Username@students.uni-marburg.de"
password="MeinPasswort"
proto=WPA
group=TKIP
pairwise=TKIP
eap=TTLS
key_mgmt=WPA-EAP
ca_cert="/etc/ssl/certs/deutsche-telekom-root-ca-2.pem"
anonymous_identity="anonymous"
phase2="auth=PAP"
priority=2
}

wie durch Zauberhand dieses Template für Wicd:


name = EAP-TTLS
author = Benjamin Zimmer
version = 1
require identity *Identity password *Password ca_cert *Path_to_CA_Cert anonymous *Anonymous
-----
ctrl_interface=/var/run/wpa_supplicant
network={
ssid="$_ESSID"
scan_ssid="$_SCAN"
identity="$_IDENTITY"
password="$_PASSWORD"
proto=WPA
group=TKIP
pairwise=TKIP
eap=TTLS
key_mgmt=WPA-EAP
ca_cert="$_CA_CERT"
anonymous_identity="$_ANONYMOUS"
phase2="auth=PAP"
priority=2
}

Erklären werd ich den Spaß mal nicht, da das auf der Wicd Seite reichen sollte, falls doch Fragen sind, Finger heben und bitte nicht Schnipsen 😉

Diese Datei wird als '/etc/wicd/encryption/templates/eap-ttls' gespeichert und anschließend in die Datei '/etc/wicd/encryption/templates/active' folgende Zeile ganz unten eingetragen:

eap-ttls

Dann die Wicd Gui öffnen, oben auf Aktualisieren (Refresh) klicken und die erweiterten Einstellungen des UMR-Netzwerkes aufrufen:WLAN Uni Marburg mit Wicd

In diesen Dialog müsst ihr euren Benutzernamen, das Passwort, den Pfad zum heruntergeladenen Root-Zertifikat eintragen und in das letzte Feld 'anonymous' eintragen, fertig. Anschließend genügt ein Klick auf Verbinden (Connect) und die Geschichte läuft 🙂 (hoffentlich)

Getestet wurde das ganze von mir unter (K)Ubuntu Jaunty mit Wicd Version 1.5.9

Netzbetankung – iTunes (DAAP) Server unter Linux

air-fuel

Heute mal etwas kurzes für zwischendurch. iTunes ist sicher so gut wie allen ein Begriff, und einige haben mit Sicherheit auch schon von dessen Fähigkeit gehört haben, die iTunes Musikbibliothek im Netzwerk bereitzustellen. Die Standard-Audio-Player unter Ubuntu (Rhythmbox) und Kubuntu (Amarok) sind in der Lage auf diese sogenannten DAAP-Shares zuzugreifen und so Musikstücke aus der entfernten Bibliothek abzuspielen.

Nun ist es so das iTunes zwar für den Mac und für Windows erhältlich ist, nicht aber für Linux. Allerdings wurde das DAAP-Protokoll durch Reverse Engineering nachempfunden und auf Linux portiert. Die daraus entstandene Software hört auf den Namen mt-daapd, oder etwas eingänglicher und vielleicht ein wenig bekannter: Firefly-Media-Server.

Doch nun zur Tat:

Das für den Betrieb nötige Avahi ist in den neueren Ubuntu-Versionen (>6.10) bereits vorinstalliert und aktiviert. Daher muss nur noch der eigentliche Server installiert werden:

sudo apt-get install mt-daapd

Anschließend ist noch ein wenig Konfiguration von Nöten, wobei ich mich hier auf das wichtigste beschränken werde:

sudo vim /etc/mt-daapd.conf

Darin müssen folgende Zeilen angepasst werden:

admin_pw = passwort - hier ist das Passwort für das Webinterface anzupassen.
mp3_dir = /pfad/zur/musik - Hier muss das Verzeichnis das die Musik beinhaltet angegeben werden.

Optional können noch
servername = Name des Servers
und
password = passwort
angepasst werden.
Zu guter Letzt sollte man noch darauf achten das das Musik-Verzeichnis vom Benutzer mt-daapd gelesen werden kann:

sudo chmod -R a+r /pfad/zur/musik - Damit kann jeder auf dem System vorhandene Benutzer lesend auf die Musik zugreifen
Anschließend startet man den Dienst neu: sudo /etc/init.d/mt-daapd restart und checkt ob das Web-Interface unter "http://serverip:3689" verfügbar ist. Das sollte dann so aussehen:

mt-daapd Web-Interface

Hier kann dann mit der Schaltfläche "Start Full Scan" das Musikverzeichnis eingelesen werden. Sollte anschließend unter Songs weiterhin eine "0" stehen, stimmt etwas mit den Leserechten des Musikverzeichnisses nicht!

Damit ist der Server eingerichtet und sollte in Mediaplayern wie iTunes, Amarok, Rhythmbox (Plugin muss aktiviert werden) verfügbar sein. Viel Spass beim Musikgenuss!

Bild: flickr

Geschwindigkeit im Netzwerk messen – Speedometer

Um herauszufinden wie viele Daten gerade durch die Netzwerkleitung eures Rechners flitzt, gibt es so einige Tools. Ein ganz hübsches für die Kommandozeile ist Speedometer.

Unter Ubuntu relativ flott installiert mit

sudo apt-get install speedometer

Danach kann man die Software schon auf die Netzwerkschnittstelle loslassen:

speedometer -tx eth0 -rx eth0
Der Befehl zeigt sowohl den eingehenden als auch den ausgehenden Netzwerkverkehr auf dem Netzwerk-Device eth0.

Ein weiteres cooles Feature ist das man Speedometer auf eine Datei ansetzen kann, die gerade heruntergeladen wird, und beobachten mit welcher Geschwindigkeit dies geschieht. Dazu startet man den Download und ruft Speedometer dann mit dem Parameter -f auf:

speedometer -f /pfad/zur/datei

Speedometer kann zwar noch einiges mehr, aber das dürft ihr dann mal selbst rausfinden! Viel Vergnügen!