Все системы работают в штатном режиме 8 принимаемые криптовалюты · Monero приветствуется Политика без KYC
ChainVPS

Шифрование

Как зашифровать диск VPS с помощью LUKS и разблокировать его удалённо

Шифрование диска на арендованном сервере — не то же самое обещание, что на вашем ноутбуке. Вот что LUKS реально даёт на VPS и развёртывание, которое оставляет зашифрованный сервер загружаемым, когда подойти к консоли физически некому.

Безопасность10 мин чтения чтенияКоманда ChainVPS

Как зашифровать диск VPS с помощью LUKS и разблокировать его удалённо

Шифрование VPS выглядит как команда в одну строку — cryptsetup luksFormat, готово — а затем незаметно не оправдывает то, что люди считали, будто покупают. На арендованной машине под вашим ядром работает гипервизор, поэтому модель угроз здесь не та, под которую изначально проектировалось полное шифрование диска. Это руководство — честная версия: от чего LUKS защищает на VPS, от чего нет, два рабочих пути развёртывания и как разблокировать зашифрованный корневой раздел по SSH, чтобы вы никогда не остались отрезаны от собственного сервера.

Что шифрование реально даёт на арендованном сервере

Полное шифрование диска защищает данные в состоянии покоя (data at rest). За этой фразой скрывается многое, и на VPS стоит чётко разобрать, какие моменты считаются «покоем», а какие нет — именно в этом разрыве рушится большинство ожиданий.

Списанное оборудование

Диски выходят из строя, их заменяют и увозят со стойки. Раздел LUKS на нерабочем диске для того, кто получит его следующим, — просто блок шума. Здесь шифрование решает задачу полностью.

Отсоединённый или скопированный том

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

Работающая машина

После открытия тома мастер-ключ живёт в памяти ядра. Доступ на уровне гипервизора в принципе может до него дотянуться. Здесь шифрование поднимает цену атаки, но не закрывает дверь полностью.

Ваши собственные ошибки

Незашифрованный своп, резервные копии в открытом виде и журналы, записанные до монтирования тома, остаются вне контейнера. Большинство реальных утечек с зашифрованных серверов случаются именно здесь, а не через сам шифр.

Проговорим это ограничение прямо, чтобы учитывать его в планах: пока том разблокирован, ключ находится в RAM на оборудовании, которое вам не принадлежит. LUKS на VPS — сильный ответ на офлайн-доступ и лишь частичный на доступ к работающей машине. Сочетайте его с юрисдикцией, которой вы действительно доверяете — см. /offshore-hosting, — а не рассматривайте как её замену.

Выберите схему прежде, чем набирать команду

Четыре схемы покрывают почти любое реальное требование. Ошибка в выборе обойдётся переустановкой, поэтому решайте здесь, а не на середине пути.

Зашифрованный том с даннымиВторой диск хранит всё чувствительное; корневой раздел остаётся открытым. Работает на уже запущенном сервере, без переустановки — начните с этого варианта, если нет причин поступить иначе.
Зашифрованный корневой разделВся система целиком находится внутри LUKS. Требует установки с нуля с кастомного ISO и способа вводить парольную фразу при каждой загрузке.
Шифрование на уровне файловgocryptfs или age поверх обычной файловой системы. Подходит для одного каталога, но размеры файлов и метаданные остаются видимыми, а пробелы легко упустить.
Только зашифрованные резервные копииrestic или borg с надёжным ключом. Это вообще не шифрование диска — но этот уровень нельзя пропускать никому, а многим нужен только он.

Путь A — шифрование тома с данными на уже работающем сервере

