Proxmox. Установка на зашифрованный системный раздел: различия между версиями
Cless (обсуждение | вклад) |
Cless (обсуждение | вклад) |
||
| Строка 68: | Строка 68: | ||
==== На сервере SSH ('''Proxmox VE''') ==== | ==== На сервере SSH ('''Proxmox VE''') ==== | ||
Add temp IP and gw | |||
<code>ifconfig ens192 192.168.199.12/24</code> | |||
<code>ip route add default via 192.168.199.1</code> | |||
Allow root login via SSH | |||
<code>nano /etc/ssh/sshd_config</code> | <code>nano /etc/ssh/sshd_config</code> | ||
... | ... | ||
| Строка 73: | Строка 81: | ||
... | ... | ||
<code>systemctl restart sshd</code> | <code>systemctl restart sshd</code> | ||
Now you can login via SSH | |||
Устанавливаем утилиту для работы с бриджами | Устанавливаем утилиту для работы с бриджами | ||
Версия 18:29, 17 мая 2023
Описание
Установка 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)
Add temp IP and gw
ifconfig ens192 192.168.199.12/24
ip route add default via 192.168.199.1
Allow root login via SSH
nano /etc/ssh/sshd_config
... PermitRootLogin yes ...
systemctl restart sshd
Now you can login via SSH
Устанавливаем утилиту для работы с бриджами
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.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: ...
Вводим пароль шифрования
Готово - система загружается
Также можно использовать скрипт для включения компьютера через WOL и дальнейшего подключения для дешифровки, таким образом для дешифрования потребуется только ввод пароля зашифрованных дисков
# vars
:local proxmoxIp "192.168.17.251";
:local proxmoxMac "00:9C:02:97:5B:0D";
:local proxmoxUser "root";
:local mikrotikBridgeLocal "bridge-local";
:global proxmoxIpReachable [/ping $proxmoxIp count=3];
while ($proxmoxIpReachable = 0) do={
:delay delay-time=1s;
:global proxmoxIpReachable [/ping $proxmoxIp count=3];
:delay delay-time=1s;
:put "proxmoxIpReachable: $proxmoxIpReachable";
:put "Proxmox $proxmoxIp UNreachable...";
/tool wol mac=$proxmoxMac interface=$mikrotikBridgeLocal;
};
/system ssh user=$proxmoxUser address=$proxmoxIp;
Вариант 2. Шифрование всех разделов, включая /boot
https://cryptsetup-team.pages.debian.net/cryptsetup/encrypted-boot.html