Создание шифрованного пула ZFS в 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: , ,

Добавить комментарий