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

Материал из Wiki
Перейти к навигации Перейти к поиску
Строка 355: Строка 355:
Готово - система загружается
Готово - система загружается


== ВАРИАНТ 2. Шифрование всех разделов, включая /boot ==
== Вариант 2. Шифрование всех разделов, включая /boot ==
https://cryptsetup-team.pages.debian.net/cryptsetup/encrypted-boot.html
https://cryptsetup-team.pages.debian.net/cryptsetup/encrypted-boot.html



Версия 12:27, 29 апреля 2022

Описание

Установка Proxmox на зашифрованный системный раздел. При загрузке ОС необходимо вводить пароль шифрования.

Установка

Вариант 1. Установка Debian 10 на шифрованный раздел LVM, и уже в Debian ставим Proxmox

При такой установке раздел /boot будет незашифрован. ОС при запуске в явном виде будет просить ввести пароль для подключения шифрованных системных разделов.

Запускаем установку Debian 10 на отдельный диск для ОС.

Создаем и шифруем раздел, на котором будут разделы LVM / и swap

Вариант шифрования 1

Предпочтительный, поскольку можно создать шифрованный раздел небольшого размера. Потом будет проще и быстрее его бэкапировать, хранить и восстанавливать

Вариант шифрования 2

Простой. шифрованный раздел займет объем всего диска, неудобного бэкапировать и восстанавливать

В процессе установки выбираем установку на шифрованый раздел LVM

Автоматически будут созданы разделы:

sda1 - /boot

sda5 - sda5_crypt (на нем будут разделы / и swap)

Дальнейшая общая настройка после установки Debian

На сервере SSH (Proxmox VE)

nano /etc/ssh/sshd_config

...
PermitRootLogin yes
...

systemctl restart sshd

Устанавливаем утилиту для работы с бриджами

apt install -y bridge-utils

Смотрим имя локального сетевого интерфейса

ip a

Создаем бридж

Назначаем статический IP на бридже

Добавляем в бридж локальный интерфейс ens192 без IP

