Proxmox. Шифрование несистемных дисков с данными: различия между версиями

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

Текущая версия на 20:08, 9 мая 2023


Ссылки

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

Монтирование через сетевое подключение SSH при загрузке ОС

Если предварительно было настроено автоподключение шифрованных разделов при загрузке ОС

Смотрим UUID нового диска

blkid

    ...
    /dev/sdc: UUID="afeb41b5-a8ad-463d-9718-86e858be7e6a" TYPE="crypto_LUKS"
    ...

Добавляем строку с UUID нового диска data02 в скрипт для автомонтирования через удаленное подключения SSH при загрузке системы

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/afeb41b5-a8ad-463d-9718-86e858be7e6a data01
/sbin/cryptsetup luksOpen /dev/<UUID> data02
...

Обновляем настройки iniramfs

update-initramfs -u

reboot

Во время загрузки вводим пароль шифрования для data02