Господа, как сделать фильтрующий мост в FreeBSD 4.9 с политикой фильтрации "разрешено только то что разрешено" ? Нужно пропускать только TCP и UDP траффик по определённым портам, ICMP, а так же arp запросы. Ничего большне не пропускать.
Собрал ядро с опциями :
options IPFIREWALL #firewall
options IPFIREWALL_VERBOSE #enable logging to syslogd(8)
options IPFIREWALL_VERBOSE_LIMIT=100 #limit verbosity
options IPFW2
options BRIDGE
В /etc/sysctl.conf добавил строки :
net.link.ether.bridge=1
net.link.ether.bridge_cfg=rl0,rl1
net.link.ether.bridge_ipfw=1
Скрипт Firewall'а выглядит так :
#!/bin/sh
ipfw='/sbin/ipfw -q'
${ipfw} flush
${ipfw} add 100 deny icmp from any to any in icmptype 5,9,13,14,15,16,17
${ipfw} add 300 allow all from any to any via lo0
${ipfw} add 400 deny ip from any to 127.0.0.0/8
${ipfw} add 500 deny ip from 127.0.0.0/8 to any
${ipfw} add 600 allow icmp from any to any
${ipfw} add 1000 allow tcp from any to any 22 keep-state
${ipfw} add 1050 allow udp from me to any 53 keep-state
${ipfw} add 1100 allow tcp from any to any 135 keep-state
${ipfw} add 1200 allow tcp from any to any 1234 keep-state
${ipfw} add 1600 allow tcp from any to any 6000 keep-state
Так вот, при таких настройках ничего не даже не пингуется. Всё понятно из-за чего это происходит. Не проходят arp запросы/ответы.
Вычитал, что надо добавить правило
allow udp from 0.0.0.0 2054 to 0.0.0.0
Но это не помогает...
Если последним правилом в скрипте указать "allow all from any to any", то всё работает, но мне нужно строить firewall по принципу "разрешено только то, что разрешено", так что такое правило - не подходит.
Как же построить фильтрующий мост ?