nano /etc/network/interfaces

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
source /etc/network/interfaces.d/*
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
allow-hotplug ens192
iface ens192 inet manual
auto vmbr0
iface vmbr0 inet static
       address 192.168.199.189
       netmask 255.255.255.0
       gateway 192.168.199.1
       dns-nameservers 192.168.199.1
       bridge_ports ens192
       bridge_stp off
       bridge_fd 0

ИЛИ

Динамический IP на бридже

nano /etc/network/interfaces

...
auto vmbr0
iface vmbr0 inet dhcp
       bridge_stp off
       bridge_fd 0

systemctl restart networking ИЛИ reboot

nano /etc/hostname

pve-test01

nano /etc/hosts

127.0.0.1       localhost.localdomain localhost
192.168.199.189 pve-test01.local pve-test01 pvelocalhost
...

Проверяем

hostname --ip-address

...
192.168.199.189
...

echo "deb http://download.proxmox.com/debian/pve buster pve-no-subscription" > /etc/apt/sources.list.d/pve-install-repo.list

wget http://download.proxmox.com/debian/proxmox-ve-release-6.x.gpg -O /etc/apt/trusted.gpg.d/proxmox-ve-release-6.x.gpg

chmod +r /etc/apt/trusted.gpg.d/proxmox-ve-release-6.x.gpg  # optional, if you have a non-default umask

apt update && apt full-upgrade

apt install proxmox-ve postfix open-iscsi

// Recommended: remove the os-prober package

// The os-prober package scans all the partitions of your host, including those assigned to guests VMs, to create dual-boot GRUB entries. If you didn't install Proxmox VE as dual boot beside another Operating System, you can safely remove the os-prober package.

apt remove os-prober

Если в системе есть диск с данными, который мы хотим дешифровать при загрузке вместе с системным, то добавим вторую строку с диском data01 в файл /etc/crypttab:

sda5_crypt (/dev/sda5) - системный шифрованный раздел

data01 (/dev/sdb) - шифрованный диск с данными

UUID можно посмотреть командой "blkid"

nano /etc/crypttab

...
sda5_crypt UUID=cc534e1a-8de7-4767-ad29-8e03e15a3fce none luks,discard
data01 UUID=e001816d-68d9-4a64-9013-d5aab823fedf none luks,discard
...

reboot

При загрузке в локальной консоли после дешифрования системного раздела sda5_crypt появится запрос на дешифрование data01

Отчасти готово.

Теперь, при запуске системы, необходимо подключиться удаленным управлением (например, iLO Remote Console) или, на крайний случай, монитором с клавиатурой.

Если же карта удаленного доступа на сервере отсутствует, а монитор подключать не хочется, то имеется решение.

Используем dropbear-initramfs, реализация ssh сервера, встроенного в initramfs, чтобы можно было подключиться по ssh перед загрузкой ядра linux и ввести пароль на шифрованный раздел удаленно.

Есть ограничение: по логину/паролю подключиться в таком случае не получится. на клиенте, с которого будем подключаться по ssh для ввода пароля шифрованного раздела необходимо создать publickey и поместить его на сервер ssh (pve). можно использовать одну пару ключей (id_rsa / id_rsa.pub) на разных машинах linux

На клиенте (Linux)

Для начала создадим пару ключей (id_rsa / id_rsa.pub), которые будем использовать для подключения на сервер с целью дешифрования разделов

Вносим настройки в ssh клиент, чтобы при изменении ключа ssh удаленного сервера, ssh клиент не ругался

nano ~/.ssh/config

...
UserKnownHostsFile=/dev/null
StrictHostKeyChecking=no
...

(

   ИЛИ

   при подключении клиентом по ssh используем опции:

   ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null user$host

)

Создаем публичный ключ

ssh-keygen -t rsa

Получаем ключ: ~/.ssh/id_rsa.pub

cat ~/.ssh/id_rsa.pub

На сервере SSH (Proxmox VE)

Вариант 1. Дешифруем только системный раздел

https://www.arminpech.de/2019/12/23/debian-unlock-luks-root-partition-remotely-by-ssh-using-dropbear/

https://www.cyberciti.biz/security/how-to-unlock-luks-using-dropbear-ssh-keys-remotely-in-linux/

https://www.sidorenko.io/post/2019/09/full-encrypted-proxmox-installation/

https://www.pbworks.net/ubuntu-guide-dropbear-ssh-server-to-unlock-luks-encrypted-pc/

Ставим утилиты

apt-get install -y dropbear-initramfs cryptsetup-initramfs lvm2

Настройки dropbear

echo 'DROPBEAR_OPTIONS="-RFEsjk -c /bin/cryptroot-unlock"' > /etc/dropbear-initramfs/config

Содержимое cat id_rsa.pub (который создали на клиенте) копируем и помещаем в файл authorized_keys

echo 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCvPopsr/hQHihV59qKcLLXLVae0SUshN6xPPe+y7SidCzjBvt4dAhj9IRagxDbRIRaqLefIO+wyvR8bu6qXfYV98Nf8qNRgeCjvseCnxUwR7ek/51NXhn1FqwHRwdvswIwbkF88aIPdgpL8+BBqoIQKgULIKNdDJ/QigqvWN3WacKpfWp/Nyae9h4LYsOV2tLVb/42q3Hw9T9ojEkk3fa1+JWO5ioZdG/8BTTix0C4/yesOGDo4TraN3sHMK2wd+cSoG2tgzkU9hhfQCTACP/j1FO7qNxqIveeSHraAP12yLqaWXeT5SS/FQq8Tf3+c6/nX3lM7aTr/cHwM8WTdzWD root@centos7-test01' > /etc/dropbear-initramfs/authorized_keys

Проверяем что таблица /etc/crypttab содержит примерно следующее

sda2_crypt /dev/sda2 none luks,initramfs

Настройки сети DROPBEAR

${optional_fqdn}, ${interface_name} - необязательные параметры

echo 'IP="${ip_address}::${gateway_ip}:${netmask}:${optional_fqdn}:${interface_name}:none"' > /etc/initramfs-tools/conf.d/ip

Обновляем initramfs

ЗАПУСКАТЬ ПРИ ЛЮБОМ ИЗМЕНЕНИИ КОНФИГА dropbear-iniramfs

update-initramfs -k all -u

reboot

Система требует ввести пароль для дальнейшей загрузки ОС

Вариант 2. Дешифруем системный раздел и второй диск с данными

Можно использовать и просто для системного диска Для этого не используем строку дешифровки второго диска /dev/sdb в скрипте (см. далее)

https://askubuntu.com/questions/1076305/dropbear-initramfs-on-ubuntu-18-04

apt-get install dropbear initramfs-tools busybox

nano /etc/default/dropbear

...
NO_START=1
...

Этот скрипт создает при загрузке системы скрипт /usr/bin/unlock, который будет автоматически запускаться при входе клиента ssh в оболочку сервера.

Обращаем внимания на дополнительную строку: /sbin/cryptsetup luksOpen /dev/sdb data01

Она дешифрует второй диск с данными, затем необходимо будет ввести пароль для первого системного диска, после чего система начнет загружаться

nano /etc/initramfs-tools/hooks/crypt_unlock.sh

#!/bin/sh

PREREQ="dropbear"
prereqs() {
  echo "$PREREQ"
}
case "$1" in
  prereqs)
   prereqs
   exit 0
  ;;
esac
. "${CONFDIR}/initramfs.conf"
. /usr/share/initramfs-tools/hook-functions
if [ "${DROPBEAR}" != "n" ] && [ -r "/etc/crypttab" ] ; then
cat > "${DESTDIR}/bin/unlock" << EOF
#!/bin/sh

# custom non-system disk decrypt
/sbin/cryptsetup luksOpen /dev/sdb data01

if PATH=/lib/unlock:/bin:/sbin /scripts/local-top/cryptroot; then
kill \`ps | grep cryptroot | grep -v "grep" | awk '{print \$1}'\`
# following lines will be executed after the passphrase has been correctly entered
# kill the remote shell
kill -9 \`ps | grep "\-sh" | grep -v "grep" | awk '{print \$1}'\`
exit 0
fi
exit 1
EOF
  chmod 755 "${DESTDIR}/bin/unlock"
  mkdir -p "${DESTDIR}/lib/unlock"
cat > "${DESTDIR}/lib/unlock/plymouth" << EOF
#!/bin/sh
[ "\$1" == "--ping" ] && exit 1
/bin/plymouth "\$@"
EOF
  chmod 755 "${DESTDIR}/lib/unlock/plymouth"
  echo To unlock root-partition run "unlock" >> ${DESTDIR}/etc/motd
fi

chmod +x /etc/initramfs-tools/hooks/crypt_unlock.sh nano /etc/initramfs-tools/scripts/init-bottom/cleanup.sh

#!/bin/sh

echo "Killing dropbear"
killall dropbear
exit 0

chmod +x /etc/initramfs-tools/scripts/init-bottom/cleanup.sh

IP dropbear, к которому будем подключаться для дешифрования разделов

nano /etc/initramfs-tools/initramfs.conf

...
IP=192.168.199.177::192.168.199.1:255.255.255.0:::off

Настройки dropbear

-c /usr/bin/unlock - автозапуск скрипта дешифрования при подключением клиентом ssh при загрузке iniramfs

echo 'DROPBEAR_OPTIONS="-RFEsjk -c /usr/bin/unlock"' > /etc/dropbear-initramfs/config

Содержимое cat id_rsa.pub (который создали на клиенте) копируем и помещаем в файл authorized_keys

echo 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCvPopsr/hQHihV59qKcLLXLVae0SUshN6xPPe+y7SidCzjBvt4dAhj9IRagxDbRIRaqLefIO+wyvR8bu6qXfYV98Nf8qNRgeCjvseCnxUwR7ek/51NXhn1FqwHRwdvswIwbkF88aIPdgpL8+BBqoIQKgULIKNdDJ/QigqvWN3WacKpfWp/Nyae9h4LYsOV2tLVb/42q3Hw9T9ojEkk3fa1+JWO5ioZdG/8BTTix0C4/yesOGDo4TraN3sHMK2wd+cSoG2tgzkU9hhfQCTACP/j1FO7qNxqIveeSHraAP12yLqaWXeT5SS/FQq8Tf3+c6/nX3lM7aTr/cHwM8WTdzWD root@centos7-test01' > /etc/dropbear-initramfs/authorized_keys

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

ЗАПУСКАТЬ ПРИ ЛЮБОМ ИЗМЕНЕНИИ КОНФИГА dropbear-iniramfs

update-initramfs -u

reboot

Система требует ввести пароль для дальнейшей загрузки ОС

Подключиться из Linux для дешифрования раздела

Когда будет запрос пароля на подключение шифрованных разделов - подключаемся С КЛИЕНТА, PUBLICKEY КОТОРОГО ВНЕСЛИ В authorized_keys

Пароль root SSH сервера не будет запрашиваться, так как мы добавили publickey клиента на сервер.

Публичный ключ id_rsa.pub, после его внесения в /etc/dropbear-initramfs/authorized_keys на сервере,

Необязательно использовать только с клиента, на котором мы его создали.

Можно перенести ключ на любую Linux машину и использовать эту машину для подключения к серверу.

По-умолчанию при использовании ssh-клиента, система ищет ключи в ~/.ssh

Указать путь к паре ключей (id_rsa / id_rsa.pub) вручную также можно опцией -i

ssh -i /root/rsa/id_rsa root@192.168.199.186

...
Please unlock disk sda5_crypt:
...

Вводим пароль на шифрованный раздел

Готово - система загружается

Подключиться из Windows для дешифрования раздела

Для дешифрования раздела будем использовать PUTTY и ту же пару ключей, которую создали в Linux

Копируем пару ключей (id_rsa / id_rsa.pub) из системы Linux в систему Windows, в директорию "rsa" в папке с plink.exe

Скачиваем puttygen.exe и plink.exe: https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html

Необходимо сконвертировать приватный ключ id_rsa в формат, который поймет putty: https://www.simplified.guide/putty/convert-ssh-key-to-ppk

Запускаем puttygen

Load - выбираем приватный ключ id_rsa

Будет сообщение об успехе импорта ключа, далее:

Save private key - сохраняем файл как id_rsa.ppk (формат ключа putty) в директорию "rsa" в папке с plink.exe   

Запускаем plink, указав путь к ключу id_rsa.ppk

plink.exe -batch -i .\rsa\centos7-test01-199-191\id_rsa.ppk root@192.168.199.186

...
Please unlock disk sda2_crypt:
...

Вводим пароль шифрования

Готово - система загружается

Подключиться из Mikrotik routeros для дешифрования раздела

Копируем на микротик пару ключей (id_rsa / id_rsa.pub), которые создали на Linux и импортируем их

/user ssh-keys private import user=admin private-key-file=id_rsa public-key-file=id_rsa.pub passphrase=""

Подключаемся

/system ssh address=192.168.199.177 user=root

...
Please unlock disk sda2_crypt:
...

Вводим пароль шифрования

Готово - система загружается

Вариант 2. Шифрование всех разделов, включая /boot

https://cryptsetup-team.pages.debian.net/cryptsetup/encrypted-boot.html

https://habr.com/ru/post/306606/