Это вариант, который на самом деле нужен большинству: десять минут работы, без переустановки, и всё важное оказывается внутри контейнера. Сначала подключите второй том — на тарифе /storage это большой диск; на стандартном /vps его можно добавить прямо при развёртывании.

  1. 1

    Определите целевое устройство

    Выполните lsblk и убедитесь, что форматировать вы собираетесь именно пустое устройство. luksFormat уничтожает всё, что на нём было, и отменить это нельзя.

  2. 2

    Создайте контейнер LUKS2

    cryptsetup luksFormat --type luks2 /dev/vdb попросит ввести YES заглавными буквами, а затем задать парольную фразу. Выбирайте такую, которую сможете безошибочно набрать в консоли без истории ввода и без отображения символов.

  3. 3

    Откройте контейнер и создайте файловую систему

    cryptsetup open /dev/vdb cryptdata создаёт /dev/mapper/cryptdata. Затем выполните mkfs.ext4 /dev/mapper/cryptdata и смонтируйте раздел туда, где будут жить данные, например в /srv/data.

  4. 4

    Решите, как том будет разблокироваться при загрузке

    Либо вводите парольную фразу после каждой перезагрузки, либо добавьте файл ключа через cryptsetup luksAddKey и храните его на корневом разделе. Файл ключа удобен, но строго слабее — чётко понимайте, на какой компромисс идёте.

  5. 5

    Пропишите crypttab и fstab

    Добавьте соответствие в /etc/crypttab, используя UUID=, а не имя устройства, затем смонтируйте раздел через /etc/fstab с флагом nofail, чтобы неудачная разблокировка никогда не подвешивала загрузку.

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

Путь B — зашифрованный корневой раздел с кастомного ISO

Если требование звучит так, что на выключенной машине не должно остаться ничего читаемого, сам корневой раздел должен находиться внутри LUKS. Это означает установку с нуля через консоль у провайдера, который позволяет загружаться с собственного ISO.

  1. 1

    Загрузите установщик через консоль

    Подключите netinst ISO Debian или Ubuntu как кастомный ISO и ведите установку через VNC или serial. По SSH это не работает — подключаться пока не к чему.

  2. 2

    Используйте автоматическую разметку с зашифрованным LVM

    Установщик оставляет небольшой /boot в открытом виде, потому что что-то должно запуститься до открытия тома, а корневой раздел и своп помещает внутрь одного контейнера LUKS.

  3. 3

    Выберите парольную фразу, которую сможете набрать вслепую

    Вводить её придётся по SSH при каждой перезагрузке — без отображения символов и без автодополнения. Фраза из пяти слов здесь лучше, чем нагромождение символов.

  4. 4

    Настройте удалённую разблокировку, прежде чем выходить из сессии

    Свежезашифрованный корневой раздел после следующей перезагрузки будет вечно стоять на запросе парольной фразы. Настройте удалённую разблокировку в той же сессии, пока консоль ещё перед вами.

На тарифах с 1–2 ГБ RAM стандартная функция деривации ключа Argon2id может запросить больше памяти, чем есть в initramfs, и разблокировка при загрузке провалится, даже если парольная фраза верна. Ограничьте её на этапе форматирования через cryptsetup luksFormat --pbkdf-memory 262144, либо проверьте существующий заголовок командой cryptsetup luksDump, прежде чем доверять маленькому инстансу перезагрузку без присмотра.

Удалённая разблокировка по SSH с dropbear-initramfs

Зашифрованному корневому разделу нужна парольная фраза ещё до того, как операционная система вообще существует. dropbear-initramfs помещает крошечный SSH-сервер внутрь initramfs, чтобы вы могли ввести её откуда угодно — это и есть разница между зашифрованным сервером и зашифрованным кирпичом.

  1. 1

    Установите пакет

    apt install dropbear-initramfs. Он встраивается в процесс генерации initramfs и автоматически пересобирается в каждый будущий образ ядра.

  2. 2

    Авторизуйте ключ, и только одну команду

    Поместите публичный ключ в /etc/dropbear/initramfs/authorized_keys — на Debian 11 и старше это /etc/dropbear-initramfs/authorized_keys. Добавьте перед ним префикс no-port-forwarding,no-agent-forwarding,no-x11-forwarding,command="cryptroot-unlock", чтобы украденный ключ давал не больше, чем запрос пароля.

  3. 3

    Дайте initramfs доступ к сети

    DHCP работает там, где его предоставляет провайдер; в остальных случаях добавьте статический параметр ip=ADDRESS::GATEWAY:NETMASK::eth0:off в GRUB_CMDLINE_LINUX и выполните update-grub. Завершите командой update-initramfs -u -k all, чтобы изменение попало в образ.

  4. 4

    Проверьте полную перезагрузку, прежде чем полагаться на неё

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

