TCP Wrappers


Обработка

Подобно twist, параметр spawn отклоняет запрос на соединение и запускает указанную команду интерпретатора. В отличие от twist, spawn не возвращает результаты клиенту. Параметр spawn следует применять, когда при получении запроса на соединение система FreeBSD должна выполнить те или иные команды, о которых не должен знать клиент. Эти команды выполняются в фоновом режиме, а их результаты не возвращаются клиенту. Правило из следующего примера разрешает соединение, но заносит IP-адрес клиента в файл протокола:

ALL : PARANOID : spawn (/bin/echo %a >> /var/log/misconfigured) \
: allow

Минутку, откуда возьмется значение в этой команде? Программа TCP Wrappers поддерживает множество переменных, которые можно применять в командах twist и spawn. Эти переменные раскрываются перед выполнением команд, поэтому с их помощью можно легко видоизменять ответы на запросы. Переменная содержит адрес клиента. Будучи размещенной в команде, она преобразуется в IP-адрес до выполнения этой команды. Эта и другие переменные представлены в табл. 9.2.

Таблица 9.2. Переменные, которые можно использовать в командах twist и spawn

Ключевое слово Назначение
Адрес клиента
IP-адрес сервера
Вся доступная информация о клиенте
%d Имя демона
%h Имя хоста клиента (если доступно) или IP-адрес
Имя хоста сервера (если доступно) или IP-адрес
%n Имя хоста клиента; если оно не найдено, выдается UNKNOWN. Если имя хоста не соответствует IP-адресу, это эквивалентно PARANOID
%N Имя хоста сервера; если оно не найдено, возвращается либо UNKNOWN, либо PARANOID
Идентификатор процесса демона
%s Вся доступная информация о сервере
%u Имя пользователя клиента
%% Символ %

Эти переменные можно применять везде, где предоставляемая ими информация используется в сценариях интерпретатора. Например, чтобы занести всю доступную информацию о клиенте в файл протокола при каждом подключении к защищаемой программе, можно использовать spawn:

ALL : ALL : spawn (/bin/echo %c >> /var/log/clients) : allow

Символы пробела и обратного слэша в имени хоста могут вызвать нарекания у командного интерпретатора, поскольку это недопустимые символы. При обычных обстоятельствах они не должны присутствовать в именах хостов, но Интернет — это по определению не обычный случай. Для обеспечения безопасности программа TCP Wrappers замещает все символы, которые могут вызвать сложности у командного интерпретатора, на символ подчеркивания (_). Проверьте наличие таких символов в файлах протоколов; они могут свидетельствовать о попытках проникновения в систему или о том, что кому-то нравится символ подчеркивания в именах хостов.

В заключение о TCP Wrappers

Возьмем все примеры, уже рассмотренные в этом разделе, и создадим файл /etc/host.allow целиком, чтобы защитить гипотетическую систему, подключенную к сети. Для начала составим перечень сетевых ресурсов, предлагаемых системой, а также список IP-адресов, закрепленных за системой, и пользователей, которым разрешено подключение:

  • Диапазон IP-адресов — 192.168.0.0/16. Система предлагает POP3, ftpd(8), SSH и portmap(8).
  • Диапазон IP-адресов конкурента, которому запрещен доступ к системе: 10.5.4.0/23. (Вообще говоря, блокирование конкурента и предоставление услуг всем остальным — это не самая эффективная тактика, поскольку в этом случае конкуренты просто пойдут в ближайшее интернет-кафе и воспользуются беспроводным подключением. Однако у вас могут быть и другие причины блокирования определенных адресов.)
  • Примем отчасти параноидальное решение: хосты с неверной информацией DNS могут принадлежать взломщикам, поэтому запросы на соединение, исходящие от этих машин, будут отклоняться.
  • С любого адреса Интернета можно запрашивать доступ к серверам FTP и SSH и POP3.
  • Хосты из локальной сети могут пользоваться услугами демона portmap, а из других сетей — нет.
  • Локальный хост может взаимодействовать сам с собой.
  • Все, что не разрешено, — запрещено.

Хотя эти требования довольно сложны, они сводятся к очень простому набору правил:

# отклонять все запросы на соединение, исходящие от конкурента и от хостов
# с неверными записями DNS
ALL : PARANOID 10.5.4.0/23 : deny
# локальный хост может взаимодействовать сам с собой
ALL : localhost : allow
# разрешить использовать portmap в локальной сети
# и запретить для всех остальных
portmap : ALL EXCEPT 192.168.0.0/16 : deny
# Разрешить доступ к SSH, pop3 и ftp и запретить все остальное
sshd, POP3, ftpd : ALL : allow
ALL : ALL : deny

Примеры с более подробными комментариями можно найти в файле /etc/hosts.allow или на страницах руководства hosts_allow(5) и hosts_ access(5).

Комментарии запрещены.