Фильтрация пакетов


Пример полного правила PF

Ниже приводится набор правил PF, реализующих защиту небольшого сервера Интернета. Вы можете принять этот набор за основу и приспособить его под свои требования.

Набор правил начинается с макроопределения, которое задает имя сетевого интерфейса, благодаря чему после замены сетевой карты нам не придется переписывать все правила в наборе. Далее производится очистка входящего трафика. Оба эти правила были взяты непосредственно из предыдущих примеров.

Первое интересное правило, которое встречается в данном наборе, — это установка стратегии запрета по умолчанию с помощью оператора block (1). Все, что явно не разрешено, — запрещено.

Следующие два правила пропускают трафик по определенным протоколам, исходящий с определенных IP-адресов (2). Благодаря этим правилам имеется возможность соединяться с сервером по протоколам РОРЗ и SSH из сети 192.168.1.0/24, которая, скорее всего, является локальной офисной или административной сетью.

Для всеобщего пользования предлагаются службы электронной почты, веб-сервера и HTTPS (3). Доступ к этим службам обеспечивается с помощью правил, которые уже встречались в предыдущих примерах, но с другими номерами портов. Кроме того, всем желающим разрешается доступ к серверу DNS (4), но для этой цели используются несколько иные правила. Служба DNS работает как с протоколом TCP, так и с протоколом UDP. Такого рода знания можно получить только из толстых книг, посвященных описанию протоколов TCP/IP, или в архивах почтовых рассылок, попутно вырывая волосы на голове* при попытках заставить эти правила работать. Как могли бы заметить ярые сторонники PF, эти правила можно ужать и оптимизировать, но для небольшого сервера вполне пригоден и такой стиль. Наконец, сервер может инициировать исходящие соединения TCP и UDP с любыми портами (5).

Такая простая стратегия определяет основные правила, обеспечивающие возможность взаимодействий с нашим сервером. Несмотря на несовершенство, этот набор может стать серьезной преградой для злоумышленников. Предположим, что кто-то смог взломать веб-сервер и получить доступ к командной строке с привилегиями суперпользователя root через порт с номером 10000. Однако все его усилия пойдут прахом, так как брандмауэр не пропускает входящие соединения с этим портом.

Активизация правил PF

Управление фильтром пакетов PF производится с помощью pfctl(8). Если правила не содержат ошибок, pfctl(8) не выводит никаких сообщений — эта утилита осуществляет вывод на экран только при наличии ошибок. Так как ошибки в брандмауэре могут причинить немало бед, лучше тщательно проверить их перед активизацией. Правила проверяются только на наличие грамматических ошибок, так как активизация правил с грамматическими ошибками либо оставит систему незащищенной, либо заблокирует доступ к ней. Для проверки файла с правилами на наличие проблем используется ключ -n, чтобы указать имя файла, используется ключ -f.

# pfctl -nf /etc/pf.conf

Если были обнаружены ошибки — исправьте их и повторите попытку. Если программа не вывела никаких сообщений, можно активизировать набор правил, убрав ключ -n.

# pfctl -f /etc/pf.conf

Изменение настроек PF выполняется очень быстро, таким образом, у вас могут быть несколько наборов правил для различных ситуаций. Например, вы можете разрешать доступ к определенным службам только в определенное время суток, для чего достаточно запланировать запуск pfctl для активизации соответствующего набора правил в заданный момент времени. У вас также может иметься набор правил, специально предназначенный для установки на период ликвидации аварийных ситуаций, или специальные правила на случай потери соединения с Интернетом. Реализовать все это с помощью pfctl(8) не составляет большого труда.

При желании, использовав команду pfctl -sr, можно увидеть текущий набор правил.

# pfctl -sr

На запуске PF сообщает о недоступности чего-то, что называется ALTQ (1). Что это такое, вы узнаете в следующем разделе. Затем выводятся правила с дополнительными параметрами, используемыми по умолчанию (2). При выводе правил на место макроопределений pfctl(8) подставляет истинные значения (3), которые были указаны в конфигурации, затем утилита подтверждает, что эти правила используются уже несколько недель или месяцев с момента, когда они были загружены.

Наконец, чтобы удалить все правила, используются ключи -Fa (flush all — очистить все).

# pfctl -Fa

Вам время от времени придется наблюдать, как PF очищает все правила, настройки NAT и все остальное. Не требуется очищать наборы правил перед загрузкой новых наборов — достаточно просто загрузить новые правила, и старые автоматически будут удалены.

Фильтр пакетов PF обладает очень широкими возможностями и может нарушить работу TCP/IP любыми способами, которые вам понравятся (и некоторыми, которые вам точно не понравятся). Мы лишь слегка коснулись того, что лежит на поверхности. Для получения более глубоких и более подробных сведений обращайтесь к источникам информации, перечисленным ранее.

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