FreeBSD 12 Stable mit ZFS Encryption per openzfs

DarkSchnitzel

New Member
Hallo allerseits,

ich baue gerade einen Heimserver auf der später als Datengrab dienen soll. Der Server soll alle Festplatten verschlüsselt haben.
Als Storage ist verbaut:
2*120 gb SSD ZFS Mirror "zroot"
4*1TB und 4*2TB als RaidZ1 in "/data"
2* 250GB ZFS SSD Mirror als VM Storage oder ähnliches in "/ssd"
6TB ZFS Backup Platte per USB3.0 in "backup"

Als Verschlüsselung würde ich mich gerne an openzfs rantrauen da dies eine native verschlüsselung möglich macht. Dazu habe ich bisher ein FreeBSD12.1 Stable heruntergeladen und installiert, openzfs und openzfs-kmod aus den ports ebenfalls. Anschliessend wurden in /etc/rc.conf zfs_enable auskommentiert und dafür openzfs aktiviert, das gleiche in der /boot/loader.conf.

ich kann nun mittels kldstat sehen das openzfs.ko geladen ist, ein ausführen von /usr/local/sbin/zpool list ist ebenfalls erfolgreich. Wenn ich nun jedoch versuche ein ZFS Pool anzulegen mittels

/usr/local/sbin/zpool create -o encryption=aes-256-gcm -o keysource=passphrase ssd mirror ada0 ada1

da bekomme ich leider
"property 'encryption' is not a valid pool property"

der gleiche Fehler kommt auch beim aufrufen der normalen zfs binaries unter/sbin/

Hat jemand eine Idee was ich dort übersehen habe? Hängt dies vielleicht mit dem opensolaris Modul zusammen? Leider kann ich nichts finden wo beschrieben wird was da modul genau macht.

###kldstat###
[hank@Freeschnitzel /]$ kldstat
Id Refs Address Size Name
1 35 0xffffffff80200000 2278e40 kernel
2 1 0xffffffff82479000 58f950 openzfs.ko
3 2 0xffffffff82a09000 96d0 cryptodev.ko
4 1 0xffffffff82a13000 a430 opensolaris.ko
5 1 0xffffffff82a1e000 1e8c8 geom_eli.ko
6 1 0xffffffff82a3d000 ed08 aesni.ko
7 1 0xffffffff83211000 2658 intpm.ko
8 1 0xffffffff83214000 b60 smbus.ko
9 1 0xffffffff83215000 1880 uhid.ko
10 1 0xffffffff83217000 1a40 wmt.ko
11 1 0xffffffff83219000 acf mac_ntpd.ko

### loader.conf ###
[hank@Freeschnitzel /]$ cat /boot/loader.conf
aesni_load="YES"
geom_eli_load="YES"
kern.geom.label.disk_ident.enable="0"
kern.geom.label.gptid.enable="0"
opensolaris_load="YES"
#zfs_load="YES"
openzfs_load="YES"

### rc.conf ####
[hank@Freeschnitzel /]$ cat /etc/rc.conf
hostname="Freeschnitzel"
keymap="de.kbd"
ifconfig_re0="inet 192.168.10.10 netmask 0xffffff00"
defaultrouter="192.168.10.1"
sshd_enable="YES"
ntpd_enable="YES"
powerd_enable="YES"
# Set dumpdev to "AUTO" to enable crash dumps, "NO" to disable
dumpdev="AUTO"
#zfs_enable="YES"
openzfs_enable="YES"
 
Das ist afaik ein Dataset-Property. Mach mal -O

Edit: Hast du eigentlich mal ihne encraption versucht, dass es überhaupt funktioniert? Das wäre mal der erste Schritt. Dann noch der Hinweis: Die Verschlüsselung in ZFS ist noch relativ jung und meines Wissens noch nicht auf Herz und Nieren geprüft. Zudem kann es nicht alles schützen. So sind Metainformationen über deinen Pool z.B. noch von außen ersichtlich. Ob das Ganze für dich sicher genug ist musst du entscheiden.
 
Zuletzt bearbeitet:
Metafrage an der Stelle: Was wäre denn ein Vorteil von "nativer" Verschlüsselung? Ist z.B. bessere Performance zu erwarten? Ich bin ja bisher mit GELI "unter" meinen Pools nicht unglücklich…
 
Verschiedenes. Potenziell für mich interessant finde ich z.B.: send/receive von verschlüsselten Datasets, d.h. die ansonsten GELI-verschlüsselten Daten müssen nicht erst entschlüsselt werden, dann unverschlüsselt übertragen werden. Und - vermutlich auch für viele nicht uninteressant - Du kannst die Verschlüsselung über verschiedene Betriebssysteme hinweg nutzen, also von FreeBSD genauso zugreifen wie von macOS, Linux oder Windows...
 
