Строим jail во FreeBSD

Jail – встроенная система виртуализации во FreeBSD, с ее помощью с успехом можно делать виртуальные сервера FreeBSD, не применяя програмное обеспечение сторонних производителей.

Начнем создание виртуального сервера с установки IP адреса, на котором будет располагаться jail. Первый адрес который уже есть у сервера на интерфейсе em0 89.252.34.107, добавим второй 89.252.34.110:

ifconfig em0 alias 89.252.34.110/32

И пропишем его в /etc/rc.conf, для того что бы он появился при перезагрузке:

ifconfig_em0_alias0="inet 89.252.34.110/32"

Теперь можно перейти к созданию jail. Физически jail будет находится в /home/jail.

cd /usr/src

mkdir -p /home/jail

make world DESTDIR=/home/jail

make distribution DESTDIR=/home/jail

mount -t devfs devfs /home/jail/dev

Пропишем выполненый нами mount в fstab хост машины:

devfs /home/jail/dev devfs rw 0 0

Теперь необходимо подготовить сервисы Jail и хост машины к запуску jaila, то есть необходимо что бы sshd у хост машины отвечал только на ее ip адресах, то же самое касается inetd и других сервисов которые должны работать и в jail и в хост машине независимо.

Пропишем на хост машине привязку ssh к ее ip адресам, к примеру если ее адреса это 89.252.34.107 и 192.168.0.10, то в настройках sshd(/etc/ssh/sshd_config) нужно указать такую строку:

ListenAddress 89.252.34.107

ListenAddress 192.168.0.15

После этого перезапустим sshd:

/etc/rc.d/sshd restart

Можно проверить проверить правильность настройки так:

sockstat -l |grep sshd

вы должны увидеть примерно такое:

root sshd 74047 4 tcp4 192.168.0.10:22 *:*

root sshd 74047 5 tcp4 89.252.34.107:22 *:*

Все настроено правильно. И точно так же можно сделать для inetd, для этого в /etc/rc.conf указать такие флаги запуска inetd:

inetd_flags="-wW -a 192.168.0.10 -a 89.252.34.107"

Если вы пользуетесь sendmail, то тут все будет немного сложнее, необходимо перейти в каталог /etc/mail и изменить файл имя которого совпадает с хостнеймом вашего сервера(у меня это sh.hilik.org.ua) и расширение mc, то есть у меня этот файл называется sh.hilik.org.ua.mc и в нем найти строку:

DAEMON_OPTIONS(`Name=IPv4, Family=inet')

и добавить вместо нее несколько модифицированные строки для каждого адреса на котором sendmail должен слушать соединения, 127.0.0.1 нужно добавлять обязательно:

DAEMON_OPTIONS(`Name=IPv4, Addr=192.168.0.10, Family=inet')

DAEMON_OPTIONS(`Name=IPv4, Addr=89.25.34.107, Family=inet')

DAEMON_OPTIONS(`Name=IPv4, Addr=127.0.0.1, Family=inet')

И теперь можно пересобрать конфигурацию сендмайл(все команды надо выполнять в /etc/mail):

make

make install

make restart

Теперь перейдем в /home/jail/etc/ и пропишем в /home/jail/etc/rc.conf запуск sshd и отключим запуск sendmail такими строками:

sshd_enable="YES"

sendmail_enable="NONE"

Теперь вернемся к настройке хост машине под jail, пропишем запуск jail в /etc/rc.conf, назовем наш jail first:

#Разрешаем запуск jail

jail_enable="YES"

#Тут перечисляются через пробел все jail которые должны #запускаться

jail_list="first"

#Настройки нашего jail, здесь first - имя jailа

#Устанавливаем место где находится корень

jail_first_rootdir="/home/jail"

#Хостнейм для jail

jail_first_hostname="jail.hilik.org.ua"

#IP адрес на котором будет находится наш jail

jail_first_ip="89.252.34.110"

После внесения этих настроек, можно запускать jail:

/etc/rc.d/jail start first

Проверяем как он запустился:

jls

Мы увидим что то типа такого:

JID IP Address Hostname Path

2 89.252.34.110 jail.hilik.org.ua /home/jail

Теперь имея JID, мы можем выполнять(от рута) с хост машины команды в jail используя jexec.

Добавим пользователя, который сможет по ssh соединится с jail и администрировать систему:

jexec 2 adduser

2 – это JID джайла.

Дальше добавление происходит как будто вы это делаете на локальной машине, не забудте только добавить пользователя в группу wheel, что бы он мог suпнуться.

Теперь нужно подключить дерево портов в jail, воспользуемся для этого файловой системой nullfs, предварительно создав директорию для портов:

mkdir /home/jail/usr/ports

И примонтируем к этой директории каталог портов с хост машины:

mount_nullfs /usr/ports/ /home/jail/usr/ports/

На этом основная настройка jail окончена, можно заходить по ssh и устанавливать и настраивать весь софт который вам нужен в jail.

http://www.hilik.org.ua/строим-jail/#more-1091

Обновлено: 12.03.2015