У initramfs собственный SSH host key, отличный от того, что предъявляет загруженная система, поэтому при каждой перезагрузке клиент будет предупреждать об изменившемся ключе хоста. Запустите dropbear на отдельном порту через DROPBEAR_OPTIONS в /etc/dropbear/initramfs/dropbear.conf, либо подключайтесь командой ssh -o HostKeyAlias=box-initramfs, и запишите оба отпечатка.

Управление ключами — вот где шифрование диска обычно и подводит

Слабое место — не сам шифр, и никогда им не было. Любая устранимая катастрофа с участием LUKS сводится к ключу или заголовку, поэтому относитесь к обоим как к инфраструктуре.

  • Сразу сделайте резервную копию заголовка — cryptsetup luksHeaderBackup /dev/vdb --header-backup-file luks-header.img — и храните её вне сервера. Заголовок, повреждённый одной неосторожной командой dd, означает безвозвратную потерю данных даже при абсолютно верной парольной фразе.
  • Используйте два слота. LUKS2 даёт целых 32: в одном — ваша парольная фраза, в другом — длинный случайный ключ восстановления, хранящийся в менеджере паролей. Единственный слот — это добровольная единая точка отказа.
  • На удалённой машине ротируйте ключи в правильном порядке — сначала добавьте новый через luksAddKey, убедитесь, что он открывает том, и только потом удаляйте старый через luksKillSlot. Никогда не наоборот.
  • Храните парольную фразу и данные для подключения к серверу в разных местах. Одна скомпрометированная заметка не должна отдавать разом и адрес, и ключ.

Цена шифрования в производительности

Накладные расходы реальны, но обычно незаметны. Измеряйте их на той машине, что есть у вас, а не полагайтесь на бенчмарк из другой эпохи.

Шифрaes-xts-plain64 с 512-битным ключом — вариант по умолчанию и быстрый путь на любом CPU с AES-NI, включая каждое ядро AMD EPYC, которое мы используем.
Запас производительностиcryptsetup benchmark на современном ядре обычно показывает несколько GB/s для AES-XTS — с большим запасом больше того, что требуют от диска большинство нагрузок.
Где это заметноОднопоточное последовательное чтение на NVMe Gen4. Потолком может стать одно ядро раньше, чем сам накопитель; параллельные и случайные нагрузки почти этого не замечают.
Тонкая настройкаФлаги crypttab no-read-workqueue и no-write-workqueue снижают задержку на NVMe. Измеряйте до и после — это не бесплатный выигрыш повсеместно.

О чём обычно забывают

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

  • Своп. Незашифрованный раздел подкачки может хранить фрагменты чего угодно, что проходило через память. Шифруйте его новым случайным ключом при каждой загрузке через запись /dev/urandom в /etc/crypttab.
  • Журналы, записанные до монтирования. Всё, что логируется, пока зашифрованный том ещё закрыт, попадает на открытый корневой раздел. Направьте журналы приложений и базы данных на путь внутри контейнера.
  • Резервные копии. Копирование содержимого зашифрованного тома в объектное хранилище в открытом виде сводит на нет всю затею. Шифруйте резервную копию отдельно с помощью restic, borg или age и храните эти ключи в другом месте.
  • Снапшоты. Снапшот провайдера захватывает диск, а не RAM, поэтому том LUKS внутри него остаётся шифротекстом — но всё, что осталось на незашифрованном корневом разделе, попадает туда в точности как есть.
  • Discard. Передача флага discard через LUKS сохраняет работу trim на NVMe, но раскрывает, какие блоки не используются, — а значит, насколько заполнена файловая система и примерно как она устроена. Включайте этот флаг осознанно, а не копированием чужого конфига.

Где хостинг всё ещё имеет значение

Шифрование — это уровень, который контролируете вы: оно определяет, насколько дорого прочитать ваши данные после того, как машина выключена или диск покинул здание. Уровень вокруг него — кто может принудить к доступу к оборудованию и какие записи связывают сервер с вами — принадлежит провайдеру и его юрисдикции. Шесть из наших пятнадцати регионов — юрисдикции уровня повышенной приватности (privacy-tier); они перечислены на /locations, а что это реально меняет, объясняет /offshore-hosting.

