Использование IPFW

Общий вид правила:

[rule_number] [set set_number] [prob    match_probability] action [log  [logamount number]] [altq queue] [{tag | untag} number] body

action:

allow check-state count deny divertDIVPORT fwdIP[PORT] nat# pipe# queue# unreachICMPTYPE reset skipto# call# return teeDIVPORT netgraphCOOKIE ngteeCOOKIE setfib# setdscpDSCP reass

body: [proto from src to dst] [options]

proto (/etc/protocols), all

src,dst: any | me | table# | addr(+/mask) addrlist [ports]

ports: port,port-port[ports]

OPTIONS

bridged layer2 diverted diverted-loopback diverted-output dst-ipIP dst-portPORTS established fib# frag gidGID jail# icmptypesTYPES in out ipidLIST iplenLIST ipoptionsSPEC ipprecedencePREC ipsec iptosSPEC dscpSPECS ipttlLIST ipversionVER keep-state limit{src-addr|src-port|dst-addr|dst-port}# lookup {dst-ip|dst-port|src-ip|src-port|uid|jail}# mac(dst-mac,any src-mac,any) mac-typeTYPE protoPROTO {recv|xmit|via}IFACE setup sockarg src-ipADDRS src-portPORTS taggedLIST tcpackACK tcpdatalenLIST tcpflagsSPEC tcpseqSEQ tcpwinLIST tcpoptionsSPEC uidUID verrevpath versrcreach antispoof

LOOKUP TABLES — аналог таблиц маршрутизации (+/MASK), но +порт,jail#,IP и ifacename

SETS OF RULES 0-31 (неубиваемый), нумерация правил общая, enable/disable/flush, move, swap

STATEFUL FIREWALL

           ipfw add check-state
           ipfw add allow tcp from my-subnet to any setup keep-state
           ipfw add deny tcp from any to any

Dynamic rules are created when a packet matches a keep-state or limit rule


log

dummynet

divert

Пример

Разбор группы правил из FreeBSD handbook.