Разделы pf.conf (PacketFilter)

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

Пример:
EXTJF="deO" INTJF=Mdel"
RFC1918="{ 192.168.0.0/16. 172.16.0.0/12, 10.0.0.0/8 }"
Обращение к макросу осуществляется добавлением к его имени префикса $: block drop quick on SEXTJF from any to SRFC1918
Во втором разделе хранятся таблицы IP-адресов, используемые в последующих правилах. Применение таблиц для перечисления IP-адресов гораздо быстрее дает нужный эффект, чем применение макросов, особенно если IP-адресов много, поскольку используемый в правиле макрос расширяется на несколько правил, каждое из которых соответствует одному значению, содержащемуся в макросе. При использовании же таблицы расширение добавляет только одно правило.
Вместо использования макроса в предыдущем примере можно определить таблицу, содержащую Маршрутизируемые RFC 1918 IP-адреса:
table <rfcl918> const { 192.168.0.0/16.  172.16.0.0/12.  10.0.0.0/8 }
Ключевое слово const гарантирует, что после создания таблица не может быть изменена. Таблицы указываются в правиле в том же порядке, в котором они создавались:
block drop quick on SFXTJF from any to <rfcl918>
С помощью ключевого слова fi 1 е можно загрузить список IP-адресов: table <spammers> file '/etc/spammers.table"
Если вы решите не использовать ключевое слово const, то сохранится возможность добавлять адреса в таблицу:
pfctl -t spammers -Т add 10.1.1.1
Кроме того, адреса можно и удалять:
pfctl -t spammers -Т delete 10.1.1.1

Для вывода содержания таблицы можно запустить команду
pfctl -t spanners -Т show
Помимо IP-адресов, могут использоваться имена узлов. В этом случае в таблицу будут помещены все действительные адреса, возвращаемые распознавателем (resolver).