Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #92, АВГУСТ 2006 г.

Тюрьма для чертенка

Евгений Зобнин ака j1m

Хакер, номер #092, стр. 092-106-4


Теперь у нас есть свой собственный неприступный ssh-сервер, но он привязан к фиктивному IP-адресу. Чтобы разрешить клиентам подключаться к нему через публичный IP-адрес, необходимо настроить TCP-форвардинг, что легко сделать средствами OpenBSD'шного pf, который не так давно был перенесен в FreeBSD:

# vi /etc/pf.conf

ext_if="ed0"

host_ip="наш внешний IP-адрес"

jail_ip="192.168.3.3"

// Перенаправляем ssh-трафик на IP-адрес jail'а

rdr pass on $ext_if inet proto tcp from any to $host_ip \

port ssh -> $jail_host

// Блокируем все остальные входящие подключения со стороны внешнего интерфейса

block in on $ext_if all

Если теперь попробовать подключиться с удаленной машины к ssh-порту внешнего IP-адреса, то окажется, что все прекрасно работает. SSH-пакеты перенаправляются, порты блокируются. Это простейший пример настройки брандмауэра. В более серьезной конфигурации придется фильтровать еще и пакеты, приходящие с интерфейса обратной петли (через него хост-система общается с jail'ом).

Теперь добавим всего один штрих к почти цельной картине - настроим запуск ssh-сервера при загрузке:

# vi /etc/rc.conf

jail_enable="YES"

// Список jail-окружений

jail_list="ssh"

// Стандартные опции jail

jail_ssh_rootdir="/usr/jail/192.168.3.3"

jail_ssh_hostname="jail.j1m.org"

jail_ssh_ip="192.168.3.3"

// Какие ФС монтировать?

jail_ssh_devfs_enable="NO"

jail_ssh_fdescfs_enable="NO"

jail_ssh_procfs_enable="YES"

Маленькие хитрости

В предыдущем разделе мы уже затронули вопрос, касающийся ограничения возможностей пользователя внутри jail-окружения. Теперь рассмотрим этот момент более подробно. Из правила «чем проще - тем надежнее» можно вывести несколько правил. Во-первых, без крайней необходимости не монтируй виртуальные файловые системы в каталог jail. Вполне вероятно, что рано или поздно в одной из них найдут критический баг, и тогда твой сервер может быть скомпрометирован. То же касается и suid-программ - по возможности их следует убрать из jail-окружения. Во-вторых, потрать немного своего драгоценного времени и очисти jail-окружение от всего, что не влияет на работоспособность сервера. Первым шагом к достижению этой цели станет модификация файла /etc/make.conf хост-системы с последующей переборкой jail-окружения. Затем следует самостоятельно удалить все лишнее из jail-каталога. Да, это утомительное занятие, но оно приносит свои плоды: затрудняет жизнь взломщику и освобождает дисковое пространство. Также рекомендуется установить лимиты на используемые ресурсы для всех юзеров и назначить файлам каталога /etc максимально строгие права доступа.

В нашем примере мы рассмотрели установку ssh-сервера в jail, но что если нам потребуются программы из дерева портов? Копирование - это расточительство, создание симлинка недопустимо (внутри jail-окружения он будет указывать сам на себя), NFS - это усложнение, а следовательно, еще одно узкое место в безопасности. Существует более простой способ предоставления доступа к дереву портов - unionfs:

Назад на стр. 092-106-3  Содержание  Вперед на стр. 092-106-5