FreeBSD, Iocage · 7 min read · Dec 13, 2025

Как настроить Jail с Iocage на FreeBSD

Jail — это термин для виртуализации на уровне ОС в FreeBSD. Он был представлен Пулом-Хеннингом Кампом в 1999 году и принят FreeBSD с версии 4.x.

Jail позволяет системному администратору создать изолированную и независимую мини-систему или ‘jail’ внутри системы FreeBSD. ‘Jail’ имеет свою корневую систему и конфигурацию, и это полезно, если вы хотите развернуть приложение в изолированной среде.

Iocage — это менеджер jail для FreeBSD, написанный на Python. Он прост в использовании и имеет легкий синтаксис команд. Менеджер jail Iocage предназначен для набора данных ZFS внутри jail и позволяет создавать jail на основе виртуальных сетевых стеков ‘VNET’ и/или jail на основе ‘Shared IP’. С помощью Iocage вы можете создать шаблон jail, базовый jail и обычный jail.

Этот учебник покажет вам, как настроить и сконфигурировать jail FreeBSD с использованием менеджера Iocage. Мы установим Iocage на FreeBSD, настроим новый jail с использованием общего IP, настроим pf брандмауэр, а затем установим веб-сервер nginx внутри jail для тестирования.

Предварительные требования

Для этого руководства вам потребуется установить и настроить менеджер jail Iocage на системе FreeBSD, установленной на ZFS (Z File System). И убедитесь, что у вас включен pf Firewall на вашей системе FreeBSD.

Ниже приведено руководство по установке FreeBSD на ZFS и конфигурации pf брандмауэра.

Как установить FreeBSD 12.0 на ZFS
Как настроить pf Firewall на FreeBSD

Что мы будем делать:

  1. Установить менеджер jail Iocage
  2. Скачать релиз FreeBSD
  3. Настроить общий IP и pf брандмауэр
  4. Создать новый jail с Iocage
  5. Тестирование

Шаг 1 - Установить Iocage на FreeBSD

Сначала мы установим и настроим менеджер jail Iocage на системе FreeBSD. Iocage написан на Python и доступен в репозитории бинарных пакетов FreeBSD.

Установите Iocage на систему FreeBSD, используя команду pkg ниже.

pkg install py36-iocage

Введите ‘y’, чтобы принять установку пакета Iocage python, и установка начнется.

После завершения установки проверьте доступные пулы ZFS на системе, используя команду zpool ниже.

zpool list

Теперь выберите пул ZFS для установки Iocage. Для этого руководства мы будем использовать пул ZFS по умолчанию для установленной FreeBSD, называемый ‘zroot’.

Активируйте пул ‘zroot’ для использования Iocage, используя команду ниже.

iocage activate zroot

Теперь установка Iocage на FreeBSD 12.0 завершена, и вы можете использовать командную строку iocage для создания и управления jail FreeBSD.

Кроме того, вы можете включить jail при загрузке системы, добавив службу iocage в файл ‘/etc/rc.conf’, используя команду sysrc ниже.

sysrc iocage_enable=yes

Шаг 2 - Скачать релиз FreeBSD

Чтобы создать новый jail, вам нужно будет скачать релиз FreeBSD. И вы можете создать новый jail, который будет другой версией вашей версии FreeBSD хоста.

Проверьте доступные версии релиза, используя команду iocage ниже.

iocage fetch

Теперь вы получите разные версии релиза. Выберите нужную версию и введите номер. Выберите номер ‘2’, чтобы скачать последнюю версию релиза.

Подождите, пока изображение релиза FreeBSD будет загружено.

Если вы хотите скачать другое изображение, вы можете использовать следующую команду.

iocage fetch 11.3-RELEASE

В результате изображение релиза FreeBSD для jail было загружено.

Шаг 3 - Настроить общий IP и pf брандмауэр

После загрузки исходных изображений для jail мы настроим сетевое соединение и pf брандмауэр на системе. Мы создадим новый сетевой интерфейс, называемый ‘bridge0’, с сетевым IP-адресом ‘10.8.8.1/24’, который будет использоваться jail.

Добавьте новую конфигурацию в файл ‘/etc/rc.conf’, выполнив следующую команду.

sysrc cloned_interfaces+="bridge0"  
sysrc ifconfig_bridge0="10.8.8.1/24"

Создайте новый интерфейс ‘bridge0’ с сетевым IP-адресом ‘10.8.8.1/24’.

ifconfig bridge0 create  
ifconfig bridge0 10.8.8.1/24 up

Теперь, когда интерфейс ‘bridge0’ создан, проверьте его, используя следующую команду.

ifconfig bridge0

И вы получите результат, как ниже.

Далее мы настроим pf брандмауэр и добавим новую конфигурацию для окружения jail. Мы используем простую конфигурацию pf брандмауэра в этом руководстве.

Как настроить pf брандмауэр на FreeBSD 12.0

Перейдите в директорию ‘/usr/local/etc’ и отредактируйте файл конфигурации ‘pf.conf’.

cd /usr/local/etc/  
vim pf.conf

Добавьте внутренний сетевой интерфейс ‘bridge0’ и его IP-адрес как переменные ‘int_if’ и ‘localnet’.

# Внутренний интерфейс  
int_if = "bridge0"  
localnet = $int_if:network

Теперь определите IP-адрес хоста jail и порты, которые будут перенаправлены на jail. Мы перенаправим HTTP и HTTPS соединения на внешнем интерфейсе системы на IP-адрес хоста jail ‘10.8.8.5’.

# Перенаправление http и https на Jail '10.8.8.5'  
ports_to_forward="{ 80, 443 }"  
forward_host="10.8.8.5"

