Каждый, кто знаком с inetd(8), возможно когда-то слышал о TCP Wrappers. Но немногие полностью понимают их полезность в сетевой среде: большинство используют брандмауэр. Хотя его применимость очень широка, есть вещи, с которыми брандмауэр не может работать, такие как отправка текста обратно вызывающей стороне. Программное обеспечение уровня TCP может делать это и многое другое. В следующих нескольких разделах обсуждаются многие возможности TCP Wrappers, и, когда это необходимо, даются примеры настроек.
Программное обеспечение TCP Wrappers
расширяет возможность inetd
по поддержке
каждого даемона. С ним становится возможным протоколирование,
возврат сообщений вызывающей стороне, ограничение подключений
внутренней сетью и т.п. Хотя некоторые из этих возможностей
могут быть реализованы брандмауэром, TCP
Wrappers не только предоставляют дополнительный уровень защиты,
но и дают больше контроля над системой, чем это возможно
с брандмауэром.
Расширенная функциональность обработчиков TCP не может заменить хороший сетевой экран. Тем не менее, обработчики TCP могут использоваться совместно с сетевым экраном и другими средствами обеспечения информационной безопасности, обеспечивая тем самым дополнительный уровень защиты системы.
Поскольку рассматривается расширение к настройкам
inetd
, предполагается, что читатель ознакомился
с разделом о настройке
inetd.
Хотя программы, запускаемые из inetd(8), на самом деле не соответствуют термину <<даемоны>>, существует традиция называть их именно так. Этот термин и используется в данном разделе.
Единственное требование для использования TCP
Wrappers в FreeBSD это наличие в rc.conf
параметров запуска inetd
-Ww
;
это настройки по умолчанию. Конечно, ожидается также наличие
правильной настройки /etc/hosts.allow
,
но syslogd(8) отправит сообщения в системный протокол если
что-то не так.
В отличие от других реализаций TCP
Wrappers, использование hosts.deny
не
поддерживается. Все параметры настройки должны быть помещены
в /etc/hosts.allow
.
В простейшей конфигурации, политика подключения сводится к
разрешению или блокированию в зависимости от параметров в
/etc/hosts.allow
. Настройка в FreeBSD
по умолчанию заключается в разрешении подключения к любому
даемону, запущенному из inetd
. Изменение
этого поведения будет обсуждаться только после рассмотрения
базовой настройки.
Базовая настройка обычно принимает форму
daemon : address : action
, где
daemon
это имя даемона, который запускается
inetd
. В поле address
может находиться имя хоста, IP адрес, или
IPv6 адрес, заключенный в квадратные скобки ([ ]).
Поле action может принимать значения allow или deny,
чтобы соответственно разрешать или запрещать доступ.
Помните, что поиск правил производится до первого совпадения.
При обнаружении совпадения применяется соответствующее правило
и поиск прерывается.
Существуют и другие параметры, но они будут описаны в следующих
разделах. Простая конфигурация может быть, например, такой:
для разрешения соединений по протоколу POP3
к даемону mail/qpopper,
в hosts.allow
необходимо добавить следующие
строки:
# This line is required for POP3 connections: qpopper : ALL : allow
После добавления этой строки, inetd
необходимо перезапустить. Это можно выполнить командой
kill(1) или скриптом /etc/rc.d/inetd
с параметром restart
.
У TCP Wrappers имеются дополнительные параметры; они дают дополнительные возможности контроля над соединениями. Иногда бывает полезно возвращать комментарий определенным хостам или при подключении к определенным даемонам. В других случаях может быть необходимо добавить запись в лог файл, или отправить письмо администратору. В определенных ситуациях сервис должен использоваться только для локальных соединений. Все это возможно с использованием параметров c шаблонами, символами подстановки и путем выполнения внешних команд. Следующие два раздела посвящены этим типам настроек.
Предположим ситуацию, в которой соединение должно
быть запрещено, а о причине необходимо сообщить вызывающей
стороне. Как это можно сделать? Соответствующую
возможность предоставляет параметр twist
.
При попытке подключения выполняется команда или скрипт,
заданный этим параметром. Пример дан в файле
hosts.allow
:
# The rest of the daemons are protected. ALL : ALL \ : severity auth.info \ : twist /bin/echo "You are not welcome to use %d from %h."
В этом примере сообщение,
<<You are not allowed to use daemon
from hostname
.>> будет возвращено
от всех даемонов, которые не были предварительно настроены
в файле доступа. Обратите внимание, что возвращаемое
сообщение должно быть заключено в
кавычки; из этого правила нет исключений.
Возможна реализация DoS атаки, когда группа атакующих производит множество запросов на подключение.
Возможно также использование параметра spawn
.
Как и параметр twist
, параметр
spawn
подразумевает запрет соединения
и может использоваться для запуска команд или скриптов.
В отличие от twist
, spawn
не
отправляет ответ вызывающей стороне. Например, следующая
конфигурация:
# We do not allow connections from example.com: ALL : .example.com \ : spawn (/bin/echo %a from %h attempted to access %d >> \ /var/log/connections.log) \ : deny
отклонит все попытки соединения из домена
*.example.com
; имя хоста,
IP адрес и даемон протоколируются в файл
/var/log/connections.log
.
Помимо приведенных выше символов подстановки, например %a, существует еще несколько символов. Обратитесь к странице hosts_access(5) справочной системы за полным списком.
До этого момента в примерах использовался шаблон
ALL
. Существуют и другие параметры,
функциональность которых в дальнейшем может быть расширена.
ALL
соответствует любому даемону,
домену или IP адресу. Другой доступный
шаблон это PARANOID
, который соответствует
хосту, IP адрес которого может быть
подделан. Другими словами, paranoid
может быть использован для определения действия с хостами,
IP адрес которых не соответствует имени
хоста. Вот пример применения этого параметра:
# Block possibly spoofed requests to sendmail: sendmail : PARANOID : deny
В этом примере все запросы на подключения к
sendmail
от хостов, IP
адрес которых не соответствует имени хоста, будут
отклонены.
Использование PARANOID
невозможно,
если у клиента или сервера неправильно настроен
DNS. В таких случаях необходимо
вмешательство администратора.
Более подробная информация о шаблонах и их возможностях дана на странице hosts_access(5) справочной системы.
Для того, чтобы любая выбранная конфигурация заработала,
в hosts.allow
необходимо закомментировать
первую строку настройки. В начале раздела об этом не
упоминалось.
Этот, и другие документы, могут быть скачаны с https://download.freebsd.org/ftp/doc/.
По вопросам, связанным с FreeBSD, прочитайте
документацию прежде чем писать в
<questions@FreeBSD.org>.
По вопросам, связанным с этой документацией, пишите в рассылку
<doc@FreeBSD.org>.