... einen Heimserver auf der später als Datengrab dienen soll. Der Server soll alle Festplatten verschlüsselt haben...

Je nachdem was dein Vorwissen bezgl FreeBSD ist oder wie tief du einsteigen möchtest, aber bei Heimserver würd ich zu FreeNAS raten.

Hat den Vorteil, dass du das ZFS (create, destroy, snapshot, send/receive) auch von Kommandozeile bedienen kannst, so du denn möchtest, es ist aber auch wie alles andere gut ins Webgui integriert, Verschlüsselung (halt nicht nativ) ist inklusive (einfach bei Anlegen des Pools mit auswählen), samt Button zum komfortablen wegsichern der Schlüssel (keine PW Eingabe erforderlich beim Hochfahren), sowie der ganzen Konfig des Servers.

Wenn du stattdessen natürlich explizit ein FreeBSD dafür verwenden möchtest, dann vergiss den Rat.
 
Das ist afaik ein Dataset-Property. Mach mal -O

Edit: Hast du eigentlich mal ihne encraption versucht, dass es überhaupt funktioniert? Das wäre mal der erste Schritt. Dann noch der Hinweis: Die Verschlüsselung in ZFS ist noch relativ jung und meines Wissens noch nicht auf Herz und Nieren geprüft. Zudem kann es nicht alles schützen. So sind Metainformationen über deinen Pool z.B. noch von außen ersichtlich. Ob das Ganze für dich sicher genug ist musst du entscheiden.

Habe das gerade noch einmal geprüft, snapshots kann ich beispielsweise über das zfs in /usr/local/sbin anlegen. Gut zu wissen mit den Metainformationen, aber das ist für mich in Ordnung. Ich bin nun etwas weiter, ich habe ein raidz1 angelegt:
######
[hank@Freeschnitzel /]$ zpool status data
pool: data
state: ONLINE
scan: none requested
config:

NAME STATE READ WRITE CKSUM
data ONLINE 0 0 0
raidz1-0 ONLINE 0 0 0
da0 ONLINE 0 0 0
da1 ONLINE 0 0 0
da2 ONLINE 0 0 0
da3 ONLINE 0 0 0
raidz1-1 ONLINE 0 0 0
da4 ONLINE 0 0 0
da5 ONLINE 0 0 0
da6 ONLINE 0 0 0
da7 ONLINE 0 0 0

du hast vollkommen recht das wird nicht über zpool gemacht sondern mit zfs, dabei habe ich jedoch folgende Fehler:
#######
[hank@Freeschnitzel /]$ zfs create -o encryption=aes-256-gcm -o keyformat=passphrase data/main
cannot create 'data/main': invalid property 'encryption'
[hank@Freeschnitzel /]$ /usr/local/sbin/zfs create -o encryption=aes-256-gcm -o keyformat=passphrase data/main
cannot create 'data/main': Encryption feature not enabled.
[hank@Freeschnitzel /]$ /usr/local/sbin/zfs create -o encryption=on -o encryption=aes-256-gcm -o keyformat=passphrase data/main
property 'encryption' specified multiple times
[hank@Freeschnitzel /]$ /usr/local/sbin/zfs create -o encryption=on -o data/main
missing '=' for property=value argument
[hank@Freeschnitzel /]$ /usr/local/sbin/zfs create -o encryption=on data/main
cannot create 'data/main': Encryption feature not enabled.

#####
[hank@Freeschnitzel /]$ zfs get all data|wc
59 239 3350
[hank@Freeschnitzel /]$ /usr/local/sbin/zfs get all data|wc
72 292 4115

Je nachdem was dein Vorwissen bezgl FreeBSD ist oder wie tief du einsteigen möchtest, aber bei Heimserver würd ich zu FreeNAS raten.

Hat den Vorteil, dass du das ZFS (create, destroy, snapshot, send/receive) auch von Kommandozeile bedienen kannst, so du denn möchtest, es ist aber auch wie alles andere gut ins Webgui integriert, Verschlüsselung (halt nicht nativ) ist inklusive (einfach bei Anlegen des Pools mit auswählen), samt Button zum komfortablen wegsichern der Schlüssel (keine PW Eingabe erforderlich beim Hochfahren), sowie der ganzen Konfig des Servers.

Wenn du stattdessen natürlich explizit ein FreeBSD dafür verwenden möchtest, dann vergiss den Rat.

Ich nutze auf der Arbeit FreeBSD Release auf dem Desktop +Servern, daher ganz gerne damit. FreeNAS ist auch echt gut jedoch möchte ich das Grundsystem sehr schlank halten und den Rest später über eigene Jails abgrenzen auch um dies weiter zu lernen. Ein Webinterface benötige ich nicht da der Server später per zabbix überwacht werden soll. FreeNAS hat definitiv seine Berechtigungaber für sowas eignet sich imho FreeBSD so besser.

