В настоящее время установщик Proxmox не поддерживает настройку шифрования с ZFS. Поэтому мы должны настроить его вручную. В этой статье будет рассмотрено, как использовать нативное шифрование ZFS в Proxmox.
В статье также предполагается, что установка Proxmox является новой и пока не имеет виртуальных машин или контейнеров.
Шифрование rpool/ROOT
набор данных#
Proxmox устанавливает свою систему внутри rpool/ROOT
набор данных. Это то, что мы будем шифровать первыми.
Установите обычно с помощью установщика, после настройки перезагрузки в режим восстановления (с USB-накопителя). Обязательно установите в режиме UEFI (нужен системный загрузчик).
- Установка с zfs (RAID0 для однодискового приложения)
- Перезагрузка в ISO > Расширенные опции > Графический режим отладки
- Выйти с
exit
или Ctrl+D
- Выполнить следующие команды:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
| # 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
|
Перезагрузка в систему. Теперь вам следует предложить пароль шифрования.
Шифрование rpool/data
набор данных#
Далее нам нужно зашифровать rpool/data
набор данных. Именно здесь Proxmox хранит виртуальные машинные диски.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| # 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
. Затем продолжайте:
1
2
3
4
5
6
7
8
9
10
11
| # 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
:
1
2
3
4
5
6
7
8
9
10
11
12
13
| [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
|
Наконец, включить услугу:
1
| systemctl enable zfs-load-key.service
|
Добавить возможность разблокировки через SSH (dropbear-initramfs)#
Неудобно вводить пароль шифрования на консоли. Возможно, вы захотите настроить Dropbear внутри initramfs, чтобы вместо этого разблокировать диск над SSH.
Во-первых, установите dropbear-initramfs
пакет. Обратите внимание, что мы проходим --no-install-recommends
аргумент здесь, так как мы не хотим, чтобы он был установлен cryptsetup
и дайте раздражающие предостережения каждому поколению inmitramf.
1
| apt install --no-install-recommends dropbear-initramfs
|
Дальше, добавьте ваши авторизованные_ключи в /etc/dropbear/initramfs/authorized_keys
и исправить разрешения:
1
| chmod 600 /etc/dropbear/initramfs/authorized_keys
|
Добавить эту строку в конфигурацию /etc/dropbear/initramfs/dropbear.conf
с этой командой:
1
| echo 'DROPBEAR_OPTIONS="-s -c cryptroot-unlock"' >> /etc/dropbear/initramfs/dropbear.conf
|
На мой взгляд, дефолт достаточно хорош. Некоторые другие сообщения в блоге могут порекомендовать вам изменить порт, чтобы избежать предупреждения о несоответствии с отпечатком пальца, но я бы порекомендовал использовать другой поддомен для подключения к Dredbear вместо этого. Таким образом, вы можете связать отпечаток пальца Dropbear с помощью записей SSHFP.
Если вы не сделаете дополнительную конфигурацию, Dropbear получит IP-адрес с DHCP-сервера.
Чтобы настроить статический IP-адрес, добавьте строку с этим синтаксисом к концу /etc/initramfs-tools/initramfs.conf
:
1
| IP=<client-ip>::<gw-ip>:<netmask>:<hostname>:<device>:<autoconf>:<dns0-ip>:<dns1-ip>:<ntp0-ip>
|
Пример настройки IP-адреса для первого сетевого интерфейса:
1
| IP=192.168.1.101::192.168.1.1:255.255.255.0:hostname
|
Пример настройки IP-адреса для интерфейса enp3s0:
ПРИМЕЧАНИЕ: Убедитесь, что ваше имя интерфейса не было переименовано при просмотре имени. Вы можете проверить имя интерфейса с ip link
.
1
| IP=192.168.1.27::192.168.1.1:255.255.255.0:hostname:enp3s0
|
Наконец, обновление initramfs с этой командой:
1
| update-initramfs -k all -u
|
Обновите загрузчик Proxmox VE с этой командой:
1
| proxmox-boot-tool refresh
|
Очистка и перезагрузка
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| 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, пожалуйста, поделитесь им со своими друзьями в социальных сетях, которым может быть интересна эта статья или оставьте комментарий ниже.