среда, 23 февраля 2011 г.

Настройка Jail в FreeBSD с помощью ezjail


Зададимся вопросом - как, используя сервер на базе FreeBSD, получить
   несколько независимых окружений, в народе называемых jail? Например,
   как использовать одну из jail для почтового сервера, а вторую для
   web-сервера, при этом каждая jail должна иметь собственный IP-адрес?
    Каждая jail на FreeBSD имеет собственные файлы, процессы и учетные
   записи. Находясь внутри, практически невозможно отличить jail от
   реальной системы. Самым простым способом определения, создания и
   модифицирования jail является использование среды ezjail.

    Внимание! Сетевые демоны, перед использованием jail, должны быть
   сконфигурированы на использование адреса 127.0.0.1 или на работу с
   адресом интерфейса. По крайней мере, это необходимо сделать со службами
   sshd и syslogd.

    Вводные данные

     * server.nixcraft.net.in : FreeBSD host server running v7.2 with
       202.54.1.2


     * smtpd.nixcraft.net.in : Mail server jail with 202.54.1.3


     * httpd.nixcraft.net.in : Web server jail with 202.54.1.4


    Шаг 1: Обновляем корневую систему

    Убедитесь в том, что ваша система достаточно актуальна. Руководство по
   обновлению системы вы можете найти здесь.

    Шаг 2: Устанавливаем ezjail

    Для установки ezjail выполните нижеприведенные команды. Таким образом,
   мы получим два скрипта, позволяющие нам более просто управлять
   жизненным циклом jail.

        # cd /usr/ports/sysutils/ezjail
        # make install clean


    Расположение файлов ezjail по умолчанию:

    1. /usr/jails/ каталог размещения шаблонов jail.

    2. /usr/jails/flavours/ настройка каждой jail может быть выполнена
       через flavours. Служит для того чтобы, например, добавить значение
       по умолчанию в файл /etc/resolv.conf или обновить существующий файл
       /etc/make.conf

    3. /usr/jails/basejail/ базовая система jail, которая монтируется в
       режиме "read only" и является одинаковой для всех jail, что
       позволяет сэкономить место на жестком диске.

    4. /usr/local/etc/rc.d/ezjail.sh скрипты Stop/Start/Restart

    5. /usr/local/etc/ezjail.conf конфигурационный файл ezjail, который
       содержит настройки для rc скрипта. Таже данный файл может быть
       просмотрен командой ezjail-admin.

    6. /usr/local/etc/ezjail/ все файлы конфигурации ваших jail хранятся
       здесь

    Шаг 3: Создаем базовый шаблон jail

    Для создания или обновления окружения ezjail (aka basejail) из
   исходных текстов, выполните следующую команду:

        # ezjail-admin update -p -i


    Где:

     * -p : Provide ports for jail.
     * -i : не запускать "make world".


    Если у вас нет /usr/src и вы никогда не запускали make world, вы
   можете установить шаблон с ftp сервера, используя утилиту ezjail-admin:

        # ezjail-admin install


    Шаг 4: Создаем SMTPD Mail Server Jail

    Для создания jail smtpd.nixcraft.net.in с адресом 202.54.1.3,
   располагающейся в каталоге /jails/smtpd.nixcraft.net.in, выполните
   следующую команду:

        # ezjail-admin create -r /jails/smtpd.nixcraft.net.in smtpd.nixcraft.net.in 202.54.1.3


    Обновление файла конфигурации SMTPD Jail
    По умолчанию, файл конфигурации расположен в
   /usr/local/etc/ezjail/smtpd_nixcraft_net_in. Откройте его и добавьте
   следующие строки:

        export jail_smtpd_nixcraft_net_in_hostname="smtpd.nixcraft.net.in"
        export jail_smtpd_nixcraft_net_in_ip="202.54.1.3,10.21.51.12"


    Шаг 5: Запускаем сервис jail

    Добавим строку запуска в файл /etc/rc.conf:

        # echo 'ezjail_enable="YES"' >> /etc/rc.conf


    После чего можем запустить службу:

        # /usr/local/etc/rc.d/ezjail.sh start


    Для управления конкретным jail можно воспользоваться следующими
   командами:

        # /usr/local/etc/rc.d/ezjail.sh {start/stop/restart} jail-name
        # /usr/local/etc/rc.d/ezjail.sh start httpd
        # /usr/local/etc/rc.d/ezjail.sh stop smtpd.nixcraft.net.in


    Просмотреть список jail можно командой:

        # jls


    Или, для получения дополнительной информации, воспользуйтесь
   синтаксисом:

        # jls -v


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

        # jexec jid csh


    При этом jid можно получить из вывода команды jls. В данном примере мы
   подключаемся к jail smtpd.nixcraft.net.in с jid # 2:

        # jexec 2 csh


    После подключения к jail мы можем устанавливать необходимое нам ПО,
   например bash:

        # pkg_add -r -v bash


    Или сервер Apache 2.2:

        # cd /usr/ports/www/apache22
        # make install clean


    Для того, чтобы подключаться к jail удаленно, необходимо внести
   следующие изменения в ее файл /etc/rc.conf:

        # echo 'sshd_enable="YES"' >> /etc/rc.conf


    Затем откроем файл sshd_config и укажем в нем использовать только IP
   адрес, назначенный данной jail. После чего запускаем сервер OpenSSH:

        # /etc/rc.d/sshd start
        # sockstat -4


    Обновить FreeBSD Jail можно так:

        # /usr/local/etc/rc.d/ezjail.sh stop
        # ezjail-admin update -p -i
        # /usr/local/etc/rc.d/ezjail.sh start


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

        # ezjail-admin update -P


    Журнальные файлы jail по умолчанию хранятся в каталоге /var/log. Для
   того чтобы, к примеру, просмотреть логи jail smtpd.nixcraft.net.in,
   воспользуйтесь командой:

        # tail -f jail_smtpd_nixcraft_net_in_console.log
        # grep 'error' jail_smtpd_nixcraft_net_in_console.log


    Для добавления httpd jail выполните следующие действия:

        # ezjail-admin create -r /jails/httpd.nixcraft.net.in httpd.nixcraft.net.in 202.54.1.4
        # vi /usr/local/etc/ezjail/httpd_nixcraft_net_in
        # /usr/local/etc/rc.d/ezjail.sh start httpd.nixcraft.net.in
        # jls -v
        # jexec id csh


    Для резервного копированя jail рекомендую воспользоваться командами
   tar, rsync и dump.

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

        # tar -zcvf /dev/sa0 /jails/smtpd.nixcraft.net.in


    Для сохранения всех jail, расположенных в каталоге /jails используйте:

        # /sbin/dump -0uLf /dev/sa0 /jails/


    А для инкрементных обновлений полученного архива:

        # /sbin/dump -1uLf /dev/sa0 /jails/


   Используемая литература:
   Раздел FreeBSD Jail FreeBSD handbook.
   man jexec, jls, jail, dump, restore

4 комментария: