Шифруем разделы, виртуальные диски и Swap в FreeBSD
Для шифрования мы будем использовать класс GEOM-ELI, который появился во FreeBSD, начиная с версии 6.0.
GEOM-ELI поддерживает три алгоритма шифрования: AES, 3DES, Blowfish.
И алгоритмы хэширования:
HMAC/MD5
HMAC/SHA1
HMAC/RIPEMD160
HMAC/SHA256
HMAC/SHA384
HMAC/SHA512
Внимание! Некоторые важные команды и параметры
geli init [параметры] - шифрование раздела.
geli attach [параметры] - расшифрование (авторизация) раздела.
Параметр -K означает использование ключа на отдельном файле.
Используется только с командой geli init.
Использование: -K /path/to/key
Параметр -k так же означает использование ключа на отдельном файле, но используется только при расшифровании (авторизации) зашифрованного раздела с командой geli attach.
Использование: -k /path/to/key
Параметр -P используется только с командой geli init и означает не использовать пароль.
Параметр -p используется только с командой geli attach.
Означает не использовать пароль при расшифровании раздела.
Параметр -e определяет алгоритм шифрования.
Возможные варианты: blowfish, eas, 3des.
Параметр -a определяет алгоритм хэширования.
Возможные варианты: hmac/md5, hmac/sha1, hmac/ripemd160, hmac/sha256, hmac/sha384, hmac/sha512.
Параметр -l длина ключа.
По умолчанию используется 128 для AES, 128 Blowfish и 192 3DES.
Для просмотра статуса и списка используемых geli устройств используйте команды:
geli status
и
geli list
Добавляем поддержку GEOM eli
Ядро необходимо скомпилировать со следующими опциями:
options GEOM_ELI
device crypto
Или добавить модуль в автозагрузку:
echo 'geom_eli_load="YES"' >> /boot/loader.conf
Загружаем модуль без перезагрузки системы:
kldload geom_eli
1. Шифрование раздела
Шифрование раздела производится командой:
geli init [параметры] имя_устройства
Зашифруем и примонтируем USB флэшку /dev/da2
dd if=/dev/random of=/root/da2.key bs=64 count=1 # генерируем ключ
geli init -s 4096 -K /root/da2.key /dev/da2 # зашифровываем
geli attach -k /root/da2.key /dev/da2 # авторизируем зашифрованный диск. После выполнения данной команды будет создан /dev/da2.eli
dd if=/dev/random of=/dev/da2.eli bs=1m # перезатираем содержимое /dev/da2 случайными данными. Опционально. Для параноиков.
newfs /dev/da2.eli # создаем файловую систему
mount /dev/da2.eli /mnt # монтируем
Размонтируем и отсоединим /dev/da2.
umount /mnt
geli detach /dev/da2.eli
При выключении система автоматически размонтирует и отсоединит устройства.
grep geli /etc/rc.conf
geli_devices="da2"
geli_da2_flags="-k /root/da2.key"
cat /etc/fstab | grep eli
/dev/da2.eli /home/private ufs rw 0 0
2. Шифрование виртуального диска паролем
dd if=/dev/zero of=/cryptedfile bs=1M count=1000 # Создаем 1Гб файл
mdconfig -at vnode -f /cryptedfile
geli init /dev/md0 # Зашифровываем паролем указанный виртуальный диск
geli attach /dev/md0 # Присоединяем виртуальный диск
newfs -U -m 0 /dev/md0.eli # Создаем файловую систему
mount /dev/md0.eli /mnt # Монтируем
Отсоединяем диск.
umount /dev/md0.eli
geli detach /dev/md0.eli
mdconfig -d -u 0
Теперь, когда нам необходимо примонтировать виртуальный диск:
mdconfig -at vnode -f /cryptedfile
geli attach /dev/md0
mount /dev/md0.eli /mnt
Примеры:
Шифрование ключем и паролем
генерируем случайный ключ:
dd if=/dev/random of=/root/md0.key bs=64 count=1
зашифровываем:
geli init -s 4096 -K /root/md0.key /dev/md0
теперь при подсоединении посредством geli attach необходимо указывать ключ -k путем к ключу:
geli attach -k /root/md0.key /dev/md0
Шифрование ключем
генерируем случайный ключ:
dd if=/dev/random of=/root/md0.key bs=64 count=1
зашифровываем:
geli init -P -s 4096 -K /root/md0.key /dev/md0
теперь при подсоединении посредством geli attach необходимо указывать ключ -k путем к ключу и ключ -p:
geli attach -p -k /root/md0.key /dev/md0
3. Шифрование Swap
До настоящего момента раздел подкачки не был зашифрован. Таким образом, на нем могут содержаться пароли или какая-либо иная важная информация в открытом виде. Чтобы избавиться от этого, заполним раздел подкачки случайными данными:
dd if=/dev/random of=/dev/ad0s1b bs=1m
Находим в /etc/fstab строчку, отвечающую за раздел подкачки и добавляем к ней суффикс .eli
# Device Mountpoint FStype Options Dump Pass#
/dev/ad0s1b.eli none swap sw 0 0
По умолчанию geli зашифрует раздел алгоритмом AES с длиной ключа 256 бит. Для изменения добавьте /etc/rc.conf
geli_swap_flags="-a blowfish -l 128 -s 4096 -d"
Теперь во время загрузки системы будет генерироваться какой-то случайный ключ, которым будет производиться шифрование.
После перезагрузки наберите команду swapinfo. Если увидели что-то подобное:
Device 1K-blocks Used Avail Capacity
/dev/ad0s1b.eli 542720 0 542720 0%
Значит все ОК и ваш раздел подкачки успешно зашифрован.
The end

