Frage best practise unverschlüsseltes ZFS mit Geli auf einzelnem Volume?

Binfort

Well-Known Member
Moin!

Das gewünschte Setup:
  • FreeBSD 11 mit ZFS
  • Hostsystem unverschlüsselt
  • Jails auf ZFS Volume mit Geli verschlüsselt
  • inkrementelles Backup der Jails
Lösungsansatz:
Code:
zfs create -V 100G zroot/jails
geli init -s 4096 -K jails.key /dev/zvol/zroot/jails
geli attach -k jails.key /dev/zvol/zroot/jails
Das Volume kann jetzt einen weiteren Zpool erhalten, allerdings machten die Backups mit zfs send/recv Probleme. Im eng Forum fand sich außerdem ein Hinweis auf Dead Locks bei Zpools innerhalb Zvols. Also:
Code:
newfs -O2 -U -f 4096 /dev/zvol/zroot/jails.eli
mount /dev/zvol/zroot/jails.eli /data/jails
So würde die Dead Lock Problematik umgangen. Die Backups mit zfs send/recv funktionieren zwar, jedoch nicht inkrementell. Da zfs snap vom eigentlichen Volume erstellt wird, kann das doch gar nicht gehen, oder? Nächster Versuch:
Code:
dump -0 -Lauf lvl0_jails /data/jails
dump -1 -Lauf lvl1_jails /data/jails
Das funktioniert dann und das Setup wäre erreicht. Ein paar Schritte verstehen sich von selbst und wurden übersprungen.

Wäre dies eine denkbare Herangehensweise für einen produktiven Server? Was würdet ihr anders lösen oder wo seht ihr Probleme?

Mir gefällt die Flexibilität des ZFS im Unterbau, sollte es in Zukunft eine andere Lösung geben, könnte ich das Volume auch flott umkonfigurieren bzw. die Jails in verschlüsselte FS Datasets stecken.

Alternativ kann meine Anforderung natürlich auch herkömmlich mit GPT Partitionen erfüllt werden.
 
Also ein einfacher Lösungsansatz wäre es GELI durch PEFS zu ersetzen. Hier sieht ZFS den Plaintext der Jails nicht, weil das PEFS Overlay FS diesen Verschlüsselt, allerdings bietet PEFS eine recht hohe Angriffsfläche und leaked per Design mehr Metadaten über Seitenkanäle.

Sofern der Host nur die Jails starten soll und du etwas Speicherplatz über hast kannst du zwei ZFS Pools verwenden. Am einfachsten ist dies aufzusetzen indem du den Installer verarscht und pro Platte einen kleinen GEOM NOP Provider einrichtest. Anschließend kannst du mit dem ZFS Installer auf die GEOM NOP Provider installieren. Nach der Installation vergrößerst du die Partitionstabellen und legst Partitionen für den GELI verschlüsselten ZFS Pool in dem jetzt nutzbaren freien Speicher an. Der zweite Pool ist jetzt GELI Verschlüsselt, allerdings enthalten ZFS Replicationstreams dieses Pools natürlich den Klartext. Du kannst sie also nicht auf weniger vertrauenswürdigen Systemen ablegen/einspielen. Es gibt allerdings Backupsoftware, die ihren Klartext dem Backupserver nicht angertraut z.B. borg, restic, tarsnap und zbackup.
 
Danke für die Antwort, PEFS möchte ich vorerst unterschlagen - aber der zweite Vorschlag klingt interessant.

Mit GEOM NOP hatte ich noch nichts zu tun, aber das beschriebene Prinzip ist klar. Die beiden parallelen Zpools liefern das gewünschte Setup und rechtfertigen den Aufwand, ich spiele das mal durch und schreibe über den Erfolg.

Die inkrementellen zfs send Backups werden an gpg gepipet und dann extern abgelegt, bislang erschien mir das ausreichend...
 
Du kannst auch noch einen drauf setzen und das neue Rerooting verwenden. Allerdings ist das mit ZFS etwas fricklig, weil du beim zweiten Import eines ZFS Pools leider eine Assertion auslöst.
 
Mit Rerooting möchte ich mich später befassen, das ursprünglich genannte Setup ist mit GEOM NOP jedoch kein Problem. Der Witz an der Sache ist die Benutzung des Installers.

Der unverschlüsselte Zpool für das Hostsystem erhält ohne viel Aufwand die optimalen Datasets - da dies meine ersten Erfahrungen mit ZFS sind, verhalf mir ein alter Artikel im Admin zum besseren Verständnis. Demnach könnte man das finale Partitionsschema auch manuell anlegen und müsste die Datasets beim Zpool ebenfalls manuell erstellen. Der Umweg über GEOM NOP vereinfacht die Installation erheblich.
Code:
gnop create -s 100G ada0
Das erzeugte ada0.nop wird dem Installer vorgeworfen. Nach der Installation ist die Partitionstabelle korrupt. Im SingleUser:
Code:
gpart recover ada0
gpart add -t freebsd-zfs -l zfs1 ada0
Im MultiUser:
Code:
geli init -K data.key -s 4096 /dev/gpt/zfs1
geli attach -k data.key /dev/gpt/zfs1
zpool create data /dev/gpt/zfs1
Fertig.

Damit kann ich arbeiten. Backups teste ich noch, sehe aber keine Schwierigkeiten. Initiale Bereitstellung eines Zmirror teste ich noch, sehe aber auch hier keine Schwierigkeiten.

Edit: Typo
 
Zurück
Oben