Openzfs ist denke ich flexibler, mein Desktop läuft zurzeit mit Manjaro, wenn ich dort zfs konfiguriere könnte ich zum Beispiel damit meine Backups machen so wie ich das verstanden habe :D

noch 2 interessante Links zu dem Thema:
https://www.kernel-error.de/kernel-error-blog/438-freebsd-und-native-zfs-encryption
https://www.kernel-error.de/computer/openindiana/zfs/zfs-dateisystem-verschluesseln
 
Jo, war nur ein Vorschlag.

Ein aktuelles OpenZFS auf Linux _könnte_ featuremäßig etwas weiter vorne sein, als das auf FreeBSD.

Vom FreeNAS (basiert auf FreeBSD11) kannst definitiv auf ein Debian Linux 10 senden (und wieder zurück), es gibt nur mit nem Attribut "aclinherit" Probleme, das muss man per Schalter beim zfs receive auf der Linuxmaschine (-o aclinherit=discard) abwählen; ob das auch mit verschlüsseltem ZFS von FreeBSD 12 aus funktioniert, konnte ich selber noch nicht testen;
 
Nachtrag: zpool upgrade ist das Zauberwort.
How to:
1. FreeBSD Stable installieren
2. openzfs und openzfs-kmod installieren
3. in /etc/rc.conf und /boot/loader.conf zfs auskommentieren, stattdessen openzfs
4. Neustarten
5. mittels kldstat prüfe ob openzfs geladen ist
6. zpool anlegen
7. /usr/local/sbin/zpool upgrade tank
8. /usr/local/sbin/zfs create -o encryption=on -o keyformat=passphrase tank/test

Werd jetzt mal etwas testen wie man das dann handelt, das mit den zwei verschiedenen pfaden für die zfs kommandos ist etwas verwirrend
 
Ich habe auf einem Hetzner-Server frische 12.2 installiert, dann auf 12-STABLE Upgrade gemacht und anschließend openzfs per pkg installiert.
Bash:
# pkg install openzfs
Updating FreeBSD repository catalogue...
FreeBSD repository is up to date.
All repositories are up to date.
The following 2 package(s) will be affected (of 0 checked):

New packages to be INSTALLED:
    openzfs: 2020120100
    openzfs-kmod: 2020120100
alles wie gewohnt eingestellt
Bash:
# sysrc openzfs_enable="YES"
openzfs_enable:  -> YES
# sed -i '' -E 's/(^#|^)zfs_enable=.*/#zfs_enable="YES"/g' /etc/rc.conf
# sysrc -f /boot/loader.conf openzfs_load="YES"
openzfs_load:  -> YES
# sed -i '' -E 's/(^#|^)zfs_load=.*/#zfs_load="YES"/g' /boot/loader.conf
# sed -i '' -E 's|PATH=/sbin:/bin.*|PATH=/usr/local/sbin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:~/bin|g' /root/.profile
# echo 'alias zfs        /usr/local/sbin/zfs' >> /root/.cshrc
# echo 'alias zpool        /usr/local/sbin/zpool' >> /root/.cshrc
# shutdown -r now
Und als Dankeschön, bootet der Server nicht.
vKVM gestartet... Und was sehe ich da?
Bildschirmfoto vom 2020-12-13 18-37-58.png

Aus den Ports funktionierte letztens openzfs ganz gut. Habe beim Updaten gesehen, dass die neue pkg Version raus ist und dachte das könnte ich auf der STABLE ausprobieren, um das lästige Compilieren zu umgehen. Pustekuchen...
Hat jemand einen Tipp parat wie ich das aus dem Stand geradebiegen könnte?
Habe über Rescue versucht, leider konnte ich irgendwie den Pool nicht importieren.
 
Halb blind geraten: Er lädt entweder das falsche Modul, also /boot/kernel/zfs.ko anstelle von /boot/modules/zfs.ko. Oder das Modul passt nicht auf den Kernel, da die Pakete auf 12.1 (dem ältesten unterschtütztem Release des 12.x Zweigs) gebaut werden.
 
Danke Yamagi. Ich habe doch geschafft den pool in rescue zu importieren, die Pakete deinstalliert und aus der repo gebaut und installier.
Voilà, es funktioniert. Schade, dass man ein fertiges Paket nicht nehmen kann. Sehr ärgerlich, wenn es an irgendeiner Kleinigkeit scheitert.
Vielleicht kann man nach hinein etwas irgendwie anpassen. Weiß einer mehr?
 
Zurück
Oben