Шифрование диска LUKS с разблокировкой через VNC
Мы честно пишем в политике конфиденциальности: администратор гипервизора технически имеет доступ к образу диска любой виртуальной машины — так устроена виртуализация в принципе. Единственный способ это исключить — шифровать самому, ключом, которого у хостера нет.
Что даёт и чего не даёт эта схема
Даёт: данные на выключенной машине бесполезны для того, кто получил доступ к образу диска или физическому носителю. При изъятии оборудования содержимое не восстановимо без вашего пароля.
Не даёт: защиту работающей машины. После разблокировки ключ находится в оперативной памяти, и теоретически его можно оттуда достать. Это цена за возможность вообще пользоваться сервером — идеального решения здесь не существует ни у одного провайдера.
Забытый пароль = потерянные данные. Восстановления нет ни у нас, ни у кого-либо ещё. Держите пароль в менеджере паролей и сделайте резервную копию заголовка LUKS.
Схема разделов
Загрузчик и ядро должны читаться до разблокировки, поэтому /boot остаётся открытым, а корневой раздел шифруется:
/dev/vda1 512 МБ /boot ext4 (не шифруется)
/dev/vda2 всё LUKS2 → LVM → / (шифруется)
1. Загрузка в установщик
Установить систему поверх работающей нельзя, поэтому используем VNC-консоль в панели. В разделе «Переустановка» выберите пункт «Загрузка своего ISO» и укажите ссылку на netinst-образ Debian — или переключитесь на netboot.xyz, там образ выбирается из меню.
Дальше работаем через VNC: это единственный способ ввести пароль на этапе, когда сеть ещё не поднята.
2. Разметка при установке
В инсталляторе Debian выберите ручную разметку:
- Раздел 1 — 512 МБ, ext4, точка монтирования
/boot, флаг загрузочного. - Раздел 2 — всё оставшееся, тип «физический том для шифрования».
- Настроить шифрование, задать парольную фразу (не менее 20 символов).
- Поверх зашифрованного тома создать группу LVM, в ней логические тома
rootиswap.
Отдельный swap обязательно внутри LUKS: иначе фрагменты памяти, включая ключи, окажутся на диске в открытом виде.
3. Ручной вариант для уже установленной системы
Если система уже стоит, а переустанавливать не хочется — шифруем второй диск под данные. Закажите дополнительный том в панели и:
cryptsetup luksFormat --type luks2 --cipher aes-xts-plain64 \
--key-size 512 --hash sha512 --iter-time 5000 /dev/vdb
cryptsetup open /dev/vdb data
mkfs.ext4 /dev/mapper/data
mkdir -p /srv/secure
mount /dev/mapper/data /srv/secure
--iter-time 5000 — пять секунд на вычисление ключа при открытии. Замедляет перебор в тысячи раз, а вам стоит пяти секунд один раз за загрузку.
4. Разблокировка при загрузке
Вариант А — через VNC (проще и надёжнее)
После каждой перезагрузки открываете консоль в панели и вводите пароль. Подходит, если сервер перезагружается редко. Ничего дополнительно настраивать не нужно.
Вариант Б — через dropbear-initramfs
Мини-SSH-сервер поднимается на этапе initramfs, вы подключаетесь по сети и вводите пароль в терминале:
apt install dropbear-initramfs
# ключ, которым будете входить именно в initramfs
cat ~/.ssh/sputnik.pub >> /etc/dropbear/initramfs/authorized_keys
# статическая сеть на этапе загрузки: ip=адрес::шлюз:маска::интерфейс
echo 'IP=92.223.14.87::92.223.14.1:255.255.255.0::ens3:off' >> /etc/initramfs-tools/initramfs.conf
echo 'DROPBEAR_OPTIONS="-p 2222 -s -j -k"' >> /etc/dropbear/initramfs/dropbear.conf
update-initramfs -u
После перезагрузки подключаетесь на порт 2222 и разблокируете диск:
ssh -i ~/.ssh/sputnik -p 2222 [email protected]
cryptroot-unlock
Ключ хоста dropbear отличается от ключа обычного sshd, поэтому клиент предупредит о смене отпечатка. Это нормально; чтобы не путаться, добавьте отдельную запись в
~/.ssh/configс параметромUserKnownHostsFile.
5. Резервная копия заголовка LUKS
Повреждение первых мегабайт раздела означает потерю данных даже при известном пароле. Сделайте копию заголовка и храните её вне сервера:
cryptsetup luksHeaderBackup /dev/vda2 --header-backup-file luks-header.img
Файл содержит зашифрованные слоты ключей: без пароля он бесполезен, но и хранить его на публичном ресурсе не стоит.
6. Дополнительный слот на случай форс-мажора
LUKS поддерживает до восьми паролей. Добавьте второй, длинный, и положите его в менеджер паролей отдельно от основного:
cryptsetup luksAddKey /dev/vda2
7. Проверка
lsblk -f # структура и типы
cryptsetup status data # параметры активного тома
cryptsetup luksDump /dev/vda2 # заголовок, слоты, параметры KDF
В выводе luksDump убедитесь, что используется LUKS2 и argon2id — это современный KDF, устойчивый к перебору на видеокартах.
Что стоит помнить
- Каждая перезагрузка требует вашего участия. Плановые работы в ЦОД — тоже перезагрузка.
- Автоматическое восстановление после сбоя питания невозможно: машина поднимется и будет ждать пароль.
- Производительность AES-XTS на современных процессорах с AES-NI падает на единицы процентов — на практике незаметно.
- Мы не сможем помочь с восстановлением данных на зашифрованном томе. Это осознанная плата за то, что и никто другой не сможет.