Подсказки о том, как собрать поддержку этих firewall в ядре в /usr/src/sys/conf/NOTES.
Основные опции:
### ipfw
options IPFIREWALL # поддержка файрвола
options IPFIREWALL_VERBOSE # поддержка логирования
options IPDIVERT # поддержка divert-сокетов (нужна для natd)
options DUMMYNET # поддержка шейпера dummynet
### ipf
options IPFILTER # поддержка файрвола
options IPFILTER_LOG # поддержка логирования
### pf
device pf # поддержка файрвола
device pflog # поддержка логирования
device pfsync # отслеживание состояния
options ALTQ # поддержка шейпера ALTQ
запуск /etc/rc.conf.
задаются:
### ipfw
firewall_enable="YES" # поддержка файрвола
firewall_type="/etc/ipfw.rules" # тип (способ инициализации)
natd_enable="YES" # поддержка natd
### ipf
ipfilter_enable="YES" # поддержка файрвола
ipfilter_rules="/etc/ipf.rules" # файл с правилами
ipnat_enable="YES" # поддержка ipnat
ipnat_rules="/etc/ipnat.rules" # файл с правилами NAT
### pf
pf_enable="YES" # поддержка файрвола
pf_rules="/etc/pf.rules" # файл с правилами
особенности
// ipfw
add check-state
add allow tcp from any to any out setup via rl0 keep-state
// ipf
pass out on rl0 proto tcp from any to any flags S keep state
// pf
pass out on rl0 proto tcp from any to any flags S/SA keep state
nat
// ipfw (должен быть запущен natd на порту 8668)
add divert 8668 ip from 10.10.0/24 to any out via bge0
add divert 8668 ip from any to 1.2.3.4 in via bge0
// ipf (правила выносятся в ipnat.rules, запускаются командой ipnat)
map rl0 10.10.0.0/24 -> 1.2.3.4/32
// pf (размещаются в общей конфигурации перед правилами фильтрации)
nat on rl0 from 10.10.0.0/24 to any -> 1.2.3.4/32
шейпинг
// ipfw
add pipe 1 ip from any to 192.168.0.0/24
pipe 1 config bw 128Kbit/s
// pf
altq on rl0 cbq queue q_limited
queue q_limited bandwidth 128Kb cbq(default)
pass quick from any to 192.168.0.0/24 keep state queue q_limited