1. Renovierung
Das regelmäßige Einspielen von OpenWrt-Updates bzw. -Upgrades stellt eine der wichtigsten Maßnahmen gegen bekannte bzw. bekannt gewordene Sicherheitslücken dar. Bei einer zentralen Netzwerkkomponente wie einem OpenWrt-Router ist das zeitnahe Einspielen daher essenziell – immerhin ist ein Beinchen des Routers meist dauerhaft mit dem Internet verbunden und auch für Angreifer 24/7 erreichbar.
Ein Upgrade schließt oftmals allerdings nicht nur Sicherheitslücken, sondern bringt für gewöhnlich neue Funktionen mit und behebt Fehler. Diese Änderungen erfasst das OpenWrt-Projekt in einem Changelog (bspw. OpenWrt v18.06.5 Changelog), die dort jeder transparent nachverfolgen kann.
Im vorliegenden Beitrag möchte ich euch den Upgrade-Vorgang anhand einer FRITZ!Box 4040 demonstrieren. Leider ist das Einspielen von OpenWrt-Upgrades noch immer nicht sonderlich benutzerfreundlich und mit einigen Stolpersteinen behaftet.
- FRITZ!Box 4040 und Netzwerkaufbau – OpenWrt Teil1
- Flash OpenWrt auf FRITZ!Box 4040 – OpenWrt Teil2
- Hardening SSH- und LuCI-Webzugang – OpenWrt Teil3
- Keine Werbung und Tracker mit Adblock-Addon – OpenWrt Teil4
- Stubby: Verschlüsselte DNS-Anfragen – OpenWrt Teil5
- Firewall | Kontrolle ausgehender Datenverkehr – OpenWrt Teil6
- OpenWrt-Upgrade einspielen – OpenWrt Teil7
2. Vor dem Upgrade
Vor dem Upgrade von OpenWrt solltet ihr euch Folgendes vor Augen führen:
- Selbst installierte Software: Pakete, die ihr selbst installiert habt, werden nach dem Upgrade nicht mehr vorhanden sein. Sofern ihr bisher keine Dokumentation geführt habt, wäre jetzt ein geeigneter Zeitpunkt, dies nachzuholen. Sowohl das Adblock-Addon als auch stubby müsst ihr nach dem Upgrade neu installieren und konfigurieren. Das gilt ebenso für weitere Software bzw. Pakete, die ihr selbst bzw. manuell hinzugefügt habt.
- Konfigurationen: Netzwerk-Einstellungen, WiFi-Einstellungen, Firewall-Regeln usw. werden erhalten bleiben – sofern das vom Nutzer gewünscht ist. Dafür gibt es beim Upgrade-Vorgang eine Checkbox mit der Bezeichnung
Keep settings
. Das »Vergessen« von Einstellungen bezieht sich also ausschließlich auf nachträglich installierte Software bzw. Addons. - Sysupgrade-Image: Für den nachfolgend beschriebenen Upgrade-Vorgang ist die Verfügbarkeit eines sogenannten Sysupgrade-Image für euer Gerät erforderlich. Anhand einer FRITZ!Box 4040 werde ich den Vorgang demonstrieren.
- Dokumentation: Die Dokumentation eurer Einstellungen ist nicht nur im Rahmen eines Upgrades sinnvoll, sondern eigentlich immer. Als Beispiel stelle ich euch meine Konfiguration im PDF-Format zur Verfügung. Eine derartige Dokumentation erstelle ich für jedes Projekt bzw. technische Gerät – angefangen beim Desktop-System, über die searx-Instanz bis hin zu Android-Pentesting ist bei mir grundsätzlich alles dokumentiert.
- Software-Brick: Installiert ihr ein falsches oder beschädigtes Upgrade-Image kann dies zu einem Software-Brick führen. In diesem Fall müsst ihr eine komplette Neuinstallation durchführen. Es ist daher äußerst wichtig das korrekte Upgrade-Image zu wählen – passend zu eurem Gerät.
2.1 DNS-Auflösung: Stubby-Stolperstein
Sofern ihr den 5. Teil der OpenWrt-Artikelserie (Stubby-Installation) umgesetzt habt, sind vor dem Upgrade zunächst ein paar Anpassungen notwendig. Andernfalls wird die DNS-Auflösung nach dem Update nicht mehr funktionieren, da das stubby-Paket nach dem OpenWrt-Upgrade nicht mehr vorhanden ist. Die nachfolgenden Änderungen könnt ihr natürlich auch nach dem Upgrade vornehmen:
uci add_list dhcp.@dnsmasq[-1].server='127.0.0.1' uci set dhcp.@dnsmasq[-1].noresolv=-1 uci set network.wan.dns='46.182.19.48' uci set dhcp.@dnsmasq[-1].dnssec=-1 uci commit && reload_config /etc/init.d/dnsmasq restart
Behaltet bitte im Hinterkopf, dass das Paket stubby (inkl. Konfiguration) nach dem OpenWrt-Upgrade-Vorgang erneut installiert und konfiguriert werden muss.
2.2 Backup
Vor dem Durchführen eines Upgrades solltet ihr die aktuelle Konfiguration (inkl. Konfigurationsdateien) sichern. Das erledigt ihr über das LuCI-Webinterface unter System -> Backup / Flash Firmware
. Klickt einfach auf den Button Generate archive
und speichert euch das Archiv anschließend auf die Festplatte des Rechners.
3. Upgrade
Nachfolgend demonstriere ich den Upgrade-Vorgang einer FRITZ!Box 4040 von der OpenWrt-Version 18.06.4 auf die Version OpenWrt 18.06.5. Es handelt sich also um einen kleinen Versionssprung – die durchgeführten Änderungen sind dennoch beachtlich.
Bevor ihr fortfahrt, solltet ihr euch mit einem Netzwerkkabel mit dem OpenWrt-Router verbinden. Grundsätzlich funktioniert das Upgrade aber auch über WiFi.
3.1 Korrektes Image wählen
Auf der OpenWrt-Informationsseite zur FRITZ!Box 4040 wird das Upgrade-Image unter Installation angeboten. In der Tabelle trägt die Spalte die Bezeichnung Firmware OpenWrt Upgrade
. Darunter wird das Sysupgrade-Image verlinkt:
http://downloads.openwrt.org/releases/18.06.5/targets/ipq40xx/generic/openwrt-18.06.5-ipq40xx-avm_fritzbox-4040-squashfs-sysupgrade.bin
Wenn wir den Link kopieren und entsprechend kürzen, wird beim Aufruf eine Übersichtsseite mit Images + Sysupgrade-Images für die OpenWrt-Version 18.06.5 dargestellt. Hier finden wir auch die sha256sum für das Sysupgrade-Image der FRITZ!Box 4040:
Lasst diesen Tab im Browser einfach offen, da wir die sha256sum später noch benötigen.
Der Kuketz-Blog ist spendenfinanziert!
Unabhängig. Kritisch. Informativ. Praxisnah. Verständlich.
Die Arbeit von kuketz-blog.de wird vollständig durch Spenden unserer Leserschaft finanziert. Sei Teil unserer Community und unterstütze unsere Arbeit mit einer Spende.
3.2 Upgrade per LuCI-Webinterface
Nachdem ihr das entsprechende Sysupgrade-Image (openwrt-18.06.5-ipq40xx-avm_fritzbox-4040-squashfs-sysupgrade.bin) auf eurem Rechner abgelegt habt, könnt ihr den Upgrade-Vorgang starten. Klickt dazu auf System -> Backup / Flash Firmware
. Unter »Flash new firmware image« wählt ihr das Sysupgrade-Image und prüft, ob das Häkchen bei Keep settings
gesetzt ist. Anschließend klickt ihr auf Flash image...
:
Bevor der Flash-Vorgang startet fordert euch OpenWrt auf, die SHA256-Checksumme des Images zu prüfen. Die sha256sum dient der Überprüfung der Datenintegrität. Stimmt die sha256sum also mit der Ziffernfolge von der Webseite (avm_fritzbox-4040-squashfs-sysupgrade.bin)
fb1302129a9bc28b6598ccdf47a56867cd169b04bcc3586be8a5667471cbee7f
überein, kann der Vorgang gestartet werden. Andernfalls solltet ihr den Vorgang abbrechen und das Sysupgrade-Image erneut herunterladen. Das Flashen einer beschädigten Firmware-Datei wird bei eurem Router unweigerlich zu einem Software-Brick führen.
Nach einem Klick auf Proceed
wird die Image-Datei auf den Router geflasht. Je nach Routermodell kann das einige Minuten dauern. Bei der FRITZ!Box 4040 etwa drei Minuten – das Lämpchen ganz links wird während des Upgrade-Vorgangs blinken:
Nachdem das Image aufgespielt ist, wird der Router neu starten. Im Idealfall könnt ihr euch danach wieder per LuCI-Webinterface mit dem OpenWrt-Router bzw. der FRITZ!Box 4040 verbinden.
Hinweis
Weitere Informationen zum Upgrade-Vorgang findet ihr auf den beiden OpenWrt-Seiten Upgrading OpenWrt firmware via LuCI and CLI und Upgrading OpenWrt via web interface.4. Nach dem Upgrade ist vor dem Upgrade
Loggt euch über das LuCI-Webinterface ein und prüft auf der Status-Seite, ob die neue Versionsnummer angezeigt wird:
Firmware Version OpenWrt 18.06.5 r7897-9d401013fc / LuCI openwrt-18.06 branch (git-19.334.34552-3a3d8f4)
Anschließend könnt ihr mit den Nacharbeiten beginnen. Wie hoch der Aufwand ausfällt, ist von mehreren Faktoren abhängig:
- Zusatzpakete: Je nachdem wie viele Addons bzw. Software ihr installiert habt, müsst ihr diese erneut installieren. Sofern ihr vor dem Upgrade ein Backup (siehe Ziffer 2.2) angefertigt habt, könnt ihr die Konfiguration aus dem Archiv extrahieren und bei Bedarf einspielen. Das reduziert den Zeitaufwand erheblich.
- Dokumentation: Eine saubere Dokumentation ist das A und O in der Informatik. Sofern eure Dokumentation alle installierten Zusatzpakete, Einstellungen und Anpassungen erfasst, sollten die Nacharbeiten überschaubar sein.
- Bugs / Unvorhergesehenes: Nach dem Upgrade können bisher unentdeckte Bugs oder größere Änderungen an benutzten Paketen die bestehende Konfiguration stören. Das nicht installierte Stubby-Paket hat bei mir bspw. für einen Ausfall der DNS-Auflösung gesorgt. Solche Stolpersteine kommen vor, lassen sich meist aber auch lösen.
Grob solltet ihr ca. ein bis zwei Stunden für ein OpenWrt-Upgrade einplanen.
5. Regelmäßige Updates
Aktuell bietet OpenWrt keine (vernünftige) Update-Benachrichtigung für installierte Software bzw. Addons an. Das Einspielen von (Sicherheits-)Updates zählt allerdings zu den in Stein gemeißelten Gesetzen der IT-Welt. Daher habe ich zwei Skripts entworfen, die euch per E-Mail über verfügbare Updates benachrichtigen und das manuelle Einspielen von Updates erleichtern.
Zunächst wird das Paket mailsend
installiert – wahlweise über das LuCI-Webinterface oder SSH. Anschließend loggen wir uns per SSH ein und erstellen das erste Skript. Sofern Updates zur Verfügung stehen wird es eine E-Mail mit allen verfügbaren Updates an eine ausgewählte E-Mail-Adresse versenden.
nano /root/update-notification
#!/bin/sh opkg update opkg list-upgradable > updates.txt if [ -s updates.txt ] then mailsend -smtp <SMTP-Server> -port 465 -t <Empfängeradresse> -f <Absenderadresse> -sub 'OpenWrt-Updates' -ssl -auth -user <E-Mail-Nutzername> -pass "E-Mail-Auth-Passwort" -mime-type "text/plain" -msg-body "updates.txt" fi rm updates.txt
Die mailsend-Parameter müsst ihr an eure Bedürfnisse anpassen. Hier die Zeile aus dem Skript gefüllt mit Beispieldaten:
mailsend -smtp smtp.mailbox.org -port 465 -t admin@meinedomain.de -f openwrt_sender@mailbox.org -sub 'OpenWrt-Updates' -ssl -auth -user openwrt_sender@mailbox.org -pass "secret123456" -mime-type "text/plain" -msg-body "updates.txt"
Das Skript wird anschließend noch als ausführbar markiert:
chmod +x /root/update-notification
Über das Webinterface System -> Scheduled Tasks
könnt ihr das Skript anschließend zu einem beliebigen Zeitpunkt ausführen:
# 6 Uhr # Update list of available packages | Send notification mail 45 06 * * * /root/update-notification
Nach diesem kleinen Eingriff erhaltet ihr jeden Morgen um 6:45 Uhr eine E-Mail, sofern Package-Updates zur Verfügung stehen.
Das Einspielen von Updates sollte manuell über SSH erfolgen. Auch hierfür erstellen wir ein kleines Skript, was jedes Mal aufgerufen wird, wenn wir uns per SSH auf dem OpenWrt-Router anmelden:
nano ~/.profile
#!/bin/sh opkgInstalled="$(opkg list-installed 2> /dev/null | wc -l)" #silencing error output opkgUpgradable="$(opkg list-upgradable 2> /dev/null | wc -l)" #silencing error output echo "$opkgInstalled packages are installed." && echo "$opkgUpgradable packages can be upgraded." && echo echo "Upgrade commands:" echo "List available updates: opkg list-upgradable" echo "Upgrade package: upgrade <PACKAGE>" echo "Upgrade all packages: opkg list-upgradable | cut -f 1 -d ' ' | xargs opkg upgrade" && echo
Beispiel-Output des Skripts nach einem Login per SSH:
126 packages are installed. 0 packages can be upgraded. Upgrade commands: List available updates: opkg list-upgradable Upgrade package: upgrade <PACKAGE> Upgrade all packages: opkg list-upgradable | cut -f 1 -d ' ' | xargs opkg upgrade
Die Upgrade commands
sind als Gedächtnisstütze gedacht. Updates von Packages sollten manuell per folgendem Befehl erfolgen:
upgrade <PACKAGE>
Wer alle Updates auf einmal einspielen möchte, kann dafür den folgenden Befehl benutzen:
opkg list-upgradable | cut -f 1 -d ' ' | xargs opkg upgrade
6. Fazit
Wie essenziell das Einspielen von (Sicherheits-)Updates bzw. Upgrades ist muss ich euch als regelmäßige Leser dieses Blogs wohl kaum erneut ins Gedächtnis rufen. Das Wissen darüber allein ist allerdings nur die halbe Miete. Sofern Updates zur Verfügung stehen, spielt diese auch zeitnah ein – gerade bei einer Netzwerkkomponente, die 24/7 von »außen« erreichbar ist, sollte dies selbstverständlich sein. Alles andere ist fahrlässig und setzt euch bzw. eure Geräte, Daten etc. einem unnötigen Risiko aus.
Bedingt durch die Vielzahl an unterschiedlichen Geräten, die OpenWrt unterstützt, wird bzw. kann es vermutlich keinen einheitlichen und einfachen Upgrade-Prozess geben. Dennoch könnte sich die Benutzerfreundlichkeit verbessern, indem bspw. problematische Konfigurationen erkannt und nach dem Upgrade Lösungen bzw. Hinweise angeboten werden.
Mit dem vorliegenden Teil der Artikelserie OpenWrt schließe ich das Kapitel vorerst, behalte mir jedoch vor, weitere Teile zu ergänzen. Insgesamt ziehe ich eine positive Bilanz und kann aus eigener Erfahrung sagen, dass ein OpenWrt-Router auf Basis der FRITZ!Box 4040 eine Bereicherung für jedes Heimnetzwerk darstellt.
Bildquellen:
System Update: Pixelmeetup from www.flaticon.com is licensed by CC 3.0 BY
Wenn du über aktuelle Beiträge informiert werden möchtest, hast du verschiedene Möglichkeiten, dem Blog zu folgen:
16 Ergänzungen zu “OpenWrt-Upgrade einspielen – OpenWrt Teil7”
Forum oder der Chat geeignete Anlaufstellen, um dein Anliegen zu diskutieren. Per E-Mail beantworte ich grundsätzlich keine (Support-)Anfragen – dazu fehlt mir einfach die Zeit. Kuketz-ForumAbschließender Hinweis
Blog-Beiträge erheben nicht den Anspruch auf ständige Aktualität und Richtigkeit wie Lexikoneinträge (z.B. Wikipedia), sondern beziehen sich wie Zeitungsartikel auf den Informationsstand zum Zeitpunkt des Redaktionsschlusses.Kritik, Anregungen oder Korrekturvorschläge zu den Beiträgen nehme ich gerne per E-Mail entgegen.
Super Coole Anleitung – Vielen Dank
aber warum nimmst du 2018er Quellen?
gibt es ein Problem mit der aktuellsten Version?
Wäre doch noch sicherer?!
/ releases / 19.07.0-rc2 / targets / ipq40xx / generic /
Ich nutze keine 2018er Quellen, sondern die offiziellen stable-Realeases. Das, was du meinst sind Vorab-Versionen, die oftmals in der Stabilität etc. noch nicht ganz so ausgereift sind. Produktiv würde ich das nicht einsetzen wollen.
Von der 19.07.0-rc2 würde ich vorerst abraten. Diese behält die Konfig nach dem Reboot nicht. Da sind alle angelegten Interfaces usw. weg…. Betrifft derzeit aber auch andere Router.
Ich denke, es steht hoffentlich außer Diskussion, RC- und Beta-Version nur in Ausnahmefällen bzw. Laborumgebungen einzusetzen.
Und nun bitte zurück zum ursprünglichen Thema: Der Upgrade-Prozess.
Hallo Mike,
schöne Artikel-Serie.
Mich würde noch interessieren (bin nicht sicher ob das Off_Topik ist)
– ob die Tasten auf dem Fritz 4040 konfigurierbar sind. Z.B. WPS Taste als Restart oder als Ausschalt-Taster
– WLAN zeitgesteuert an und ausmachen
– den Router zeitgesteuert über Nacht ausmachen (nicht über die Steckdose)
Das wäre vielleicht noch ein Artikel dazu wenn das alles überhaupt funktioniert.
Konfigurierbare Tasten
Scheint ein bisschen Gebastel zu sein, sollte aber gehen.
WLAN zeitgesteuert ein- und ausschalten sollte über cron kein Problem sein.
Im Menü unter System->Scheduled Tasks kann man z.B. die Zeilen
00 23 * * * wifi down radio0
00 23 * * * wifi down radio1
einfügen.
Damit wird das WLAN (sowohl 2,4GHz als auch 5GHz) jeden Tag um 23:00 Uhr abgeschaltet.
Das ganze mit ‚up‘ statt ‚down‘ dann wieder zum Einschalten.
Über cron könnte man auch den Router herunterfahren. Aufwecken wüsste ich jetzt allerdings nicht.
Hallo,
Wenn „Keep settings“ beim upgrade ausgewählt wird, bleiben die Einstellungen von installierten Addons (wie z.B. Adblock) auch erhalten. Es muss lediglich das Addon wieder neu installiert werden, aber neu konfigurieren muss man es nicht.
Bei Adblock ja, bei stubby wiederum nicht. Daher habe ich es im Text mal lieber so dargestellt, dass man sich drauf einstellen sollte, nochmal zu konfigurieren.
Bei mir blieb die Konfiguration von Adblock auch erhalten.
Spätestens wenn man ein Gerät mit wenig Speicher hat, wird man mit den Paketupdates schnell ans Limit stoßen (wenn z.b. nach Installation des Images nur noch wenige kB frei sind)
Da das Image selbst ja RO ist, müssen die Paketupdates ja im freien Speicher installiert werden.
Wie soll man dann hier vorgehen. Kann man hoffen, das es bei größeren Lücken nen neues Image gibt?
Nach jedem Paketupdate das Image selber zu bauen ist vermutlich auch für die wenigsten praktikabel.
Das klingt hier jetzt leider negativer als es gedacht ist. Im Zweifel ist es sicher besser ein aktuelles OpenWRT Image (ohne die letzten Paketupdates) zu nutzen als ein Stock Image, das seit Jahren nicht mehr gepatcht wurde.
OlenWRT ist definitiv ein tolles System und bei mir z.B. rein für den AP in Betrieb.
Bei dem Befehl
root@OpenWrt:~# uci commit && reload_config
uci: Entry not found
gibt es diese Fehlermeldung bei mir. Ich habe mir dadurch geholfen, den Router neu zu starten. Woran kann das liegen, das mein Router den Befehl „reload_config“ nicht kennt?
Weil ich gerade im OpenWRT Forum darüber gestolpert bin und es hier ganz gut reinpasst:
(frei übersetzt)
Um die installierten Paketnamen in einer Datei zu speichern folgende Kommandozeile benutzen:
opkg list-installed | cut -f 1 -d ‚ ‚ > /etc/config/packages.list
Um die Pakete nach einem Systemupdate neu zu installieren:
opkg install $(cat /etc/config/packages.list)
Das ganze funktioniert aber nur bei aktiviertem ‚keep settings‘.
Dabei wird nämlich u.a. der Ordner /etc/config/ in die nächste Version übernommen.
Quelle der Kommandozeilen: OpenWRT Forum
Hallo miskywhixer,
Danke für die Info.
Nur ein kleiner Fehler hat sich eingeschlichen, die Anführungsstriche sind im Original oben.
Auch das o.g. WLAN EIN/AUS über cron klappt.
Nochmals DANKE
maga
Hallo Mike,
ich hatte eigentlich noch den Artikel über „VPN -Gateway mit Wireguard“, angekündigt im ersten Teil dieser Serie, erwartet. Inzwischen habe ich OpenVPN mit Mullvad zum Laufen gebracht und auch VPN über PerfectPrivacy funktioniert. Aber Wireguard habe ich leider nicht zum Laufen gebracht trotz detaillierter Beschreibung seitens Mullvad.
Eine weitere Frage: kann ich nach dem Upgrade einfach meine gespeicherten Konfidateien zu Stubby und OpenVPN per LuCI einspielen oder bedarf es auch des Wiedereinspielens der entsprechenden Dateien in /etc, die ich ebenfalls gesichert habe?
In der c’t, Heft 10/2019 gibt es den Artikel „Schwesterkiste“, der das Betreiben einer 4040 mit OpenWRT auch behandelt. Bezüglich der Installation von WireGuard gibt es dort einige Hinweise zum Aufbau eines Site-to-Site VPN. Es wird außerdem auf einen Grundlagenartikel bzgl. WireGuard in c’t 5/2019 ab Seite 158 verwiesen.
Sehr schöne und hilfreiche Serie, hat mir sehr geholfen.
Wenn ich mir noch einen weiteren Teil wünschen dürfte, wäre es der Aufbau eines Mesh-Wifi in Deiner Konfiguration mit einem WAN-Übergabepunkt und mehreren vermaschten Routern.
Ich suche da seit langem ein griffiges Howto, finde aber nur Einzelfragen gelöst.
Schöne Weihnachtszeit!
Michael
Vielleicht fügst du noch hinzu, wie man in der Konsole alle Einstellungen von LuCI sichern kann und mittels scp auf dem eigenen Rechner sichert vor einem Upgrade?