Как установить нативное шифрование с полным диском с ZFS в Proxmox
Дата публикации: 2025-05-22T09:25:37
Теги: ["Security", "Proxmox"]
В настоящее время установщик Proxmox не поддерживает настройку шифрования с ZFS. Поэтому мы должны настроить его вручную. В этой статье будет рассмотрено, как использовать нативное шифрование ZFS в Proxmox.
В статье также предполагается, что установка Proxmox является новой и пока не имеет виртуальных машин или контейнеров.
Шифрование `rpool/ROOT` набор данных
Proxmox устанавливает свою систему внутри `rpool/ROOT` набор данных. Это то, что мы будем шифровать первыми.
Установите обычно с помощью установщика, после настройки перезагрузки в режим восстановления (с USB-накопителя). Обязательно установите в режиме UEFI (нужен системный загрузчик).
1. Установка с zfs (RAID0 для однодискового приложения)
2. Перезагрузка в ISO > Расширенные опции > Графический режим отладки
3. Выйти с `exit` или `Ctrl+D`
4. Выполнить следующие команды:
# Import the old zpool import -f rpool # Make a snapshot of the current one zfs snapshot -r rpool/ROOT@copy # Send the snapshot to a temporary root zfs send -R rpool/ROOT@copy | zfs receive rpool/copyroot # Destroy the old unencrypted root zfs destroy -r rpool/ROOT # Set better ZFS properties zpool set autoexpand=on rpool zpool set autotrim=on rpool zpool set failmode=wait rpool # Create a new zfs root, with encryption turned on # OR -o encryption=aes-256-gcm - aes-256-ccm vs aes-256-gcm zfs create -o acltype=posix -o atime=off -o compression=lz4 -o encryption=aes-256-gcm -o checksum=blake3 -o dnodesize=auto -o encryption=on -o keyformat=passphrase -o overlay=off -o xattr=sa rpool/ROOT # Copy the files from the copy to the new encrypted zfs root zfs send -R rpool/copyroot/pve-1@copy | zfs receive -o encryption=on rpool/ROOT/pve-1 # Deviate from the original gist and delete copyroot zfs destroy -r rpool/copyroot # Set the Mountpoint zfs set mountpoint=/ rpool/ROOT/pve-1 # Export the pool again, so you can boot from it zpool export rpool
Перезагрузка в систему. Теперь вам следует предложить пароль шифрования.
reboot -f
Шифрование `rpool/data` набор данных
Далее нам нужно зашифровать `rpool/data` набор данных. Именно здесь Proxmox хранит виртуальные машинные диски.
# Import the pool with an alternate root at /mnt zpool import -f -R /mnt rpool # Load the encryption keys for all encrypted datasets zfs load-key -a # Destroy original dataset as after mounting pve-1 in the next step rpool/data will appear `busy` zfs destroy -r rpool/data # Mount the 'pve-1' dataset zfs mount rpool/ROOT/pve-1 # Recursively bind the /proc directory to the chroot environment mount -o rbind /proc /mnt/proc # Recursively bind the /sys directory mount -o rbind /sys /mnt/sys # Recursively bind the /dev directory mount -o rbind /dev /mnt/dev # Change root into the new environment chroot /mnt /bin/bash
Создайте парольную фразу diceware и сохраните ее `/.data.key`. Затем продолжайте:
# Create a new encryption key dd if=/dev/urandom bs=32 count=1 of=/.data.key # Set the appropriate permission chmod 400 /.data.key # Make the key immutable chattr +i /.data.key # Create a new dataset with encryption enabled zfs create -o acltype=posix -o atime=off -o compression=lz4 -o encryption=aes-256-gcm -o checksum=blake3 -o dnodesize=auto -o encryption=on -o keyformat=passphrase -o keylocation=file:///.data.key -o keyformat=raw -o overlay=off -o xattr=sa rpool/data
Далее нам нужно настроить системную услугу для автоматической разблокировки. Поместите следующее внутрь `/etc/systemd/system/zfs-load-key.service`:
[Unit] Description=Load encryption keys DefaultDependencies=no After=zfs-import.target Before=zfs-mount.service [Service] Type=oneshot RemainAfterExit=yes ExecStart=/usr/sbin/zfs load-key -a [Install] WantedBy=zfs-mount.service
Наконец, включить услугу:
systemctl enable zfs-load-key.service
Добавить возможность разблокировки через SSH (dropbear-initramfs)
Неудобно вводить пароль шифрования на консоли. Возможно, вы захотите настроить Dropbear внутри initramfs, чтобы вместо этого разблокировать диск над SSH.
Во-первых, установите `dropbear-initramfs` пакет. Обратите внимание, что мы проходим `--no-install-recommends` аргумент здесь, так как мы не хотим, чтобы он был установлен `cryptsetup` и дайте раздражающие предостережения каждому поколению inmitramf.
apt install --no-install-recommends dropbear-initramfs
Дальше, добавьте ваши авторизованные_ключи в `/etc/dropbear/initramfs/authorized_keys` и исправить разрешения:
chmod 600 /etc/dropbear/initramfs/authorized_keys
Добавить эту строку в конфигурацию `/etc/dropbear/initramfs/dropbear.conf` с этой командой:
echo 'DROPBEAR_OPTIONS="-s -c cryptroot-unlock"' >> /etc/dropbear/initramfs/dropbear.conf
На мой взгляд, дефолт достаточно хорош. Некоторые другие сообщения в блоге могут порекомендовать вам изменить порт, чтобы избежать предупреждения о несоответствии с отпечатком пальца, но я бы порекомендовал использовать другой поддомен для подключения к Dredbear вместо этого. Таким образом, вы можете связать отпечаток пальца Dropbear с помощью записей SSHFP.
Если вы не сделаете дополнительную конфигурацию, Dropbear получит IP-адрес с DHCP-сервера.
Чтобы настроить статический IP-адрес, добавьте строку с этим синтаксисом к концу `/etc/initramfs-tools/initramfs.conf`:
IP=:: : : : : : : :
Пример настройки IP-адреса для первого сетевого интерфейса:
IP=192.168.1.101::192.168.1.1:255.255.255.0:hostname
Пример настройки IP-адреса для интерфейса enp3s0:
ПРИМЕЧАНИЕ: Убедитесь, что ваше имя интерфейса не было переименовано при просмотре имени. Вы можете проверить имя интерфейса с `ip link`.
IP=192.168.1.27::192.168.1.1:255.255.255.0:hostname:enp3s0
Наконец, обновление initramfs с этой командой:
update-initramfs -k all -u
Обновите загрузчик Proxmox VE с этой командой:
proxmox-boot-tool refresh
Очистка и перезагрузка
exit # Unmount /proc umount /mnt/proc # Unmount /sys umount /mnt/sys # Unmount /dev (if target is busy, check for nested mounts) umount /mnt/dev # Unmount the ZFS dataset zfs unmount rpool/data # Unmount the ZFS dataset zfs unmount rpool/ROOT/pve-1 # Export the ZFS pool zpool export rpool # Use key combination to reboot the system Ctrl + Alt + Del
Теперь вы должны быть в состоянии застрять в свой Dropbear при перезагрузке. Использовать `zfsunlock` для того, чтобы разблокировать `rpool/ROOT` набор данных
Завершение
Если вам понравился этот пост о том, как установить нативное шифрование ZFS в Proxmox, пожалуйста, поделитесь им со своими друзьями в социальных сетях, которым может быть интересна эта статья или оставьте комментарий ниже.