Я согласен с цитатой из man(5) pf.confСпасибо за перевод, кстати понятный.
Но тут по моему мнению не хватает ясности с тем где необходимо использовать скобки, а где нет.
Вот пример моего конфиг файла:
###########################################################################
## ЗАДАЕМ ПАРАМЕТРЫ (МАКРОСЫ) БРЭНДМАУЭРА #################################
###########################################################################
int_if="sk0" # NIC Marvell PCI (1000) Local Area Network 192.168.0.2
ext_if="rl0" # NIC in MB (100) to MODEM
ext_if_ppp="tun0" # PPPoE over NIC in MB to MODEM Dynamic IP from TTN
## разрешенные типы icmp сообщений.
## Первое необходимо для работы UNIX traceroute (для win tracert этого
## не требуется), а второе нужно когда пытаемся коннектиться
## к хосту, который в дауне.
allowed_icmp_types="{ echoreq, unreach}"
## Cписок немаршрутизируемых адресов, с которых к нам
## будут долбиться на внешний интерфейс, а мы их будем заботливо писать в лог.
non_route_nets_inet="{ 127.0.0.0/8, 192.168.0.0/16, 172.16.0.0/12, 10.0.0.0/8, 169.254.0.0/16, 192.0.2.0/24, 0.0.0.0/8, 240.0.0.0/4 }"
trusted_lan="192.168.0.0/24" #Наша локальная сеть
astalavistaws="192.168.0.119"
ironws="192.168.0.101"
direktorws="192.168.0.46"
opennat="{" $astalavistaws $ironws $direktorws "}"
##--options
# тем, кто лезет туда куда не нужно вежливо сообщаем что нельзя
set block-policy return
# изменяем время для состояния установленного tcp соединения,
# которое по-умолчанию черезчур большое (24часа)
set timeout { frag 10, tcp.established 3600 }
# не проверяем на lo0
set skip on lo0
# перед тем, как отправить фрагментированный пакет дальше
# сначала дожидаемся всех его частей
scrub in all
###########################################################################
## СЕКЦИЯ NAT and RDR #####################################################
###########################################################################
## ВНИМАНИЕ!!! Все проверяеться нормально сначала проверка потом нат
## Открываем нат для
nat on $ext_if_ppp from $opennat to any -> ($ext_if_ppp)
# nat pass on $ext_if_ppp from $ironws to any -> ($ext_if_ppp)
# nat pass on $ext_if_ppp from $direktorws to any -> ($ext_if_ppp)
# nat pass on $ext_if_ppp from $astalavistaws to any -> ($ext_if_ppp)
################################################################################
## СЕКЦИЯ правила фильтрации ###################################################
################################################################################
## антиспуфинг
## Что означает : сбрасывать все входящие пакеты с
## адресом отправителя равным нашему
antispoof log quick for $ext_if_ppp # включает простейший
# умников, которые лезут на внутренний интерфейс с любых сетей
# отличных от 192.168.0.0/24
block drop in log quick on $ext_if_ppp from $non_route_nets_inet to any
# пишем тех, кто ломится к нам на 25 порт. Облегчает работу по
# определению зараженных компов в локальной сети
block drop in log quick on $int_if from !$int_if:network to any
# хорошее начало любых правил :-P
# Правда! (см. [7])
block all
## Разрешаем нашему серверу ходить в Интернет
## разрешаем весь исходящий трафик с локальной машины В Интернет
## через ppp интерфейс и входящий с флагом установленного соединения
pass out on $ext_if_ppp from ($ext_if_ppp) to any keep state
## Разрешаем нашему серверу работать с сетью. иницировать соед-я только ему, пропускать
## инициированые
pass out on $int_if from ($int_if) to $trusted_lan keep state
# после freebsd 7.0. keep state подставляеться по умолчанию
# т.е. пропускаються назад ответы (пакеты с установленным соединением)
# ICMP (PINGing) Пинг из локальной сети в Интернет
pass out on $ext_if_ppp proto icmp from $trusted_lan icmp-type $allowed$
# ICMP (PINGign) Пинг сервера из локальной сети
pass in on $int_if proto icmp from $trusted_lan icmp-type $allowed_icmp$
# Доступ к прокси Squid из локальной сети 100%
pass in on $int_if proto tcp from $trusted_lan to $int_if port 3128 kee$
# SSH из локальной сети 100%
pass in log on $int_if proto tcp from $trusted_lan to $int_if port 22 k$
# Статистика LightSquid для локальной сети, расположенного в локальном каталоге$
# сервера Apache и работающего на 80 порту
pass in log on $int_if proto tcp from $trusted_lan to $int_if port 80 k$
Самое интересное, что исправив в одном месте:
pass out on $ext_if_ppp from ($ext_if_ppp) to any keep state
Стало работать!
Вопрос почему тогда не ругаеться в других правилах,
где также используеться не проинициализированный интерфейс:
здесь:
nat on $ext_if_ppp from $opennat to any -> ($ext_if_ppp)
antispoof log quick for $ext_if_ppp # включает простейший
block drop in log quick on $ext_if_ppp from $non_route_nets_inet to any
pass out on $ext_if_ppp proto icmp from $trusted_lan icmp-type $allowed...
т.е.
1. я так понимаю, что нужно сделать наверное это один раз всего
всмысле взять в скобку интерфейс, в правиле, на которое он ругаеться, и все остальные проигнорируються, т.е. нормально подгрузяться
либо
2. есть другой прикол
вот как бы что интересно ;)