Backups von der OPNsense

tiermutter

Well-known member
[PROLOG]
Backups sind überall Pflicht, so natürlich auch bei Firewalls. Ich setze seit einigen Jahren OPNsense ein und da stellt sich natürlich die Frage, wie eine gute Backupstrategie aussehen kann. Im Folgenden möchte ich kurz erläutern, wie das bei mir im Fall der OPNsense aussieht.

[ALLGEMEIN]
Bevor es ins Detail geht eine kurze Zusammenfassung, welche Möglichkeiten einer Sicherung ich anwende, wie das im Einzelnen aussieht zeige ich später.
OPNsense bietet von Haus aus die Möglichkeit die Konfiguration zu sichern. Dabei wird bei jeder Konfigurationsänderung eine Version des Backups angelegt, sodass man stets auf den Stand vor den letzten Änderungen zurückgehen kann. Die Konfiguration kann auch manuell gesichert werden oder automatisch an z.B. Google Drive, in beiden Fällen hat man die Möglichkeit die gesamte Konfiguration oder auch nur einzelne Abschnitte (z.B. Firewallregeln oder VPN Einstellungen) wiederherzustellen.
Durch die Sicherung der Konfiguration werden allerdings nicht etwaige installierte Plugins wiederhergestellt, diese müssen zuvor manuell installiert werden, dann wird (in den meisten Fällen) auch die Konfiguration wiederhergestellt.

Damit eine Wiederherstellung samt Plugins schnell erledigt ist muss also eine andere Methode herhalten. Hierzu erstelle ich mir regelmäßig immer vor den „großen“ Halbjahresupdates ein Image des Datenträgers mittels CloneZilla, welches ich direkt auf meinem NAS ablegen lasse und das ich auch direkt von hier wiederherstellen kann. In Kombination mit der Sicherung der Konfiguration kann die Firewall somit relativ zügig voll funktionsfähig mit der letzten Konfiguration aufgesetzt werden, lediglich die Versionen von OPNsense und den Plugins werden älter sein und müssen geupdated werden um wirklich auf den neuesten Stand zu kommen.

Seit OPNsense 22.1 kann man direkt bei der Installation auch ZFS als Dateisystem wählen, was einem weitere Möglichkeiten verschafft. Hier können Bootenvironments (BE) auf dem System selbst erstellt werden, sodass man -ähnlich wie bei Snapshots- jederzeit auf einen älteren Stand zurückkehren kann. Auch wenn dies nicht als vollwertiges Backup betrachtet werden kann, da ein BE ja im System selbst hinterlegt ist, eignet sich die Erstellung von BE insbesondere um sich vor Updateproblemen zu schützen. Vor jedem Update erstelle ich so ein neues BE zu dem ich jederzeit zurückkehren kann, vorausgesetzt natürlich dass man in irgendeiner Weise noch Zugriff auf die Konsole hat, sei es via SSH oder direkt mit Bildschirm und Tastatur.

[BACKUP DER KONFIGURATION]
Ein essentielles und geiles Feature ist die bereits angesprochene Versionierung, bzw. Historie der Konfigurationsänderungen. Hier hat man die Möglichkeit zu verschiedenen Ständen der Konfiguration zurückzukehren, die Versionierung/ Historie wird dabei automatisch bei jeder Änderung erstellt. Hier kann man zwei Stände miteinander vergleichen und sehen, was genau verändert wurde. Die Konfiguration eines Zeitpunkts kann direkt wiederhergestellt oder auch heruntergeladen (und bearbeitet) werden, perfekt für den alltäglichen Gebrauch!

001_Backuphistory.PNG

Nicht weniger rudimentär geht es mit der Sicherung und Wiederherstellung der Konfigurationdatei vonstatten, denn hierbei kann man nicht nur die gesamte Konfiguration aus der heruntergeladenen Konfigdatei wiederherstellen, sondern eben auch nur einzelne Abschnitte, wie hier im Screenshot z.B. nur die Firewall Regeln, was ich ebenfalls als ein sehr geiles Feature betrachte!

1645106840695.png

Da die Historie auf dem Gerät selbst abgelegt ist und somit kein richtiges Backup darstellt und die Konfiguration an dieser Stelle nur manuell gesichert werden kann, gibt es hier auch die Möglichkeit die Konfiguration automatisch (nach Zeitplan) nach Google Drive zu sichern. Bei mir läuft das per Default täglich um 01:00 Uhr sofern Änderungen an der Konfiguration stattgefunden haben, man kann per Cron allerdings auch andere Zeitpläne erstellen. Auch ist es möglich das Backup an andere Ziele zu senden, ich begnüge mich der Einfachheit wegen allerdings mit GoogleDrive.

1645106850937.png

