Все системы в норме · Средняя загрузка нод: 23% · Потери пакетов: 0,41 мс Статус сети →
Безопасность · 14 минут · обновлено 30.04.2026

Шифрование диска LUKS с разблокировкой через VNC

Мы честно пишем в политике конфиденциальности: администратор гипервизора технически имеет доступ к образу диска любой виртуальной машины — так устроена виртуализация в принципе. Единственный способ это исключить — шифровать самому, ключом, которого у хостера нет.

Что даёт и чего не даёт эта схема

Даёт: данные на выключенной машине бесполезны для того, кто получил доступ к образу диска или физическому носителю. При изъятии оборудования содержимое не восстановимо без вашего пароля.

Не даёт: защиту работающей машины. После разблокировки ключ находится в оперативной памяти, и теоретически его можно оттуда достать. Это цена за возможность вообще пользоваться сервером — идеального решения здесь не существует ни у одного провайдера.

Забытый пароль = потерянные данные. Восстановления нет ни у нас, ни у кого-либо ещё. Держите пароль в менеджере паролей и сделайте резервную копию заголовка LUKS.

Схема разделов

Загрузчик и ядро должны читаться до разблокировки, поэтому /boot остаётся открытым, а корневой раздел шифруется:

/dev/vda1   512 МБ   /boot   ext4        (не шифруется)
/dev/vda2   всё      LUKS2 → LVM → /   (шифруется)

1. Загрузка в установщик

Установить систему поверх работающей нельзя, поэтому используем VNC-консоль в панели. В разделе «Переустановка» выберите пункт «Загрузка своего ISO» и укажите ссылку на netinst-образ Debian — или переключитесь на netboot.xyz, там образ выбирается из меню.

Дальше работаем через VNC: это единственный способ ввести пароль на этапе, когда сеть ещё не поднята.

2. Разметка при установке

В инсталляторе Debian выберите ручную разметку:

  1. Раздел 1 — 512 МБ, ext4, точка монтирования /boot, флаг загрузочного.
  2. Раздел 2 — всё оставшееся, тип «физический том для шифрования».
  3. Настроить шифрование, задать парольную фразу (не менее 20 символов).
  4. Поверх зашифрованного тома создать группу 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 падает на единицы процентов — на практике незаметно.
  • Мы не сможем помочь с восстановлением данных на зашифрованном томе. Это осознанная плата за то, что и никто другой не сможет.
Дальше: автобэкап через restic — шифрованные копии на отдельной машине в другой стране.