Packet Filter (PF) на мой взгляд — уникальный файрвол, который можно настроить под самые фантастические задачи. Пробить его практически невозможно. Помимо основных задач он еще нормализует трафик TCP и отрубает неполноценные пакеты. Packet Filter (PF) — фаервол разработанный для OpenBSD и позже портированный на FreeBSD и NetBSD. По сравнению с тем же ipfw, имеет более понятный для чтения и написания правил синтаксис, имеет встроенный NAT, очереди и другие вкусности. Примеры конфигов можно увидеть тут: /usr/share/examples/pf. В ОС FreeBSD он поставляется в виде подгружаемых модулей ядра, добавим его поддержку:
В файл /etc/rc.conf добавим следующее

Все при меры я максимально комментировал. Если FreeBSD используется в качестве маршрутизатора, следует разрешить проброс пакетов, добавить в файл /etc/sysctl.conf:

Сам конфиг у нас находиться в /etc/pf.conf и имеет организованную структуру:
1. Макросы:  Определяемые пользователем переменные, которые могут содержать адреса  IP, имена интерфейсов, и т.д.
2. Таблицы:  Применяются для хранения списков IP адресов.
3. Опции: Параметры, влияющие на работу pf.
4. Параметры нормализации Scrub:  Подготовка пакета к нормализации и дефрагментации.
5. Приоретизация и очереди ALTQ:  Обеспечивает управление полосой пропускания и установку приоритетов пакета.
6. Трансляции:  Контроль NAT и перенаправление пакетов.
7. Правила фильтрации:  Осуществляют выборочную фильтрацию пакетов на интерфейсах.

Для ясности происходящего приведу пример включения PF в сеть:

pf

посмотрим конфигурационный файл

Во всех свежих версиях FreeBSD он уже присутствует в качестве загружаемого модуля. Но я включил его в ядро явно, нужно пересобрать ядро (это необязательно) :

(не бойтесь, что он такой большой. Для самых простых задач достаточно прописать строк десять )))

PF имеет некоторые ключи для работы:

Загрузить pf.sh:

Анализировать, но не загружать конфиг:

Загрузить только правила NAT:

Загрузить только правила фильтрации:

Просмотр:
Показать текущие правила NAT:

Показать текущие правила фильтрации:

Показать текущее состояние таблиц:

Показать статистику правил и состояние счетчиков:

Показать все:

Просмотр очередей ALTQ в реалтайме:

Подсчет трафика с помощью pf на определенных интерфейсах:

Подсчет трафика с помощью pf на всех интерфейсах:

Сброс всех правил PF, полный клир:

 

 

 

Для большей безопасности и резкого увеличения производительности пересобираю ядро с поддержкой PF (вообще-то это очень полезно, комментируете ненужные опции, пересобираете и ядро становится в два три раза меньше), в файл конфигурации ядра добавляем следующее:

Это пример с максимальным количеством настроек

СОВЕТ
Этот набор правил, вероятно, разрешает покидать сеть большему количеству трафика, чем требуется. Одна из таких конфигураций может генерировать этот макрос:

Используйте приведенный выше макрос в основном правиле прохождения:

Может потребоваться еще несколько правил доступа. Следующий набор правил обеспечивает доступ по SSH во внешнем интерфейсе:

Следующее определение и правило макроса позволяет внутренним клиентам использовать DNS и NTP:

Как управлять службой PF?

Чтобы запустить брандмауэр PF, вы можете выполнить следующую команду:

Чтобы остановить брандмауэр PF, вы можете выполнить следующую команду:

Чтобы проверить PF на наличие синтаксической ошибки, вы можете выполнить следующую команду:

Чтобы перезапустить брандмауэр PF, вы можете выполнить следующую команду:

Чтобы просмотреть состояние PF, вы можете выполнить следующую команду:

Чтобы запустить / остановить / перезапустить службу pflog, вы можете ввести следующие команды:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *