Jeder der eine Proxmox Virtual Environment Umgebung hat, setzt in aller Regel auch auf den Proxmox Backup Server. Dieser ist nicht nur super einfach zu konfigurieren und zu implementieren, sondern auch noch maximal flexibel in seinen Einstellungen. Daher kommt auch oft die Frage auf, geht das ganze auch verschlüsselt? Die Antwort lautet – Ja, natürlich!

Bei ZFS werden immer nur die Datasets an sich verschlüsselt und nicht das ganze ZPOOL. Daher können wir z.B. das Betriebssystem noch unverschlüsselt lassen und den Bereich wo die Nutzdaten liegen verschlüsselt. Im Folgenden eine Anleitung, wie man Datasets verschlüsselt und auch beim Booten wieder einhängt.

Wir gehen in dieser Anleitung davon aus, du hast 6 freie HDDs in beliebiger Größe im System und möchtest ein RAIDz2 erstellen.

1. ZPOOL mit 6 HDDs in RAIDz2 erstellen

Das erstellt einen ZPOOL mit den 6 Platten und verbindet diese in ein RAIDz2. Dabei hast du dann 4 Nutzplatten und 2 Paritätsplatten. Der Name „tank“ kannst du natürlich frei ändern wie du möchtest.

zpool create -o ashift=12 tank raidz2 /dev/sda /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf

# Damit kann du dir den Status anschließend anzeigen lassen #
zpool status

2. Keyfile für die ZFS Verschlüsselung erstellen

Wir benötigen zur Verschlüsselung ein Keyfile. Optional kann man auch ein Passwort verwenden, aber ein Keyfile ist sicherer und deutlich einfacher in der Handhabung. Auch hier sind Ablageort und Namen natürlich frei wählbar. CHMOD 600 setzt das wirklich nur root die Datei lesen kann.

mkdir -p /etc/zfs/keys
head -c 32 /dev/urandom > /etc/zfs/keys/tank.key
chmod 400 /etc/zfs/keys/tank.key

# Datei Immutable machen #
chattr +i /etc/zfs/keys/tank.key

3. Verschlüsseltes Dataset erstellen

Folgender Befehl erstellt ein neues Dataset und verschlüsselt dort alle Daten mit dem gerade erstellen Keyfile. Der Name des Datasets ist wieder wählbar.

zfs create -o encryption=on -o keyformat=raw -o keylocation=file:///etc/zfs/keys/tank.key tank/securedata

4. Laden des Keys beim Booten für die Verschlüsselung

Da wir bei jedem Neustart das Keyfile ins ZFS laden müssen, kann man sich ein einfaches Script erstellen, was das für dich automatisch erledigt. Ohne das Keyfile ist ein Zugriff auf das Dataset nicht möglich. Das Script macht eigentlich nicht mehr, als zum richtigen Augenblick den Befehl „zfs load-key -a“ abzusetzen.

nano /etc/systemd/system/zfs-load-keys.service
[Unit]
Description=Load ZFS encryption keys
DefaultDependencies=no
Before=zfs-mount.service
After=zfs-import.target
Requires=zfs-import.target

[Service]
Type=oneshot
ExecStart=/sbin/zfs load-key -a

[Install]
WantedBy=zfs-mount.service
systemctl daemon-reexec
systemctl daemon-reload
systemctl enable zfs-load-keys.service

Somit wird jetzt nach jedem Neustart alle Keys automatisch geladen und die Datasets sind sofort erreichbar.