Доступность самих описанных выше путей решают три возможности провайдера: загрузка с кастомного ISO, без которой Путь B невозможен в принципе; внеполосный доступ к консоли на случай перезагрузки, после которой удалённая разблокировка не возвращается; и регистрация, которая изначально не привязывала машину к вашей юридической личности. Каждый тариф /offshore-vps и /storage здесь загружается с кастомного ISO, включает доступ к консоли и списывается с предоплаченного крипто-баланса без KYC — так что зашифрованный диск не стоит поверх бумажного следа, уже называющего ваше имя. На /guides — честный разбор того, что хостинг может видеть, а чего нет.

Чек-лист развёртывания

  • Сначала назовите угрозу: шифрование отвечает на списанные диски, отсоединённые тома и офлайн-образы — но не на работающий гипервизор.
  • Шифруйте том с данными (Путь A), если сервер уже работает; переустанавливайте с кастомного ISO (Путь B), только если зашифрован должен быть сам корневой раздел.
  • LUKS2 с aes-xts-plain64, и ограничивайте память Argon2id на любом тарифе с менее чем 2 ГБ RAM.
  • Парольная фраза в одном слоте ключа, длинный случайный ключ восстановления в другом, оба хранятся вне сервера.
  • Сделайте резервную копию заголовка LUKS, прежде чем записать первый байт реальных данных.
  • dropbear-initramfs на нестандартном порту, только по ключу, ограниченный командой cryptroot-unlock.
  • Проверьте один полный цикл перезагрузки и разблокировки, держа консоль провайдера открытой рядом.
  • Зашифрованные резервные копии вне сервера, плюс одна тренировка восстановления — непроверенная резервная копия — это лишь надежда, а не резервная копия.
Мешает ли шифрование диска моему хостинг-провайдеру читать мои данные?

В состоянии покоя — да: после выключения машины том остаётся шифротекстом, а парольная фраза никогда не покидала вашу голову. Пока сервер работает с открытым томом, мастер-ключ находится в RAM на оборудовании, которым управляет провайдер. Шифрование закрывает все офлайн-пути — списанные диски, отсоединённые тома, холодные образы — и поднимает цену всего остального. Оно дополняет доверенную юрисдикцию, а не заменяет её.

Можно ли зашифровать уже работающий VPS без переустановки?

Отдельный том с данными — да, примерно за десять минут, это Путь A выше. Корневую файловую систему — реалистично нет. cryptsetup reencrypt умеет конвертировать файловую систему на месте, но оборванное соединение или сбой питания в середине процесса на удалённой машине оставляют незагружаемый сервер и долгую бессонную ночь. Переустановка с кастомного ISO быстрее и намного безопаснее.

Сколько производительности стоит LUKS?

Меньше, чем ожидает большинство. С AES-NI шифрование AES-XTS стоит несколько процентов на типичных смешанных нагрузках, а cryptsetup benchmark на современном ядре EPYC показывает несколько GB/s. Заметный случай — однопоточный последовательный ввод-вывод на быстром NVMe, где одно ядро может упереться в потолок раньше самого накопителя. Измерьте свой собственный инстанс, а не гадайте.

Что будет, если я забуду парольную фразу?

Данные потеряны. Нет ни механизма восстановления, ни мастер-ключа на стороне провайдера, ни обращения в поддержку, которое бы это исправило — это свойство и есть смысл всей конструкции. Защититесь заранее: второй слот ключа со случайным ключом восстановления и резервная копия заголовка LUKS, хранящаяся не на самом сервере.

Насколько рискован запуск SSH внутри initramfs?

Это небольшая и хорошо изученная поверхность атаки. dropbear работает лишь несколько секунд, пока не появилась ваша корневая файловая система, принимает только публичные ключи и может быть ограничен единственной принудительной командой, которая ничего не делает, кроме как запрашивает парольную фразу. На нестандартном порту, с отдельно записанным host key initramfs, практический риск минимален по сравнению с гарантированной блокировкой доступа без него.

Примените это на практике.

Разверните оффшорный сервер от $3.49/mo · 8 криптовалюта · без KYC.