Один из сложных моментов настройки - создание правил файрвола. Рекомендую изучить статью Кузмича только не надо копировать правила которые написаны для примера. Эта статья хороша своими обьяснениями работы ключей и пр. Писать постоянные правила файрвол нужно только при полном понимании работы ipfw в противном случае или что то не будет работать (чаще всего) или хакеры через день сломают вашу машину.
Итак рабочие файлы файрвола и нат (подставлялись на место рабочих в момент написания. Учтите, что работа natd отличается от работы ipnat. :))
rc.conf
defaultrouter="195.195.95.100"
gateway_enable="YES"
hostname="bsd.myd.ru"
ifconfig_rl0="inet 195.195.95.5 netmask 255.255.255.0"
ifconfig_rl1="inet 192.168.10.1 netmask 255.255.255.0"
inetd_enable="YES"
kern_securelevel_enable="NO"
lpd_enable="YES"
nfs_reserved_port_only="YES"
sendmail_enable="YES"
sshd_enable="YES"
# Секцию ниже нужно убрать если DNS для зоны не настроен
named_enable="YES"
named_program="named"
named_flags="-u bind -g bind"
#
ipnat_enable="YES"
ipnat_program="/sbin/ipnat -CF -f"
ipnat_rules="/etc/ipnat.rules"
ipnat_flags=""
firewall_enable="YES"
firewall_script="/etc/rc.firewall"
rc.firewall
#
# IPFW RULES
# /etc/ipfw.rules
#
fwcmd="/sbin/ipfw"
LanOut="rl0"
IPOut="195.195.95.5"
NetOut="24"
MaskOut="255.255.255.0"
LanIn="rl1"
IPIn="192.168.10.1"
NetInIP="192.168.10.0"
NetInMask="24"
MaskIn="255.255.255.0"
MyIP1="192.168.10.97"
MyIP2="192.168.10.98"
MyIP3="192.168.10.99"
dns1="192.168.10.1"
dns2="195.195.95.50"
dns3="195.190.90.9"
${fwcmd} -q -f flush
#
${fwcmd} -q add pass all from any to any via lo0
${fwcmd} -q add pass all from any to any via ppp0
# Пропускаем все соединения с установленным битом RST или ACK
${fwcmd} -q add pass tcp from any to any established
# Разрешаем все пакеты выходящие из внешнего интерфейса с внешнего IP
${fwcmd} -q add pass ip from ${IPOut} to any out xmit ${LanOut}
# Stop private networks (RFC1918) from entering the outside interface.
${fwcmd} -q add deny ip from 192.168.0.0/16 to any in via ${LanOut}
${fwcmd} -q add deny ip from 172.16.0.0/12 to any in via ${LanOut}
${fwcmd} -q add deny ip from 10.0.0.0/8 to any in via ${LanOut}
# NAT
#${fwcmd} -q add divert natd ip from any to any via ${LanOut}
# www, ftp... только по заданным интерфейсам - остальные через squid
${fwcmd} -q add pass tcp from ${MyIP1} to any 20,21,22,23,80,443
${fwcmd} -q add pass tcp from any 20,21,22,23,80,443 to ${MyIP1}
${fwcmd} -q add pass tcp from ${MyIP2} to any 20,21,22,23,80,443
${fwcmd} -q add pass tcp from any 20,21,22,23,80,443 to ${MyIP2}
${fwcmd} -q add pass tcp from ${MyIP3} to any 20,21,22,23,80,443
${fwcmd} -q add pass tcp from any 20,21,22,23,80,443 to ${MyIP3}
# Запрещаем - FTP, терминал, Squid - снаружи
${fwcmd} -q add deny tcp from any to any 20,21,22,23,3128 in via ${LanOut}
# Запрещаем - www, FTP, терминал - изнутри
${fwcmd} -q add deny tcp from any to any 20,21,22,23,80,443 in via ${LanIn}
${fwcmd} -q add deny tcp from any to any 8000-8104 in via ${LanIn}
# Разрешаем почту, DNS
${fwcmd} -q add pass tcp from any to any 25,110 via ${LanOut}
${fwcmd} -q add pass tcp from any 25,110 to any via ${LanOut}
${fwcmd} -q add pass udp from any to any 53 via ${LanOut}
${fwcmd} -q add pass udp from any 53 to any via ${LanOut}
${fwcmd} -q add pass all from any to any via ${LanIn}
# Доступен сервер www из внешнего мира
${fwcmd} -q add pass tcp from ${IPOut} 80 to any via ${LanOut}
${fwcmd} -q add pass tcp from any to ${IPOut} 80 via ${LanOut}
#ICMP
${fwcmd} -q add allow icmp from any to ${IPOut} in via ${LanOut} icmptype 0,3,4,11,12
${fwcmd} -q add allow icmp from any to ${NetInIP}/${NetInMask} in via ${LanOut} icmptype 0,3,4,11,12
${fwcmd} -q add allow icmp from ${IPOut} to any out via ${LanOut} icmptype 3,8,12
${fwcmd} -q add allow icmp from ${IPOut} to any out via ${LanOut} frag
${fwcmd} -q add deny log icmp from any to any in via ${LanOut}
${fwcmd} -q add reject log icmp from any to any out via ${LanOut}
${fwcmd} -q add deny log all from any to any