Создание шифрованного пула ZFS в FreeBSD
FreeBSD | Комментировать запись
ZFS – это файловая система и мощный менеджер томов, который поддерживает сжатие и может предотвратить повреждение данных. В сочетании с блоком хранения ZFS предоставляет надёжное средство для хранения данных, которое легко настроить и расширить.
Данное руководство поможет настроить шифрованный том блока хранения для ZFS в FreeBSD.
Требования
- Сервер FreeBSD с поддержкой блочных хранилищ, 4GB RAM минимум. ZFS требует много памяти. Больше о FreeBSD можно узнать в специальном разделе Информатория.
- Дополнительный том (100 GB).
Примечание: В руководстве используется ещё один том в 100 GB, чтобы продемонстрировать добавление томов в пул. Однако такой том иметь необязательно, вы можете добавить его позже.
1: Разделение тома
Несмотря на то, что в руководстве том предназначен для одной файловой системы, том нужно разделить. Это позволяет применять метки созданных разделов.
Подключитесь к серверу:
ssh freebsd@your_server_ip
С помощью команды dmesg убедитесь, что том смонтирован. Локальный SSD-накопитель на сервере FreeBSD отображается как vtbd0, а дополнительные тома – как da.
С помощью grep отфильтруйте результаты команды dmesg, чтобы найти da0 – дополнительный том.
Читайте также: Использование Grep и регулярных выражений для поиска текстовых шаблонов в Linux.
dmesg | grep ^da0
Команда выведет:
da0 at vtscsi0 bus 0 scbus2 target 0 lun 1
da0: <Volume 1.5.> Fixed Direct Access SPC-3 SCSI device
da0: 300.000MB/s transfers
da0: Command Queueing enabled
da0: 102400MB (209715200 512 byte sectors: 255H 63S/T 13054C)
Убедившись, что том доступен, создайте раздел формата GPT.
sudo gpart create -s gpt da0
Затем создайте единый раздел для ZFS.
sudo gpart add -t freebsd-zfs -l volume-nyc1-01 da0
Флаг –t задаёт тип раздела, а –l позволяет выбрать метку для раздела. Вы можете выбрать любую метку; в этом руководстве метка совпадает с именем тома.
Теперь нужно защитить данные.
2: Настройка шифрования
Шифрование данных имеет множество преимуществ. Включите драйвер aesni, чтобы получить доступ к шифрованию AES.
sudo kldload aesni
Теперь можно настроить шифрование geli. Запустите команду geli, указав длину ключа и раздел, который нужно зашифровать.
sudo geli init -l 256 /dev/gpt/volume-nyc1-01
Флаг –l устанавливает длину ключа (для алгоритмов AES-XTS нужен 128 или 256-битный ключ). Сослаться на раздел можно с помощью установленной ранее метки.
Команда предложит ввести пароль:
Enter new passphrase:
Reenter new passphrase:
Metadata backup can be found in /var/backups/gpt_volume-nyc1-01.eli and
can be restored with the following command:
# geli restore /var/backups/gpt_volume-nyc1-01.eli /dev/gpt/volume-nyc1-01
Этот пароль нужно вводит после каждой перезагрузки сервера, чтобы снова подключить дополнительный том. Это небольшое неудобство обеспечивает более высокий уровень безопасности.
Подключите зашифрованный раздел:
sudo geli attach /dev/gpt/volume-nyc1-01
Будет запрошен только что выбранный пароль.
Enter passphrase:
Теперь у вас есть доступ к /dev/gpt/volume-nyc1-01.eli, шифрованной версии раздела. Данные, записанные на это блочное устройство, будут зашифрованы. Этот путь нужно добавить в пул хранения данных.
3: Создание пула ZFS
Пул хранения ZFS (или zpool) – это коллекция томов. Создать такой том очень просто.
Чтобы создать новый zpool, используйте команду zpool create. Укажите имя пула и том, который нужно в него добавить.
sudo zpool create tank /dev/gpt/volume-nyc1-01.eli
Примечание: В данном руководстве пул называется tank, но вы можете выбрать любое другое имя.
Поскольку том подключается по сети, доступ к файлам будет медленнее, чем на локальном SSD-устройстве. Чтобы минимизировать количество данных, записываемых на устройство по сети, нужно включить сжатие в файловой системе ZFS.
Примечание: Это совсем не обязательно. Настройки сжатия индивидуальны для каждой файловой системы.
Используйте алгоритм LZ4, который оптимизирует скорость. О других алгоритмах можно прочитать в мануале zfs.
sudo zfs set compression=lz4 tank
Теперь можно проверить пул. Чтобы получить подробную информацию о пуле, введите:
zpool list
NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
tank 99.5G 98.5K 99.5G - 0% 0% 1.00x ONLINE -
Из-за разделов и форматирования общий размер пула немного меньше, чем общий размер тома.
Чтобы просмотреть файловую систему ZFS, введите:
zfs list
NAME USED AVAIL REFER MOUNTPOINT
tank 61K 96.4G 19K /tank
Также можно использовать команду df:
df -h
Filesystem Size Used Avail Capacity Mounted on
/dev/gpt/rootfs 57G 2.2G 50G 4% /
devfs 1.0K 1.0K 0B 100% /dev
tank 96G 19K 96G 0% /tank
Используйте эти команды, чтобы отслеживать состояние системы.
Теперь нужно убедиться, что модуль ядра ZFS запускается вместе с операционной системой. Модуль был загружен автоматически с помощью команды zpool create. Теперь нужно обеспечить его автоматический запуск.
Для этого откройте файл /etc/rc.conf:
sudo vi /etc/rc.conf
Добавьте эту строку:
zfs_enable="YES"
Сохраните и закройте файл.
Одним из преимуществ файловой системы ZFS является возможность добавлять больше места для хранения в пул по мере увеличения потребностей.
4: Добавление новых томов в пул (опционально)
Пул можно расширить при помощи дополнительных томов. ZFS позволяет просто добавить в пул новое устройство.
Подключите к серверу ещё один том в 100 GB.
Откройте терминал и убедитесь, что новый том существует (он называется da1):
dmesg | grep ^da1
da1 at vtscsi0 bus 0 scbus2 target 0 lun 2
da1: <Volume 1.5.> Fixed Direct Access SPC-3 SCSI device
da1: 300.000MB/s transfers
da1: Command Queueing enabled
da1: 102400MB (209715200 512 byte sectors: 255H 63S/T 13054C)
Разделите и выберите метку для тома (как показано в главе 1 данного руководства).
sudo gpart create -s gpt da1
sudo gpart add -t freebsd-zfs -l volume-nyc1-02 da1
Включите шифрование тома:
sudo geli init -l 256 /dev/gpt/volume-nyc1-02
При этом будет запрошен пароль:
Enter new passphrase:
Reenter new passphrase:
Metadata backup can be found in /var/backups/gpt_volume-nyc1-02.eli and
can be restored with the following command:
# geli restore /var/backups/gpt_volume-nyc1-02.eli /dev/gpt/volume-nyc1-02
Подключите новый том и добавьте его в пул ZFS, указав пароль:
sudo geli attach /dev/gpt/volume-nyc1-02
sudo zpool add tank /dev/gpt/volume-nyc1-02.eli
Файловая система автоматически расширится до размера пула, что можно проверить с помощью следующей команды:
zpool list
NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
tank 199G 140K 199G - 0% 0% 1.00x ONLINE -
Снова введите:
zfs list
В выводе вы увидите том tank и соответствующий объём пространства:
NAME USED AVAIL REFER MOUNTPOINT
tank 62.5K 193G 19K /tank
Примечание: Чтобы добавить новый том в пул, просто повторите инструкции данного раздела.
5: Подключение томов после перезагрузки сервера
При перезагрузке сервера зашифрованные разделы отключаются. Вам придется добавить их вручную. Чтобы научиться это делать, перезапустите сервер.
sudo shutdown -r now
ssh freebsd@your_server_ip
Чтобы добавить шифрованные тома, введите:
sudo geli attach /dev/gpt/volume-nyc1-01
sudo geli attach /dev/gpt/volume-nyc1-02
При этом будет запрошен фразовый пароль, который вы выбрали во время инициализации раздела.
Чтобы убедиться, что всё работает должным образом, введите:
sudo zpool list
После подключения томов ZFS автоматически видит пул и монтирует файловую систему.
NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
tank 199G 95.5K 199G - 0% 0% 1.00x ONLINE -
Конечно, шифрование немного усложняет процесс монтирования и перезагрузку, однако это обеспечивает высокий уровень безопасности. Никто не сможет прикрепить тома и просмотреть их содержимое без пароля.
Заключение
Как видите, ZFS позволяет быстро создавать масштабируемые шифрованные файловые системы для хранения конфиденциальных данных. Чтобы узнать больше о ZFS в FreeBSD, перейдите по этой ссылке.
Tags: FreeBSD, ZFS, zpool