Wie schon erwähnt, werden hier auch die Konfigurationen mancher Plugins gesichert und bei Bedarf wieder hergestellt, dies gilt allerdings nicht für alle Plugins! Um sicherzustellen dass die jeweilige Plugin-Konfiguration gesichert wird, sollte man sich die gesicherte Konfigurationsdatei einmal anschauen.
Damit ich auch meine Plugins (z.B. AdGuardHome) auf einem halbwegs aktuellen Stand gesichert habe geht es im nächsten Abschnitt weiter mit dem Klonen des Datenträgers der Firewall.

[KLON DES DATENTRÄGERS]
Das Klonen eines Datenträgers hat natürlich nichts mit der OPNsense an sich zu tun und eignet sich grundsätzlich für eine „Bare-Metal-Sicherung“ die ich auch immer wieder an anderen Systemen durchführe, entweder klone ich direkt auf einen anderen Datenträger oder wie im Fall meiner OPNsense in ein Image auf das NAS. Selbstredend führt dies eine gewisse Downtime der Firewall mit sich, da das System für die Sicherung heruntergefahren werden muss und anschließend vom USB Stick in CloneZilla gebootet werden kann. Ist das getan wird nach den Sprach- und Tastatureinstellungen der Modus „Device-Image“ gewählt und -in meinem Fall- anschließend „Samba Server“. Daraufhin erfolgt eine Prüfung der vorhandenen Interfaces, was etwa 30s je Interface dauert, anschließend wählt man das gewünschte Interface (eins das mit dem LAN/ Ziel verbunden ist), weist dem Interface eine IP zu (alternativ DHCP sofern die nun abgeschaltete OPNsense nicht der einzige DHCP Server ist) und gibt im Anschluss die IP des Ziels, in meinem Fall des NAS an. Anschließend wird noch der Loginname sowie die entsprechende Freigabe und die SMB Version angegebenen, woraufhin die Passworteingabe für den NAS-Benutzer erfolgt. Im nächsten Step bleibe ich beim „Beginner“ und kann anschließend auswählen ob ich eine Sicherung erstellen will (savedisk) oder ein vorhandenes Image wiederherstellen möchte (restoredisk). Der Vorgang dauert bei mir nun jeweils etwa 20 Minuten (ZFS Dateisystem), sodass ich insgesamt auf eine Downtime von etwa 30min komme, das ist echt gut zu verkraften.
Die Größe des Backups (per Default komprimiert) ist auch recht überschaubar: mit UFS beträgt die Imagegröße einer 20GB SSD etwa 1,4GB, mit ZFS etwa 10GB (wobei ich mir die Größe noch nicht erklären kann).

Solch eine Sicherung erfolgt bei mir etwa jedes halbe Jahr vor den Major-Releases.
Diese Maßnahme kombiniert mit der tagesaktuellen Sicherung sorgt dafür, dass ich das System innerhalb kurzer Zeit auch auf einer neuen (baugleichen) Hardware aufsetzen kann. Die Konfiguration ist dabei tagesaktuell, lediglich Updates und ggf. bestimmte Plugin-Konfigurationen müssen nachgeholt bzw. angepasst werden, aber prinzipiell ist das System somit direkt einsatzbereit.
 
Zuletzt bearbeitet:
[BOOT-ENVIRONMENTS UNTER ZFS]
Mit der 22.1 habe ich direkt die Chance ergriffen und meine Sense komplett neu aufgesetzt, natürlich direkt mit dem ZFS-Dateisystem. Dies verschafft mir eine weitere „Ebene“ des Backups, womit ich etwaigen Problemen mit Updates oder größerer Fehlkonfiguration vorbeugen kann. Die Anwendung ist recht simpel: Vor dem Einspielen eines Updates oder vor „größeren“ Änderungen an der Konfiguration wird ein Boot-Environment (BE) erstellt, zu dem ich jederzeit den Zustand des Erstellens innerhalb weniger Minuten wiederherstellen kann. Gesteuert wird dies über die Konsole mit dem Tool „bectl“ und folgenden Parametern:

Code:
bectl list ## listet sämtliche vorhandenen BE auf
bectl create [NAME] ## erstellt ein BE mit dem Namen [NAME]
bectl rename [NAME] [NAME NEW] ## benennt ein BE von [NAME] nach [NAME NEW] um
bectl activate [NAME] ## aktiviert das BE [NAME] nach einem Reboot
bectl destroy [NAME] ## löscht das BE mit dem Namen [NAME]

In der Praxis sieht das dann so aus, im Beispiel vor dem Update von 22.1 auf 22.1.1:
Code:
root@RC100:~ # bectl list
BE Active Mountpoint Space Created
default NR / 1.02G 2022-01-13 06:34 ## NR bedeutet, dass dieses BE jetzt (N) und nach Reboot (R) aktiv ist

Nun wird das BE für die alte Version (22.1) erstellt, zu der man ggf. zurückkehren möchte…

Code:
root@RC100:~ # bectl create 22.1
root@RC100:~ # bectl list
BE Active Mountpoint Space Created
22.1 - - 160K 2022-02-17 08:32
default NR / 1.02G 2022-01-13 06:34

