Долой рутину расшифровки дисков, или использование сетевой разблокировки с помощью tang/clevis

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Все мы наверное сталкивались с такой занудной штукой как расшифровка дисков после ребута, или после краша сервера. Недавно столкнулся с замечательной фичей tang/clevis, и жизнь моя улучшилась.

Tang

По сути это сервер для разблокировки зашифрованных дисков. О том как он хранит ключи можно прочесть тут

Clevis

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

Оставлю для вас тут видео презентацию

Применение

На секунду может показаться, что технология бесполезна, так в чем смысл шифровать диски если какой-то сервер их автоматически расшифровывает. Но, если злоумышленник заполучив доступ к железке, или же к аккаунту вашего облачного хранилища, попытается сбить пароль рута, то в режиме восстановления он все-равно упрется в зашифрованный диск. В данной статье мы рассмотрим полное шифрование корня "/" . В качестве систем, я выбрал родную для tang/clevis CentOS 8 и Ubuntu20.04. Корень зашифрован при установки системы.

Настройка tang Ubuntu 20.04.01 LTS

Spoiler
apt install tang jose
systemctl enable tangd.socket
systemctl start tangd.socket

Тем самым мы запустим службу на 80 порту.

В одной из инструкций мне попалась информация, что для ubuntu 18.04 вам необходимо вручную сгенерировать ключи tang с помощью /usr/lib/x86_64-linux-gnu/tangd-keygen /var/db/tang перед запуском сервера. Не могу подтвердить или опровергнуть, так как не тестил на этой системе

Для определения отпечатка ключа подписи выполним

tang-show-keys
#вывод будет примерно таким:
thzZRnlNAO_Z_IQ_NqSt5P_uwiA

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

С настройкой сервера закончили.

Настройка clevis на клиентах 20.04.01 LTS

Spoiler

Устанавливаем пакеты

apt install clevis clevis-luks

После этого определяем зашифрованный том на нашей системе

lsblk

В моем случае это sda3, для того чтобы проверить, что мы делаем все правильно используем

cryptsetup luksDump /dev/sda3
Вывод будет примерно таким
Вывод будет примерно таким

Потом надо убедиться что что сервер tang нам отвечает

curl http://192.168.100.22/adv #подставляем ip adress tang

Вывод

Привязываем clevis к tang

clevis luks bind -d /dev/sda3 tang '{"url": "http://192.168.100.22"}'

Потом он спросит пароль от зашифрованного диска, соглашаемся и вводим

Если мы повторно запустим команду

cryptsetup luksDump /dev/sda3

То увидим что там добавился токен Clevis

Устанавливаем плагин clevis

apt install clevis-initramfs

И тут есть нюансик который проявляется, если у вас нет DHCP, так как конфиг сетевой карты находится у нас на зашифрованном томе, а нам необходимо чтобы сеть появилась раньше чем он загрузиться, нужно немного поправить initramfs.conf

Добавляем следующий параметр

IP=192.168.100.20::192.168.100.1:255.255.255.0:admin1:ens18
#IP=ip address::Gateway:Mask:hostname:interface

Повторно инициализируем initramfs

update-initramfs -u -k 'all'

Перезагружаем сервер и наблюдаем.

Если по какой-то причине вам необходимо будет отключить привязку tang, то воспользуйтесь этой командой

clevis luks unbind -d /dev/sda3 -s 1 
# -s это слот на котором находится clevis его можно посмотреть на предыдущем скриншоте

P.S. Также эта инструкция применима к Debian 10, но clevis-initramfs там находится в тестовой ветке. Так что на свой страх и риск можете добавить тестовые репы в : /etc/apt/sources.list

deb   http://deb.debian.org/debian testing main contrib non-free
deb-src http://deb.debian.org/debian testing main contrib non-free

Настройка clevis на клиентах CentOS 8.2

Spoiler

Устанавливаем пакеты

yum -y install clevis clevis-luks clevis-dracut

Дальше определяем зашифрованный том на нашей системе

lsblk

В моем случае это sda2, для того чтоб проверить, что мы делаем все правильно используем

cryptsetup luksDump /dev/sda2

Теперь надо убедиться что что сервер tang нам отвечает

curl http://192.168.100.22/adv #подставляем ip adress tang

Привязываем clevis к tang

clevis luks bind -d /dev/sda2 tang '{"url": "http://192.168.100.22"}'

После этого он спросит пароль от зашифрованного диска, соглашаемся и вводим

Если мы повторно запустим команду то можем увидеть что первый слот занят и активен

cryptsetup luksDump /dev/sda2

Далее запускаем dracut

dracut -f

Перезагружаемся, и все работает

Если по какой-то причине вам необходимо будет отключить привязку tang, то воспользуйтесь этой командой

clevis luks unbind -d /dev/sda2 -s 1 
# -s это слот на котором находится clevis его можно посмотреть на предыдущем скриншоте

Эксплуатирую данное чудо пока всего неделю, но уже очень доволен. Также система умеет работать не с полной шифровкой тома, а с отдельными дисками.

P.S. Хотел поделиться настройкой clevis на ubuntu, так как мало где описывается процесс. Также хотелось поделиться своими граблями на которые я наступил при настройке iniramfs. Спасибо за внимание!)

Источник: https://habr.com/ru/post/525706/


Интересные статьи

Интересные статьи

Нередко при работе с Bitrix24 REST API возникает необходимость быстро получить содержимое определенных полей всех элементов какого-то списка (например, лидов). Традиционн...
Очереди сообщений используются для выполнения: отложенных операций, взаимодействия сервисов между собой, «batch processing» и т.д. Для организации подобных очередей существуют специализирован...
Согласно отчёту Nilson о ситуации с банковскими картами и мобильными платежами, суммарный объём потерь в результате мошенничества ещё в 2016-м достиг $22,8 млрд, что на 4,4% больше, чем в 201...
Изображение: Unsplash Сегодня значительная часть всего контента в интернете распространяется с использованием CDN-сетей. При этом исследований того, как различные цензоры распространяют св...
Правительства многих стран так или иначе ограничивают доступ граждан к информации и сервисам в интернете. Борьба с подобной цензурой – важная и непростая задача. Обычно простые решения не мог...