Рассматривается ситуация, когда злоумышленники (доброумышленники) могут заполучить Ваш сервер для подробного изучения.
Основная идея
- Поставить хорошее шифрование на физические тома.
- Включение нужных сервисов через сеть.
- Самое слабое звено человек, и хорошо если тот, кто знает пароли находится далеко от сервера, например в другой стране.
- Изучение винчестеров должно показать обычную систему, т.е. ничего и еще большой не отформатированный кусок винчестера.
Реализация
Решение построено на LVM и шифровании с помощью LUKS.
Linux Volume Manager (LVM) — это очень мощная система управления томами с данными для Linux. Она позволяет создавать поверх физических разделов (или даже неразбитых винчестеров) логические тома, которые в самой системе будут видны как обычные блочные устройства с данными (т.е. как обычные разделы). Основные преимущества LVM в том, что во-первых одну группу логических томов можно создавать поверх любого количества физических разделов, а во-вторых размер логических томов можно легко менять прямо во время работы. Кроме того, LVM поддерживает механизм снапшотов, копирование разделов «на лету» и зеркалирование, подобное RAID-1.
Модуль dm-crypt из набора device-mapper реализует метод crypt отображения виртуального блочного устройства (/dev/mapper/luks-УИД) на низлежащее блочное устройство (возможно тоже виртуальное) или файл (с помощью loopback) с прозрачным для пользователя шифрованием с использованием Linux 2.6 cryptoapi. Для шифрования задаются алгоритм и метод симметричного шифрования (AES), ключ, режим генерации начального вектора. При записи на созданное виртуальное устройство данные шифруются перед записью на низлежащее блочное устройство, при чтении с нового устройства зашифрованные ранее данные считываются с низлежащего блочного устройства и дешифруются. Формат служебной информации совпадает с форматом cryptoloop. Может работать поверх loop-устройства (шифрованная файловая система в файле). Файловая система на виртуальном устройстве создаётся обычным образом.
Устанавливается система в нужной Вам конфигурации. В моем случае не очень (даже очень не очень) мощный компьютер с Ubuntu и PostgreSQL в качестве СУБД. Ставим поддержку LVM и cryptsetup. Ниже все команды естественно под root-ом.
Устанавливаем шифрование на нужный нам раздел (у меня /dev/sda3 с последующим именем bblab1s)
cryptsetup -y -s 256 -c aes-cbc-essiv:sha256 luksFormat /dev/sda3
Монтирует шифрованный раздел
cryptsetup luksOpen /dev/sda3 bblab1s
Создаем на нем физический том
pvcreate /dev/mapper/bblab1s
vgcreate bblab /dev/mapper/bblab1s
Нарезаем на нем логические тома (размер указывается после -L)
lvcreate -L 32G -n swap bblab
lvcreate -L 16G -n tmp bblab
lvcreate -L 1000G -n varps bblab
lvcreate -L 16G -n varlg bblab
lvcreate -L 256G -n home bblab
Осуществляем формат нужных нам разделов
mkswap /dev/bblab/swap
mkfs.ext4 /dev/bblab/tmp
mkfs.ext4 /dev/bblab/varps
mkfs.ext4 /dev/bblab/varlg
mkfs.ext4 /dev/bblab/home
Я посчитал необходимым скрыть swap, /tmp, /var/log/, /var/lib/postgresql, /home. В /boot/grub/grub.cfg там где стоит linux … добавляем опции text nomodeset, чтобы все грузилось в текстовом режиме. Я также устанавливаю openssh-server для захода по ssh и acpi-support для выключения по кнопке питания. Блокируем запись в .bash_history.txt, например сделав его read-only или любым другим способом. После этого от компьютера можно все отключить. У меня остался только сам компьютер, провод из розетки и сеть.
При включении на компьютере стоит чистая система, на него можно зайти по сети и что-нибудь поделать. Но вот Вам понадобилась работа с PostgreSQL или запустить через neatx-server KDE, а под ней на VirtualBox винды с какой-то жутко дорогой программой. Вы пишите смс или звоните в skype или google, тому далекому человеку, который знает пароли и сидит в стране с большой бюрократией. Он, например через терминал ssh в своем андроиде выполняет на Вашем сервере следующие команды.
Монтирует шифрованный раздел (тут он должен ввести на него пароль)
cryptsetup luksOpen /dev/sda3 bblab1
Останавливает PostgreSQL и синхронизирует диски
service postgresql stop
sync
sleep 5
Монтирует нужные разделы и запускает PostgreSQL.
swapon /dev/bblab/swap
mount /dev/bblab/tmp /tmp
chmod ugo+rwxt /tmp
mount /dev/bblab/varlg /var/log/
mount /dev/bblab/varps /var/lib/postgresql
mount /dev/bblab/home /home
service postgresql start
Все можно работать. После выключения компьютера, например по кнопке, враги ничего на найдут, им даже будет очень трудно понять, что там возможно что-то есть.
PS.
Конечно можно обойтись без внешнего человека и стать самому слабым звеном. Для этого можно использовать следующий скрипт
#! /bin/sh
cryptsetup luksOpen /dev/sda3 bblab1
service postgresql stop
sync
sleep 5
swapon /dev/bblab/swap
mount /dev/bblab/tmp /tmp
chmod ugo+rwxt /tmp
mount /dev/bblab/varlg /var/log/
mount /dev/bblab/varps /var/lib/postgresql
mount /dev/bblab/home /home
service postgresql start
Ссылки
Linux Volume Manager(LVM)
Bog BOS: Шифрование блочного устройства в Linux (dm-crypt, LUKS, cryptsetup)
Автор: bya