[OpenBSD]

[Предыдущая: В начале] [Содержание] [Следующая: Таблицы]

PF: Списки и Макросы


Содержание


Списки

Список позволяет задавать несколько похожих критериев в правиле. Например, названия протоколов, номера портов, адреса, и т.д. Так, взамен написания по одному правилу для каждого IP адреса, который должен быть заблокирован, может быть написано одно единственное правило, с указанием IP адресов в списке. Списки обозначаются указанием пунктов, заключенных в { } скобки.

Когда pfctl(8) встречает список во время загрузки правил, он создаёт несколько правил, по одному для каждого пункта в списке. Например:

block out on fxp0 from { 192.168.0.1, 10.5.32.6 } to any

будет развёрнуто в:

block out on fxp0 from 192.168.0.1 to any
block out on fxp0 from 10.5.32.6 to any

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

rdr on fxp0 proto tcp from any to any port { 22 80 } -> \
   192.168.0.6
block out on fxp0 proto { tcp udp } from { 192.168.0.1, \
   10.5.32.6 } to any port { ssh telnet }

Обратите внимание, что запятая между пунктами списка не обязательна.

Списки могут содержать вложенные списки:

trusted = "{ 192.168.1.2 192.168.5.36 }"
pass in inet proto tcp from { 10.10.0.0/24 $trusted } to port 22

Остерегайтесь конструкции, подобной нижеуказанной и прозванной "отрицательной конструкцией", которая содержит распространённую ошибку:

pass in on fxp0 from { 10.0.0.0/8, !10.1.2.3 }

Многие читают правило, как "все адреса с 10.0.0.0/8, за исключением адреса 10.1.2.3", в то время как правило разворачивается в:

pass in on fxp0 from 10.0.0.0/8
pass in on fxp0 from !10.1.2.3

что соответствует любым возможным адресам. Вместо этого, должны быть использованы таблицы.

Макросы

Макросы это определяемые пользователем переменные, которые могут содержать IP адреса, номера портов, названия интерфейсов, и т.д. Макросы уменьшают запутанность правил PF и могут сделать поддержку правил более проще.

Имена макросов должны начинаться с буквы и могут содержать цифры, буквы и символы подчёркивания. Имена макросов не могут содержать такие слова, как pass, out, или queue.

ext_if = "fxp0"

block in on $ext_if from any to any

Это правило создаст макрос, под названием ext_if. Когда обращаются к макросу, после того, как он был создан, перед его именем стоит знак $.

Также макросы могут развёртываться в списки

friends = "{ 192.168.1.1, 10.0.2.5, 192.168.43.53 }"

Макросы могут быть заданы рекурсивно. Используется следующий синтаксис:

host1 = "192.168.1.1"
host2 = "192.168.1.2"
all_hosts = "{" $host1 $host2 "}"

Макрос $all_hosts теперь развёртывается в 192.168.1.1, 192.168.1.2.

[Предыдущая: В начале] [Содержание] [Следующая: Таблицы]


[back] www@openbsd.org
$OpenBSD: macros.html,v 1.4 2009/08/01 21:41:39 tobias Exp $