недавно сам страдал такой-же фигней,
вот мой ipfw.config, может тому-то пригодится... естественно его еще доработать надобно #!/bin/sh
fwcmd="/sbin/ipfw "
# outside interface network
oif="rl0"
onet="192.168.0.0/24"
oip="192.168.0.1"
# inside interface network
iif="vr0"
inet="10.0.0.0/24"
iip="10.0.0.1"
# allowed ports
p="110,995,25,4899,53"
# Flush out the list before we begin.
${fwcmd} -f flush
# разрешаем все по интерфейсу обратной петли
${fwcmd} add allow ip from any to any via lo0
${fwcmd} add deny ip from any to 127.0.0.0/8
${fwcmd} add deny ip from 127.0.0.0/8 to any
# режем пакеты от локальной сети, пришедщие извне на внешний интерфейс
${fwcmd} add deny ip from ${inet} to ${oip} in via ${oif}
# разрешаем SSH для случая неправильного конфигрурирования фаервола
${fwcmd} add allow tcp from any to me 22 via any
${fwcmd} add allow tcp from me 22 to any via any
# разрешаем трафик локальной сети
${fwcmd} add allow ip from ${inet} to ${inet} via ${iif}
# DIVERT-NAT
${fwcmd} add divert natd ip from ${inet} to any ${p} out via ${oif}
${fwcmd} add divert natd ip from any ${p} to ${oip} in via ${oif}
# разрешаем внешние соединения роутера
${fwcmd} add allow ip from ${oip} to any out via ${oif}
${fwcmd} add allow ip from any to ${oip} in via ${oif}
# разрешаем внутренним хостам выход во внешнюю сеть
${fwcmd} add allow ip from ${inet} to any in via ${iif}
${fwcmd} add allow ip from ${inet} to any out via ${oif}
${fwcmd} add allow ip from any to ${inet} in via ${oif}
${fwcmd} add allow ip from any to ${inet} out via ${iif}
# запрещаем все остальное
${fwcmd} add 60000 deny all from any to any