Включите nat на внешнем интерфейсе ‘ext_if’ для переменной jail ‘localnet’, а затем включите перенаправление портов из переменной ‘ports_to_forward’ на хост ‘forward_host’.

# nat jail в интернет и интернет в jail (только http и https)  
nat on $ext_if inet from $localnet to any -> ($ext_if)  
rdr on $ext_if proto tcp from any to any port $ports_to_forward -> $forward_host

Теперь пропустите все соединения с интерфейса ‘bridge0’ и пропустите входящие соединения на внешнем интерфейсе на HTTP и HTTPS ‘ports_to_forward’.

pass from { self, $localnet } to any keep state  
pass in on $ext_if proto {udp, tcp} from any to any port $ports_to_forward keep state

Сохраните и закройте.

Теперь протестируйте конфигурацию pf брандмауэра и убедитесь, что ошибок нет, затем перезагрузите службу pf.

service pf check  
service pf reload

После этого проверьте все правила на pf брандмауэре, используя следующую команду.

pfctl -s rules

И вы получите результат, как ниже.

Кроме того, вы можете проверить статус nat на pf брандмауэре.

pfctl -v -s nat

В результате новый интерфейс ‘bridge0’ был создан, и pf брандмауэр был настроен. И мы готовы создать новый первый jail.

Ниже приведена полная конфигурация pf брандмауэра.

cat /usr/local/etc/pf.conf
# Определить внешний интерфейс и IP-адрес
ext_if="vtnet0"
ext_ip="198.13.39.207"

# Определить TCP и UDP сервисы
ext_tcp_ports="{ ssh, smtp, smtps, imaps, http, https, domain }"
ext_udp_ports="{ domain, ntp }"

# Внутренний интерфейс
int_if = "bridge0"
localnet = $int_if:network

# Перенаправление http и https на Jail '10.8.8.5'
ports_to_forward="{ 80, 443 }"
forward_host="10.8.8.5"

# Пропустить localhost
set skip on lo0

# Лог интерфейса
set loginterface $ext_if

# nat jail в интернет и интернет в jail (только http и https)
nat on $ext_if inet from $localnet to any -> ($ext_if)
rdr on $ext_if proto tcp from any to any port $ports_to_forward -> $forward_host


# Политика по умолчанию
block in all
pass out all keep state

# Разрешить Ping
pass inet proto icmp icmp-type echoreq

pass from { self, $localnet } to any keep state
pass in on $ext_if proto {udp, tcp} from any to any port $ports_to_forward keep state

# Разрешить сервисы
pass in proto tcp from any to any port $ext_tcp_ports
pass in proto tcp from any to any port $ext_udp_ports

# Лог доступа для ssh и http
pass log quick proto tcp from any to any port { ssh,http }

Шаг 4 - Создать новый jail с использованием Iocage

После настройки сети и pf брандмауэра на системе FreeBSD мы готовы создать новый jail с использованием iocage.

Создайте новый jail под названием ‘jail01’ с релизом FreeBSD ‘12.0-RELEASE’, используя команду iocage ниже.

iocage create -n jail01 -r 12.0-RELEASE

Теперь добавьте IP-адрес и шлюз по умолчанию для jail. Мы дадим ‘jail01’ IP-адрес ‘10.8.8.5’, а шлюз по умолчанию — это IP-адрес хоста ‘bridge0’ ‘10.8.8.1’.

iocage set ip4_addr="bridge0|10.8.8.5" jail01  
iocage set defaultrouter="10.8.8.1" jail01

Включите jail для запуска при загрузке.

iocage set boot=on jail01

Теперь проверьте список jail.

iocage list

И вы получите ‘jail01’ с IP-адресом ‘10.8.8.5’ и основанный на релизе FreeBSD ‘12.0’.

Далее запустите ‘jail01’, используя команду ниже.

iocage start jail01

После того как jail запущен, получите доступ к jail, используя следующую команду.

iocage console jail01

Вы получите новую оболочку внутри jail01, как показано ниже.

Внутри jail проверьте IP-адрес интерфейса ‘bridge0’ на ‘jail01’.

ifconfig bridge0

И вы получите, что интерфейс ‘bridge0’ имеет IP-адрес ‘10.8.8.5’, как и было настроено.

В результате новый jail под названием ‘jail01’ был создан.

Шаг 5 - Тестирование

На этом этапе мы протестируем ‘jail01’, установив на нем веб-сервер Nginx, а затем попробуем получить доступ к Nginx из внешней сети, и соединение будет перенаправлено на ‘jail01’.

Сначала обновите бинарные пакеты в jail, используя команду pkg ниже.

pkg update

После этого установите веб-сервер nginx внутри jail, используя следующую команду pkg.

pkg install nginx

После завершения установки добавьте службу nginx в автозагрузку системы и запустите службу nginx.

sysrc nginx_enable=yes  
service nginx start

Теперь проверьте список открытых портов на ‘jail01’.

sockstat -l4

И вы получите, что служба Nginx работает на HTTP порту ‘80’.

Далее мы изменим страницу по умолчанию index.html на ‘jail01’.

Перейдите в директорию ‘/usr/loca/www/‘ и отредактируйте файл ‘index.html’.

cd /usr/local/www/  
edit nginx-dist/index.html

Внесите некоторые изменения и выйдите.

cat nginx-dist/index.html

Теперь получите доступ к внешнему IP-адресу сервера из вашего веб-браузера.

http://198.xx.xx.207/

И вы получите страницу index.html nginx внутри ‘jail01’.

В результате ‘jail01’ работает и на нем установлен Nginx. Все HTTP и HTTPS соединения к серверу будут перенаправлены на ‘jail01’.

Ссылки

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.