lighttpd auf OpenWRT
Kühlschränke, Steckdosen oder Jalousien – vieles im Haushalt lässt sich inzwischen per Browser steuern. Doch einige Hersteller sparen den Passwortschutz ein. Für die Fernsteuerung aus dem Internet lässt sich diese Sicherheitsschranke mit Hilfe eines WRT-Routers nachrüsten.
- Daniel Bachfeld
Kühlschränke, Steckdosen oder Jalousien – vieles im Haushalt lässt sich inzwischen per Browser steuern. Doch einige Hersteller sparen den Passwortschutz ein. Der Artikel Nachgesichert in Ausgabe 10/12 beschreibt, wie man diese Sicherheitsschranke mit dem Programm lighttpd unter Windows nachrüstet. Wir haben uns dabei für lighttpd entschieden, weil der mit nahezu identischer Konfiguration auch auf diversen anderen Systemen läuft – sogar auf dem Router-Linux OpenWRT. In diesem Ergänzungsartikel fassen wir die OpenWRT-spezifischen Schritte zusammen.
Die aktuelle OpenWRT-Version Backfire 10.x ist relativ groß und füllt schon mal einen guten Teil des 4 MByte kleinen Flash unseres Beispiel-Routers Asus WL500g Deluxe. Bei den meisten aktuellen Geräten steht auch nicht mehr Flash zur Verfügung. Da lighttpd außer OpenSSL auch diverse andere Pakete nachinstalliert, ist kein Platz mehr im Flash. Als Lösung bleibt nur die Installation auf einem USB-Stick – der WL500g Deluxe bietet praktischerweise 2 USB-Ports. Zur Einbindung des Sticks muss man diverse Kernel-Module und ein Programmpaket nachinstallieren:
opkg install kmod-usb-storage
opkg install kmod-usb-uhci
opkg install kmod-fs-ext2
opkg install block-mount
Anschließend wird zunächst der Stick für das Ext2-Dateisystem formatiert. Damit man dafür auf dem kleinen Router nicht zusätzlich noch die dafür erforderlichen Tools installieren muss, formatiert man den Stick am besten unter Linux auf dem PC. Wer kein installiertes Linux hat, nimmt beispielsweise ein Live-System wie Knoppix oder Desinfec't. Dort öffnet man eine Shell und gibt beispielsweise
mke2fs /dev/sdb1
ein, Wobei sdb1 ist die zu formatierende Partition des Sticks. Welche es im eigenen Fall ist wirklich ist, sieht man nach dem AnschlieĂźen des Sticks und der Eingabe des Befehls dmesg in einer Shell.
Da man den Stick schon am PC angeschlossen hat, kopiert man gleich noch die Dateien auth.user und das Serverzertifikat server.pem auf den Stick. Danach schlieĂźt man den Stick wieder an der Router an.
Damit der Kernel nach dem Booten die nötigen Treiber vor dem Mount-Versuch fertig geladen hat, verordnet man dem Mount-Skript ein Wartepäuschen: Unter start() die Zeile
sleep 15
Dann starten die Befehle
/etc/init.d/fstab enable
/etc/init.d/fstab start
den Mount-Dienst. In /etc/conf/fstab gilt es nun den Eintrag fĂĽr /dev/sda1 anzupassen:
config mount
option target /mnt
option device /dev/sda1
option fstype ext2
option options rw,sync
option enabled 1
option enabled_fsck 0
Damit die im Weiteren installierten Pakete auf dem USB-Stick landen, fĂĽgen Sie der Datei /etc/opkg.conf die Zeile
dest usb /mnt
hinzu. In /etc/profile tragen Sie dann die Pfade ein, damit die auf dm Stick installierten Programme sich direkt starten lassen:
export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/mnt/bin:/mnt/sbin:/mnt/usr/bin:/mnt/usr/sbin
export LD_LIBRARY_PATH=/lib:/usr/lib:/mnt/lib:/mnt/usr/lib
Nun ist es endlich Zeit, den Webserver und die erforderlichen Module zu installieren:
opkg install -d usb lighttpd
opkg install -d usb lighttpd-mod-auth
opkg install -d usb lighttpd-mod-proxy
Die Anpassungen in der Konfigurationsdatei /mnt/etc/lighttpd/lighttpd.conf sind im Prinzip dieselben wie im Artikel fĂĽr Windows beschrieben. Der wichtigste Unterschied ist, dass Sie alle Pfade komplett angeben mĂĽssen, weil die Vorlagen-Datei auf OpenWRT keine Variablen fĂĽr die Verzeichnisse vordefiniert. Beispielsweise lautet der Verweis auf die User-Passwort-Datei nicht
auth.backend.plain.userfile = conf_dir + "/auth.user"
sondern
auth.backend.plain.userfile = "/mnt/auth.user"
Zusätzlich muss man der Lighttpd-Konfiguration die Zeile auth.backend = "plain" hinzufügen und die Parameter der Require-Direktive in "require" => "user=user" ändern.
Um die Verbindung mit dem Proxy-Server per SSL übr Port 443 zu sichern, ist folgende Ergänzung notwendig:
$SERVER["socket"] == ":443" {
ssl.engine = "enable"
ssl.pemfile = "/mnt/server.pem"
}
Apropos Server-Ports: Unter OpenWRT arbeitet parallel noch der Miniwebserver uhttpd für die LuCi-Konfigurationsoberflache auf Port 80. Da sich der unverschlüsselte Port von Lighttpd nicht abschalten lässt, muss man ihn mit der Option server.port = 81 verschieben.
Wenn die Konfigurationsdatei fertig ist, starten Sie den Proxy-Server mit
lighttpd -f /mnt/etc/lighttpd/lighttpd.conf -m /mnt/usr/lib/lighttpd/
Damit lighttpd von Außen erreichbar ist, muss man nur noch in der Firewall mit einem Eintrag in /etc/config/firewall den SSL-Port öffnen.
config 'rule'
option 'src' 'wan'
option 'proto' 'tcp'
option 'dest_port' '443'
option 'target' 'ACCEPT'
Der Befehl /etc/init.d/firewall restart macht die Änderung wirksam.
()