Proxmox. Шифрование несистемных дисков с данными
Ссылки
https://tactical-documentation.github.io/post/proxmoxve6-zfs-luks-systemdboot-dropbear/
Настройка
Общая настройка
Добавляем репозитории
echo "export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" >> ~/.bashrc
sed -i.bak "s/data.status !== 'Active'/false/g" /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js && systemctl restart pveproxy.service
rm /etc/apt/sources.list.d/pve-enterprise.list
echo 'deb http://download.proxmox.com/debian/pve buster pve-no-subscription' > pve-community.list
Устанавливаем CRYPTSETUP
apt update
apt install cryptsetup
Шифруем физический диск /dev/sdb
cryptsetup luksFormat /dev/sdb
Аттачим шифрованный раздел в /dev/mapper/data01
cryptsetup luksOpen /dev/sdb data01
Проверяем
lsblk
... sdb 8:16 0 1.8T 0 disk L-data01 253:5 0 1.8T 0 crypt ...
Далее варианты форматирования разделов
Вариант 1. LVM-Thin для хранения ВМ в формате RAW
Для раздела хранения ВМ и контейнеров в формате RAW с возможностью создания снэпшотов подойдут LVM-Thin и ZFS (В данном разделе мануала - LVM-Thin)
Создаем PV data01
lvm pvcreate /dev/mapper/data01
Создаем VG data01
lvm vgcreate data01 /dev/mapper/data01
Создаем раздел LVM-Thin data01_pve01 на 100% области VG data01
lvcreate -l 100%FREE -T data01/data01_pve01
Проверяем
lsblk
... sdb 8:16 0 1.8T 0 disk L-data01 253:5 0 1.8T 0 crypt +-data01-data01_pve01_tmeta 253:6 0 120M 0 lvm ¦ L-data01-data01_pve01-tpool 253:8 0 1.8T 0 lvm ¦ +-data01-data01_pve01 253:9 0 1.8T 0 lvm ¦ L-data01-vm--100--disk--0 253:10 0 80G 0 lvm L-data01-data01_pve01_tdata 253:7 0 1.8T 0 lvm L-data01-data01_pve01-tpool 253:8 0 1.8T 0 lvm +-data01-data01_pve01 253:9 0 1.8T 0 lvm L-data01-vm--100--disk--0 253:10 0 80G 0 lvm ...
В веб-интерфейсе Proxmox подключаем Storage типа LVM-Thin
- Datacenter - Storage - Add - LVM-Thin
ID: data01_pve01
VG: data01
Thin pool: data01_pve01
Перезапускаем Proxmox
Видим пустой sdb
lsblk
... sdb 8:16 0 1.8T 0 disk ...
Подключаем шифрованный диск используя пароль
cryptsetup luksOpen /dev/sdb data01
Видим разделы LVM
lsblk
... sdb 8:16 0 1.8T 0 disk L-data01 253:5 0 1.8T 0 crypt +-data01-data01_pve01_tmeta 253:6 0 120M 0 lvm ¦ L-data01-data01_pve01-tpool 253:8 0 1.8T 0 lvm ¦ +-data01-data01_pve01 253:9 0 1.8T 0 lvm ¦ L-data01-vm--100--disk--0 253:10 0 80G 0 lvm L-data01-data01_pve01_tdata 253:7 0 1.8T 0 lvm L-data01-data01_pve01-tpool 253:8 0 1.8T 0 lvm +-data01-data01_pve01 253:9 0 1.8T 0 lvm L-data01-vm--100--disk--0 253:10 0 80G 0 lvm ...
blkid
... /dev/sdb: UUID="afeb41b5-a8ad-463d-9718-86e858be7e6a" TYPE="crypto_LUKS" ...
nano /etc/crypttab
... data01 UUID=afeb41b5-a8ad-463d-9718-86e858be7e6a none luks,discard
reboot
Во время загрузки вводим пароль шифрования для data01
Проверяем
lsblk
Вариант 2. Для раздела хранения ВМ и контейнеров в формате QCOW2 и VMDK LVM, с ручным форматированием и ручным монтированием в директорию
Для раздела хранения ВМ и контейнеров в формате QCOW2 и VMDK с возможностью создания снэпшотов подойдёт LVM с ручным монтированием в директорию после подключения шифрованного раздела
Создаем PV data01
lvm pvcreate /dev/mapper/data01
Создаем VG data01
lvm vgcreate data01 /dev/mapper/data01
Создаем раздел LVM data01_pve01 на 100% области VG data01
lvcreate -l 100%FREE --name data01_pve01 data01
Форматируем раздел в XFS
mkfs.xfs /dev/mapper/data01-data01_pve01
Создаем директорию для монтирования раздела
mkdir /mnt/pve/data01_pve01
Монтируем раздел
mount /dev/mapper/data01-data01_pve01 /mnt/pve/data01_pve01/
Создаем Directory в веб-интерфейсе Proxmox
- Datacenter - Storage - Add - Directory
ID: data01_pve01
Directory: /mnt/pve/data01_pve01 // откуда брать диск для Directory
Content: Disk image, Container // также можно выбрать хранение ISO и CT-Templates
Получаем локальное хранилище data01_pve01 в Datacenter - Storage
Перезагружаем Proxmox
reboot
Подключаем шифрованный диск и монтируем раздел LVM в директорию
cryptsetup luksOpen /dev/sdb data01
mount /dev/mapper/data01-data01_pve01 /mnt/pve/data01_pve01/
Проверяем
lsblk
... sdb 8:16 0 1.8T 0 disk L-data01 253:5 0 1.8T 0 crypt +-data01-data01_pve01_tmeta 253:6 0 120M 0 lvm ¦ L-data01-data01_pve01-tpool 253:8 0 1.8T 0 lvm ¦ +-data01-data01_pve01 253:9 0 1.8T 0 lvm ¦ L-data01-vm--100--disk--0 253:10 0 80G 0 lvm L-data01-data01_pve01_tdata 253:7 0 1.8T 0 lvm L-data01-data01_pve01-tpool 253:8 0 1.8T 0 lvm +-data01-data01_pve01 253:9 0 1.8T 0 lvm L-data01-vm--100--disk--0 253:10 0 80G 0 lvm ...
df -h
... /dev/mapper/data02-data02_pve01 458G 920M 434G 1% /mnt/pve/data02_pve01 ...
Готово
Можно создавать ВМ и хранить ISO и шаблоны на этом разделе
Вариант 3. 2 раздела на одном физическом шифрованном диске
- LVM (МОНТИРУЕМ В ДИРЕКТОРИЮ И ИСПОЛЬЗУЕМ КАК ХРАНИЛИЩЕ ДЛЯ ISO, И ВМ С ФАЙЛОВЫМИ ДИСКАМИ) - LVM-Thin (ИСПОЛЬЗУЕМ КАК ХРАНИЛИЩЕ ДЛЯ ВМ С ДИСКАМИ RAW НА РАЗДЕЛЕ, СОБСТВЕННО, LVM-Thin)
Создаем PV data01
lvm pvcreate /dev/mapper/data01
Создаем VG data01
lvm vgcreate data01 /dev/mapper/data01
Создаем ПЕРВЫЙ РАЗДЕЛ LVM data01-lvm_pve01 на 30% области VG data01
lvcreate -l 30%FREE --name data01-lvm_pve01 data01
Создаем ВТОРОЙ РАЗДЕЛ LVM-Thin используя 100% от оставшегося места
lvcreate -l 100%FREE -T data02/data01-lvmthin_pve01
Форматируем первый раздел
mkfs.ext4 /dev/data01/data01-lvm_pve01
Создаем директорию для монтирования первого раздела
mkdir /mnt/pve/data02-lvm_pve01
Монтируем первый раздел
mount /dev/mapper/data01-data01--lvm_pve01 /mnt/pve/data01-lvm_pve01/
Создаем Directory в веб-интерфейсе Proxmox
- Datacenter - Storage - Add - Directory
ID: data01-lvm_pve01
Directory: /mnt/pve/data01-lvm_pve01 // откуда брать диск для Directory
Content: Disk image, Container // также можно выбрать хранение ISO и CT-Templates
Получаем локальное хранилище data01-lvm_pve01 в Datacenter - Storage
Переходим ко второму разделу
В веб-интерфейсе Proxmox подключаем Storage типа LVM-Thin
- Datacenter - Storage - Add - LVM-Thin
ID: data01-lvmthin_pve01
VG: data01
Thin pool: data01-lvmthin_pve01
Получаем 2 хранилища
Здесь храним iso и ВМ с файловыми дисками
df -h
... /dev/mapper/data02-data01--lvm_pve01 137G 61M 130G 1% /mnt/pve/data01-lvmthin_pve01 ...
Здесь храним ВМ c RAW дисками в виде разделов LVM-Thin
lvs
... data01-lvmthin_pve01 data01 twi-a-tz-- <325.86g 0.00 10.42 ...
reboot
Подключаем физический шифрованный диск,
Монтируем первый раздел в директорию, второй раздел монтировать не надо, он подтянется сам в веб-интерфейсе
cryptsetup luksOpen /dev/sdb data01
mount /dev/mapper/data01-data01--lvmthin_pve01 /mnt/pve/data01-lvmthin_pve01/
Вариант 4. ZFS
cryptsetup luksFormat /dev/sdc
cryptsetup luksOpen /dev/sdc data02
zpool create -m /mnt/data02 data02 /dev/mapper/data02
blkid
... /dev/sdc: UUID="afeb41b5-a8ad-463d-9718-86e858be7e6a" TYPE="crypto_LUKS" ...
nano /etc/crypttab
... data02 UUID=afeb41b5-a8ad-463d-9718-86e858be7e6a none luks,discard
Проверяем
lsblk
Подключаем
- Datacenter - Stotage - Add - ZFS
ID: data02_pve01
ZFS Pool: data02
Content: Disk image, Container
Автомонтирование при загрузке
Если предварительно было настроено автоподключение шифрованных разделов при загрузке ОС
Смотрим UUID нового диска
blkid
... /dev/sdc: UUID="afeb41b5-a8ad-463d-9718-86e858be7e6a" TYPE="crypto_LUKS" ...
Добавляем UUID нового диска data02 в скрипт
nano /etc/initramfs-tools/hooks/crypt_unlock.sh
...
if [ "${DROPBEAR}" != "n" ] && [ -r "/etc/crypttab" ] ; then
cat > "${DESTDIR}/bin/unlock" << EOF
#!/bin/sh
# custom non-system disk decrypt
/sbin/cryptsetup luksOpen /dev/<UUID> data01
/sbin/cryptsetup luksOpen /dev/<UUID> data02
...
reboot
Во время загрузки вводим пароль шифрования для data02