[Предыдущая: В начале] [Содержание] [Следующая: Таблицы]
Когда 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
что соответствует любым возможным адресам. Вместо этого, должны быть использованы таблицы.
Имена макросов должны начинаться с буквы и могут содержать цифры, буквы и символы подчёркивания. Имена макросов не могут содержать такие слова, как 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.
[Предыдущая: В начале] [Содержание] [Следующая: Таблицы]