Настройка системы и jails
Действия после установки ОС
После того, как вы установили FreeBSD, у вас есть полнофункциональная хост-система. С этого момента я буду предполагать, что вы установили её на ZFS.
В первую очередь, мы обновляем наши хост-системы до последних патчей безопасности. Это примерно так:
# freebsd-update fetch
# freebsd-update install
После этого лучше перезагрузиться, чтобы убедиться, что ядро было обновлено, если это необходимо. Поскольку это пустая и только что установленная система, мы обычно пока не используем загрузочные среды. Переустановка — это вопрос нескольких минут, и мы не делаем обновление версии.
Теперь: порты или пакеты? Мы обычно используем пакеты: хост-система будет простой и пустой, и нам не нужны индивидуальные параметры сборки. Так что, ежеквартальных пакетов нам более, чем достаточно.
Прежде всего, давайте установим систему управления пакетами pkg.
# pkg install
BastilleBSD
Теперь воспользуемся pkg для установки BastilleBSD:
# pkg install bastille
Первым шагом является настройка BastilleBSD. Всё, что мы обычно делаем— это устанавливаем параметры ZFS.
bastille_zfs_enable="YES"
bastille_zfs_pool="zroot/bastille"
и создайте набор данных:
# zfs create zroot/bastille
Таким образом, BastilleBSD создаст свой базовый набор данных в zroot/bastille/bastille.
Почему вложенный набор данных bastille/bastille? Поскольку мы иногда используем zroot/bastille для хранения некоторой информации о базовых jail, мы предпочитаем хранить вложенный набор данных. BastilleBSD создаст там свои наборы данных и смонтирует необходимые наборы данных в /usr/local/bastille, так что вы найдете всё там.
Завершим установку Bastille, как описано в официальной документации. Существует много методов: loopback, vnet с локальным интерфейсом, vnet с существующим мостом. Метод с использованием loopback является самым простым и портативным. Вообще говоря, мы склонны использовать его, поскольку с ним проще иметь дело, когда нам нужно выполнить аварийное восстановление на другом хосте. Подробнее об этом напишу в следующих постах.
Теперь давайте загрузим FreeBSD 13.0-RELEASE, чтобы Bastille загрузила необходимые файлы и создала свою базовую систему, а затем применила исправления безопасности.
# bastille bootstrap 13.0-RELEASE update
ПРИМЕЧАНИЕ. BastilleBSD поддерживает другие операционные системы для jail, а с недавних пор и некоторые дистрибутивы Linux.
Через некоторое время система будет готова к своему первому jail. Теперь мы обычно устанавливаем обратный прокси, чтобы открыть его для веб-трафика. Обратный прокси сможет подключаться к другим jail и перенаправлять трафик. Это хороший пример, так что давайте сделаем это:
# bastille create reverseproxy 13.0-RELEASE 192.168.0.1 bastille0
Итак, мы создаём jail с именем reverseproxy, версия FreeBSD: 13.0-RELEASE (версия jail должна быть такой же или старше, чем ОС хоста), IP-адрес jail и loopback интерфейс, чтобы использовать для определения этого IP для jail. Jail будет иметь набор данных (в jails/reverseproxy) с конфигурацией jail, конфигурацией перенаправления, fstab и т. д. и ещё один дочерний набор данных (jails/reverseproxy/root) с его корневой файловой системой. Jail может быть тонким или толстым: документация BastilleBSD хорошая, так что вы можете углубиться в неё.
На этом этапе bastille list -a должно показать jail, и он должен быть запущен. Теперь мы можем войти в этот jail:
# bastille console reverseproxy
и устанавливаем Nginx (и certbot, если необходимо):
# pkg install py38-certbot-nginx nginx
Настройте свой nginx (и certbot). Как вы могли догадаться, я не буду описывать это здесь.
Давайте удостоверимся, что Nginx будет запускаться при запуске jail, поэтому:
# service nginx enable
и давайте запустим его:
# service nginx start
Давайте вернемся к хосту и убедимся, что все подключения к портам хоста 80 (http) и 443 (https) будут перенаправлены в reverseproxy jail:
# bastille rdr reverseproxy tcp 80 80
# bastille rdr reverseproxy tcp 443 443
Вывод не должен отображаться, но вы можете проверить:
# bastille rdr ALL list
Поздравляю, вы запустили свой первый jail.
Вы можете создать все jail, какие захотите. Они будут создаваться и храниться в дочерних наборах данных zroot/bastille/bastille — это отлично подходит для целей резервного копирования, но я расскажу об этом подробнее в другой статье. Они также смогут обмениваться информацией, используя свои частные IP-адреса. Если вы использовали vnet, вам нужно будет выполнить более глубокую настройку сети (и вы можете использовать pf внутри jail!), если вы используете loopback устройство по умолчанию, вы будете совместно использовать сетевой стек хоста.
Продолжение следует...
Перевод с некоторыми авторскими заголовками. Автор оригинала: Stefano Marinelli.