OpenWrt: SSH- und LuCI-Webzugang absichern

Standardmäßig kann OpenWrt mittels SSH und LuCI über zwei Schnittstellen administriert werden. Mit der Sicherheit dieser Zugänge steht und fällt somit auch die Sicherheit eures Routers. Aus diesem Grund ist es empfehlenswert die Zugänge entsprechend gut abzusichern bzw. "zu härten". Wie ich das konkret bei meinem Router umgesetzt habe, erfahrt ihr in diesem Beitrag.

Folgende Software wurde verwendet:
  • OpenWrt v19.07.7

Sicheres Root-Passwort wählen

Nach der Installation von OpenWrt ist für den Root-Zugang noch kein Passwort hinterlegt. Als erstes sollte also über LuCI im Webbrowser ein Passwort gesetzt werden. Dazu wählt im Menü System - Adminstration und den Tab Router Passwort. Vergebt nun ein sicheres Passwort und speichert es per Klick auf Save.

Hinweis Passwortvergabe

Einen informativen Beitrag zum Thema "Sichere Passwörter", findet ihr im Kuketz-Blog: Sicheres Passwort wählen: der Zufall entscheidet

Empfehlenswert ist zudem der Einsatz eines Passwort-Manager, wie z.B. pass mit dem ihr euch ein sicheres Passwort generieren lassen könnt.

SSH-Zugang absichern

Von Haus aus lauscht der SSH-Server (Dropbear) von OpenWrt auf allen Interfaces. Außerdem ist es erlaubt sich per Passwort anzumelden. Ratsamer ist es, SSH-Verbindungen nur über ausgewählte Interfaces zu erlauben. In meinem Fall darf ein Benutzer sich nur über das "LAN"-Interface, also nur aus meinem lokalen Heimnetzwerk heraus, per SSH anmelden. Des Weiteren habe ich die Anmeldung per Passwort deaktiviert, so dass Anmeldungen nur via Public-Key-Authentifizierung erlaubt sind.

Per LuCI wählt System - Administration und den Tab SSH Access. Hier legt ihr fest, auf welchen Interfaces der SSH-Server auf eingehende Verbindungen lauschen soll und, ob Anmeldungen per Passwort akzeptiert werden.

OpenWrt: SSH-Zugang absichern

Habt ihr alles eingestellt, übernehmt die Änderungen per Save & Apply.

Da nun keine Passwort-Anmeldungen mehr zulässig sind, müsst ihr nun euren SSH-Key hinterlegen. Dazu wechselt zum Tab SSH-Keys. Hier fügt ihr euren SSH-Key ein und klickt auf Add key. Ich selbst nutze als SSH-Key meinen GPG-Authentication-Subkey, der sich auf meinem YubiKey befindet.

OpenWrt: SSH-Zugang absichern - SSH-Key hinterlegen

Anschließend könnt ihr euch nur noch mittels eurem SSH-Key aus eurem "LAN"-Heimnetzwerk per SSH an eurem Router anmelden.

LuCI-Webzugang absichern

Der Webserver, der die LuCI-Webschnittstelle bereitstellt, lauscht "out of the box" auf Port 80 und die Verbindungen erfolgen unverschlüsselt. Eine Möglichket wäre LuCI per HTTPS abzusichern. Hierfür ist die Installation von weiteren Paketen notwendig und es müsste ein eigenes TLS-Zertifikat ausgestellt werden. Da wir mit SSH aber bereits eine verschlüsselte Verbindung zum Router aufbauen können, besteht aber alternativ auch die Möglichkeit die LuCI-HTTP-Daten über SSH zu tunneln. Letztere Variante bevorzuge ich und habe ich bei mir auch so umgesetzt.

Hierfür stellt eine SSH-Verbindung zu eurem Router her und ändert die Datei /etc/config/uhttpd wie folgt:

# Server configuration
config uhttpd main

    # HTTP listen addresses, multiple allowed
    list listen_http        127.0.0.1:80
    #list listen_http       0.0.0.0:80
    #list listen_http       [::]:80

    # HTTPS listen addresses, multiple allowed
    #list listen_https      0.0.0.0:443
    #list listen_https      [::]:443

[...]
Datei: /etc/config/uhttpd

Kommentiert also alle bestehenden list-Einträge aus und fügt die Zeile mit der IP 127.0.0.1:80 hinzu. Hierdurch weisen wir den Webserver an, dass nur noch Verbindungen übers Loopback-Interface (localhost) möglich sind.

Damit die Änderungen wirksam werden, muss der Webserver neugestartet werden:

/etc/init.d/uhttpd restart
Terminal / Konsole

Es sollt euch nun nicht mehr möglich sein, LuCI über euren Webbrowser aufzurufen. Damit das wieder möglich ist, müssen wir die Daten per SSH tunneln. Dazu verbindet ich euch per SSH wie folgt:

ssh -L127.0.0.1:8000:127.0.0.1:80 root@192.168.1.1
Terminal / Konsole

Hierdurch werden alle Anfragen auf eurem lokalen PC/Notebook für localhost:8000 zum Router zu localhost:80 durchgereicht bzw. weitergeleitet.

Wenn ihr nun in eurem Webbrowser die URL http://localhost:8000/ aufruft, solltet ihr wieder Zugang zu LuCI haben.

Hinweis SSH-Alias für SSH-Tunnel-Befehl

Um sich den kryptischen SSH-Login-Befehl zum Tunneln der LuCI-Daten nicht merken und jedes mal eintippen zu müssen, kann ein SSH-Alias angelegt werden.

LuCI standardmäßig deaktivieren - bedarfsweise aktivieren

Ich selbst habe bei mir LuCI bzw. den Webserver standardmäßig deaktiviert und aktiviere es nur bei Bedarf. Zum Deaktivieren sind folgende Befehle auszuführen:

/etc/init.d/uhttpd disable
/etc/init.d/uhttpd stop
Terminal / Konsole

In ~/.profile habe ich nun zusätzlich folgende Aliasse hinzugefügt:

[...]
alias startLuci='/etc/init.d/uhttpd start'
alias stopLuci='/etc/init.d/uhttpd stop'
[...]
Datei: .profile

Bei Bedarf kann ich LuCI nun jederzeit über den Befehl startLuci starten.

Weiterführende Informationen

Für noch mehr Details zur Absicherung eures OpenWrt-Routers empfehle ich folgende Seiten aus der OpenWrt-Doku:

Fazit

Generell muss man sagen, dass OpenWrt bereits "sicher" (100%-ige Sicherheit gibt es natürlich nicht) von Haus konfiguriert ist. Nichtsdestotrotz ist es ratsam, unter Abwegung bzw. Berücksichtung von Komfort und persönlichen Anwendungsfällen, die Sicherheit des Routers durch verstärkte Absicherung der Administrationszugänge zu erhöhen.

Feedback

Für Feedback zum Beitrag, seien es Fragen, Korrigierungen und/oder Anregungen, könnt ihr mir gerne eine Nachricht per E-Mail oder Mastodon schreiben (siehe Kontakt).