> в bsd нет цепочки forward. Понял! Спасибо! Именно этого слона я и не заметил (отсутствие цепочки forward).
> pass out on $ext_if keep state
> pass out on $int_if keep state
Для "pass out on xxx" в GUI pfSense-а предусмотрены "Floating rules"
Попробовал. не подходит для моей задачи (ниже)
> Задачу свою опиши, а то может, опять сову на глобус натягиваешь.
========== Задача ==============
В офисе ~15 vlan-ов. На шлюзе они распределены между тремя физическими сетевушками.
Все должны ходить в интернет и никто не должнен ходить друг к другу (за редкими исключениями под которые прописаны отдельные правила для каждого конкретного source/destination).
Локальные сервера, которые должны быть видны во всех (или в некоторых) vlan-ах собраны в отдельную подсеть. Под каждый сервер прописаны свои правила (либо nat1:1, либо фильтр по source/destination с указанием портов).
На шлюзе два WAN (два провайдера). Под них сделана "Gateway Group" (load balancing).
Кроме того, поднят OpenVPN-сервер для "удаленщиков" (в основном для проброса RDP)
================================
Собственно почему я интересуюсь in-out фильтрацией.
В pfSense для доступа в интернет на каждом VLAN обязательно прописывается правило где destination "any" (последнее в ruleset каждого из vlan).
pass in quick on igb0.8 inet from 192.168.8.0/24 to any flags S/SA keep state label "USER_RULE: from vlan8 to world"
pass in quick on igb1.4 inet from 192.168.4.0/24 to any flags S/SA keep state label "USER_RULE: from vlan4 to world"
Но! "to any" подразумевает и локальные vlan-ы тоже.
Поэтому для каждого vlan прописывается дополнительное правило, запрещающее "локальный роутинг"
...
block drop in quick on igb0.8 inet from any to <All_LAN_Networks> label "USER_RULE"
block drop in quick on igb0.8 inet6 from any to <All_LAN_Networks> label "USER_RULE"
block drop in quick on igb1.4 inet from any to <All_LAN_Networks> label "USER_RULE"
block drop in quick on igb1.4 inet6 from any to <All_LAN_Networks> label "USER_RULE"
...
и так далее для каждого vlan.
<All_LAN_Networks> - алиас в котором перечислены все локальные подсети.
Аналогично (из за того же "to any") приходится отдельными правилами блокировать доступ к самому шлюзу (вебинтерфейс и т.п.). А потом делать исключения из этих блокировок (локальный dns например).
В результате одно простое линуксовое правило
iptables -A FORWARD -i $LANiface -o $WANiface -j ACCEPT
разрастается в минимум 4-5 правил pf.
И все потому (насколько я понял), что в pf нет цепочки forward.
Соответственно, правило
pass out on $int_if keep state
тоже не очень подходит, потому что они слишком много разрешает.
Как то так.
Или я опять какого то слона пропустил?