Da das bald folgende Update im aktuellen BE erfolgt, nenne ich es beim Namen der zukünftigen Version (22.1.1)…

Code:
root@RC100:~ # bectl rename default 22.1.1
root@RC100:~ # bectl list
BE Active Mountpoint Space Created
22.1 - - 1.25M 2022-02-17 08:32
22.1.1 NR / 1.03G 2022-01-13 06:34

Nun erfolgt das Update auf die neue Version, wie gehabt mache ich das über das GUI. Anschließend nochmal ein informativer Blick auf die BE der mir verrät, dass sich einiges getan hat…

Code:
root@RC100:~ # bectl list
BE Active Mountpoint Space Created
22.1 - - 441M 2022-02-17 08:32
22.1.1 NR / 1.46G 2022-01-13 06:34

Nachdem ich nun festgestellt habe, dass ich die neue Version nicht haben möchte, kehre ich einfach zur vorherigen Version zurück indem ich das 22.1 BE aktiviere…

Code:
root@RC100:~ # bectl activate 22.1
Successfully activated boot environment 22.1
root@RC100:~ # bectl list
BE Active Mountpoint Space Created
22.1 R - 1.02G 2022-02-17 08:32 ## das 22.1 BE wird nach dem Reboot aktiv sein (R)
22.1.1 N / 458M 2022-01-13 06:34 ## bis dahin ist das 22.1.1 BE aktiv (N)
root@RC100:~ # reboot

Der Reboot bringt mich nun zurück zur vorherigen Version, was mir bei den BE auch angezeigt wird…

Code:
root@RC100:~ # bectl list
BE Active Mountpoint Space Created
22.1 NR / 1.04G 2022-02-17 08:32 ## das 22.1 BE ist jetzt aktiv (N) und wird es auch nach einem Reboot noch sein (R)
21.2.1 - - 477M 2022-01-13 06:34

Nachdem ich zwischenzeitlich wieder zur neuen Version zurückgegangen bin…

Code:
root@RC100:~ # bectl list
BE Active Mountpoint Space Created
22.1 - - 475M 2022-02-17 08:32
22.1.1 NR / 1.47G 2022-01-13 06:34

… brauche ich das Backup-BE der 22.1 nicht mehr und lösche es, Ordnung muss sein…

Code:
root@RC100:~ # bectl destroy 22.1
root@RC100:~ # bectl list
BE Active Mountpoint Space Created
22.1.1 NR / 1.03G 2022-01-13 06:34

[EPILOG]
Irgendwas passiert ja immer, da tut es schon gut, wenn man so viele Möglichkeiten des Backups hat, die hoffentlich dafür sorgen, dass man schnell wieder produktiv werden kann. Ich habe für den Fall extra separate baugleiche Hardware bereitstehen, die ich gelegentlich zum Testen verwende. Die Wiederherstellung auf diesem Gerät habe ich bereits mehrfach erprobt und ich kann nur sagen, dass dies wirklich schnell geht. Einziger Dorn der mir noch im Auge ist, ist die Tatsache dass die erstellten Images immer etwa ein halbes Jahr alt sind und somit zumindest die Einstellungen von z.B. dem AdGuardHome Plugin auch immer ein halbes Jahr alt sind, da diese nicht im Konfigurationsbackup vorhanden sind. Für dieses „Gap“ muss ich mir noch eine passende Lösung einfallen lassen, hier schwebt mir eine automatische Sicherung der AdGuard Konfigurationsdatei vor, mal sehen wie ich das komfortabel umsetzen kann. Ein vollumfängliches Backup für jeden erdenklichen Fall habe ich zum jetzigen Zeitpunkt also nicht, aber ich kann schon recht zufrieden sein denke ich.
 
Zuletzt bearbeitet:
Da ich heute abend Zeit/ die Möglichkeit habe, werde ich die Vorbereitungen für die 22.7 etwas vorziehen, sprich erstmal noch ausstehende Updates mit vorheriger BE Erstellung durchführen und anschließend das hier:
[KLON DES DATENTRÄGERS]
(...)
Solch eine Sicherung erfolgt bei mir etwa jedes halbe Jahr vor den Major-Releases.
Das würde ich dann auch mal mit Fotos dokumentieren und ggf. etwas detailierter beschreiben. Wäre das Gesamtpaket dann etwas, das für die Anleitungen relevant wäre? Dann würde ich das nochmal etwas aufarbeiten.
 
Achja, so war das :)
Storage für Profis und Fortgeschrittene Anwender. Dann wird es Zeit, dass die Firewall auch diese Richtung einschlägt ;)
Die QNAP steht stromlos im Schrank.
Schalte sie ab und an mal ein... dann sammelt sie automatisch den Staub weg und hat einen hammergeilen Nutzen :D
 

Zurzeit aktive Besucher

Keine Mitglieder online.

Letzte Anleitungen

Statistik des Forums

Themen
4.383
Beiträge
45.257
Mitglieder
3.984
Neuestes Mitglied
Blitzkriegbob90
Zurück
Oben