Тюрьма для чертенка Евгений Зобнин ака 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: |