IP Filter je malý, portabilní a výkonný softwarový balík, který lze používat k překladu ip adres nebo jako paket filtr.
IPF umožňuje filtrovat dle několika kritérií, například:
IP Filter má 2 sady pravidel, aktivní sada (active set) a neaktivní sada (inactive set). Defaultně jsou všechny operaci prováděny na aktivní sadě pravidel. Manipulovat s inaktivní sadou pravidel můžeme pomocí přepínače -I. Použitelné taktéž s přepínačem -s (přepni aktivní sadu pravidel na "jinou"). Mazání pravidel se provádí přepínačem -r.
Příkazem ipf -Fa -f /etc/ipf.rules nejdříve smažeme aktivní pravidla (flush) a načteme pravidla ze souboru /etc/ipf.rules.
Zadávání/mazání pravidel z stdin: ipf -f -, ipf -rf -
Syntaxe:
filter-rule = [ insert ] action in-out [ options ] [ tos ] [ ttl ]
[ proto ] [ ip ] [ group ] .
insert = "@" decnumber .
action = block | "pass" | log | "count" | skip | auth | call .
in-out = "in" | "out" .
options = [ log ] [ "quick" ]
[ "on" interface-name [ dup ] [ froute ] ] .
tos = "tos" decnumber | "tos" hexnumber .
ttl = "ttl" decnumber .
proto = "proto" protocol .
ip = srcdst [ flags ] [ with withopt ] [ icmp ] [ keep ] .
group = [ "head" decnumber ] [ "group" decnumber ] .
block = "block" [ return-icmp[return-code] | "return-rst" ] .
auth = "auth" | "preauth" .
log = "log" [ "body" ] [ "first" ] [ "or-block" ]
[ "level" loglevel ] .
call = "call" [ "now" ] function-name .
skip = "skip" decnumber .
dup = "dup-to" interface-name[":"ipaddr] .
froute = "fastroute" | "to" interface-name .
protocol = "tcp/udp" | "udp" | "tcp" | "icmp" | decnumber .
srcdst = "all" | fromto .
fromto = "from" [ "!" ] object "to" [ "!" ] object .
return-icmp = "return-icmp" | "return-icmp-as-dest" .
object = addr [ port-comp | port-range ] .
addr = "any" | nummask |
host-name [ "mask" ipaddr | "mask" hexnumber ] .
port-comp = "port" compare port-num .
port-range = "port" port-num range port-num .
flags = "flags" flag { flag } [ "/" flag { flag } ] .
with = "with" | "and" .
icmp = "icmp-type" icmp-type [ "code" decnumber ] .
return-code = "("icmp-code")" .
keep = "keep" "state" | "keep" "frags" .
loglevel = facility"."priority | priority .
nummask = host-name [ "/" decnumber ] .
host-name = ipaddr | hostname | "any" .
ipaddr = host-num "." host-num "." host-num "." host-num .
host-num = digit [ digit [ digit ] ] .
port-num = service-name | decnumber .
withopt = [ "not" | "no" ] opttype [ withopt ] .
opttype = "ipopts" | "short" | "frag" | "opt" ipopts .
optname = ipopts [ "," optname ] .
ipopts = optlist | "sec-class" [ secname ] .
secname = seclvl [ "," secname ] .
seclvl = "unclass" | "confid" | "reserv-1" | "reserv-2" |
"reserv-3" | "reserv-4" | "secret" | "topsecret" .
icmp-type = "unreach" | "echo" | "echorep" | "squench" | "redir" |
"timex" | "paramprob" | "timest" | "timestrep" | "inforeq" |
"inforep" | "maskreq" | "maskrep" | decnumber .
icmp-code = decumber | "net-unr" | "host-unr" | "proto-unr" |
"port-unr" | "needfrag" | "srcfail" | "net-unk" |
"host-unk" | "isolate" | "net-prohib" | "host-prohib" |
"net-tos" | "host-tos" | "filter-prohib" | "host-preced" |
"cutoff-preced" .
optlist = "nop" | "rr" | "zsu" | "mtup" | "mtur" | "encode" | "ts" |
"tr" | "sec" | "lsrr" | "e-sec" | "cipso" | "satid" |
"ssrr" | "addext" | "visa" | "imitd" | "eip" | "finn" .
facility = "kern" | "user" | "mail" | "daemon" | "auth" | "syslog" |
"lpr" | "news" | "uucp" | "cron" | "ftp" | "authpriv" |
"audit" | "logalert" | "local0" | "local1" | "local2" |
"local3" | "local4" | "local5" | "local6" | "local7" .
priority = "emerg" | "alert" | "crit" | "err" | "warn" | "notice" |
"info" | "debug" .
hexnumber = "0" "x" hexstring .
hexstring = hexdigit [ hexstring ] .
decnumber = digit [ decnumber ] .
compare = "=" | "!=" | "<" | ">" | "<=" | ">=" | "eq" |
"ne" | "lt" | "gt" | "le" | "ge" .
range = "<>" | "><" .
hexdigit = digit | "a" | "b" | "c" | "d" | "e" | "f" .
digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" .
flag = "F" | "S" | "R" | "P" | "A" | "U" .
-C smaže veškeré aktuální záznamy při výpisu NAT pravidel, -F smaže veškeré aktivní záznamy v aktuální tabulce překladů (active NAT mappings), -l list tabulky překladů, -s NAT statistiky, -r mazání NAT pravidel.
Podporu paket filtru lze zakompilovat do kernelu a nebo zavést do jádra jakožto modul ipl.ko.
Kompilace kernelu s podporou ipfiltru v konfiguračním souboru kernelu musí být následující volby:
options IPFILTER # Ipfilter
Následující dvě volby jsou volitelné
options IPFILTER_LOG # Ipfilter logování
options IPFILTER_DEFAULT_BLOCK # Defaultně blokuj veškerý provoz
# procházející daným strojem
Po kompilaci kernelu, či zavedení modulu ipl.ko můžeme začít pracovat s paket filtrem. Např. zadávat pravidla ipf -f - (stdin).
RC skripty
V /etc/rc.conf (skript spouštěný při startu OS) můžeme zapnout podporu ipfiltru, monitorovacího procesu apod. Veškeré volby nalezneme v /etc/defaults/rc.conf.
ipfilter_enable="NO" # YES = zapnutí ipfilteru
ipfilter_program="/sbin/ipf" # Program, který se spustí při volbě
# ipfilter_enable="YES"
ipfilter_rules="/etc/ipf.rules" # Soubor s pravidly
ipfilter_flags="" # Případné volby při spuštění programu
ipnat_enable="NO" # NAT
ipnat_program="/sbin/ipnat -CF -f" # Program a jak specifikovat pravidla
ipnat_rules="/etc/ipnat.rules" # Soubor s pravidly
ipnat_flags="" # Případné volby při spuštění programu
ipmon_enable="NO" # Monitoruje /dev/ipl
ipmon_program="/sbin/ipmon" #
ipmon_flags="-Ds" # Typicky "-Ds" [-s syslog logging] nebo
# "-D /var/log/ipflog"
Pravidla jsou čtena od shora dolů. Většina paketových filtrů zastaví prohledvání pravidel, pokud nalezne vyhovující pravidlo; ipfilter neni jeden z nich. Ipf prohledá pravidla a poslední vyhovující pravidlo pro daný paket v pořadí, se uplatní. Pokud tedy zadáte
block in all
pass in all
paket bude povolen, neboť poslední vyhovující pravidlo pro daný paket je pass in all.
Oproti ipfw a jiným pf /paket filtr/ vám toto může připadat trochu zmatené. Ipfilter toto řeší pomocí volby quick. Např.:
block in quick all
pass in all
Ipf přečte první pravidlo, paket by měl blokován, zastaví prohledávání pravidel a paket je zamítnut, neboť v prvním pravidle byla použita volba quick.
Ipf umožnuje filtrování dle mnoha kritéií a jednim z nich je filtrování dle IP adres. Vhodné je blokovat pakety z neroutovatelných sítí v internetu (viz příklad), které by mohly být použity pro 'spoofing' (viz Address Allocation for Private Internets).
block in quick from 192.168.0.0/16 to any
block in quick from 172.16.0.0/12 to any
block in quick from 10.0.0.0/8 to any
pass in all
Další možností je například kontrola paketů dle procházejícího zařízení (interface). Využití je u paketových filtrů s více zařízeními, např. firemní firewall s přístupem do LAN a WAN, popř. internetu.
block in quick on tun0 all
pass in all
Následuíjící pravidla blokují pakety se zdrojovými adresami z neroutovatelných sítí na interface označeném xl1.
block in quick on xl1 from 192.168.0.0/16 to any
block in quick on xl1 from 172.16.0.0/12 to any
block in quick on xl1 from 10.0.0.0/8 to any
block in quick on xl1 from 127.0.0.0/8 to any
pass in all
Filtrování dle in/out se vždy vztahuje k interface/zařízení. Na každém interface můžeme pakety filtrovat dvěma směry - dovnitř/ven - in/out. Pravidla v uvedeném příkladu blokují pakety se zdrojovými adresami z neroutovatelných sítí směrem k interface označeném xl1 (in).
block in quick on xl1 from 192.168.0.0/16 to any
block in quick on xl1 from 172.16.0.0/12 to any
block in quick on xl1 from 10.0.0.0/8 to any
block in quick on xl1 from 127.0.0.0/8 to any
pass in all
Filtrování IMCP paketů
Následující pravidlo říká: Blokuj a loguj icmp pakety odkohokoli kamkoli směrem k interface xl1.
block in log quick on xl1 proto icmp from any to any
Chcete-li povolit traceroute a ping odkudkoli k cílové ip adrese, či adresnímu prostoru a blokovat ostatni ICMP pakety:
pass in quick on xl1 proto icmp from any to nase_ip_nebo_subnet icmp-type 0 keep state
pass in quick on xl1 proto icmp from any to nase_ip_nebo_subnet icmp-type 11 keep state
block in log on xl1 proto icmp from any to any
Filtrování UDP a TCP prokolu
Pravidlo blokuje a loguje příchozí pakety na rozhraní xl1 odkudkoli k cílové ip adrese, či adresnímu prostoru, kde protokol je tcp a port 22.
block in log quick on xl1 proto tcp from any to nase_ip_subnet port = 22
Ipf taktéž umožňuje kombinaci voleb protokolu tcp a udp dohromady
block in log quick on xl1 proto tcp/udp from any to nase_ip_subnet port = 111
Skupiny pravidel vám umožňují psát pravidla ve stromovém tvaru, namísto lineárního listu pravidel. Pokud nemá paket nic společného s pravidly určenými k filtrování paketů, řekňeme na interface xl1, nebudou pravidla prohledávána při provozu na interface např. xl2.
Jednoduchý příklad
block out quick on xl1 all head 10
pass out quick proto tcp from any to 20.20.20.64/26 port = 80 flags S keep state group 10
block out on xl2 all
V tomto krátkém příkladu vidíme využitelnost skupin pravidel. Pokud paket není určen pro rozhraní xl1, nebude proti pravidlům patřící do skupiny 10 (group 10) kontrolován. Pokud paket prochází přes rozhraní xl1, syntaxe quick nám zkrátí budoucí proces na kořenové úrovni (root level, rule group 0) a zaměří se na kontrolu paketu proti pravidlu náležící skupině 10.
Přeposíláme-li, bokujeme-li pakety, typicky se chováme jakou router, který by měl snižovat TTL u procházejících paketů, čímž dáváme na vědomí, že v cestě k cíli je jakýsi další HOP (skok) - router, paket filter forwardující pakety apod. Můžeme skrýt existenci daného stroje na síti, před aplikacemi jakou jsou unixový traceroute, který používá UDP pakety s různými hodnotami TTL k mapování skoků (HOPů) mezi dvěma stranami, pravidlem:
block in quick on interface fastroute proto udp from any to any port 33434 >< 33465
Syntaxe fastroute signalizuje ipfilteru, aby nepředával pakety k routování Unix IP stack-u, což má za následek snižení TTL. Paket bude poslán na výstupní rozhraní ipfiltrem a k snížení TTL nedojde. Ipfiltr samozřejmě využije systémovou routovací tabulku k zjištění výstupního interface, ale funkci routování přebírá v tuto chvíli ipfiltr. Funkce ipfiltru - fastroute by měla být použita skutečně jenom tam, kde je potřeba, neboť jádra jednotlivých OS disponují dokonalejším/vyspělejším routovacím kódem než ipfiltr.
Stavový paket filtr - TCP
Většina paket filtrů disponuje volbou 'established', která slouží k povolení již probíhajícího tcp spojení. Kontrola zda se jedná o již probíhající spojení či ne, se provádí čtením 'flagu' v tcp paketu. Proto toto nefunguje u UDP a ICMP protokolu. Tato metoda není nejbezpečnější, neboť kdokoli může flag v tcp paketu zflašovat a tím náš paket filtr zmást.
Tato funkce je v ipf nazývána keep state a funguje jak pro pakety typu TCP, tak i pro UDP a ICMP. Doposud probíhala kontrola paketů takto: Nejprve přijde paket na vstup, následně jsou čtena pravidla vstupní, potom je paket předán na výstup a nakonec jsou čtena pravidla výstupní. Co se stane nyní: paket přijde na vstupní rozhraní, kontrola stavové tabulky (state table), 'možná' budou přečtena vstupní pravidla (záleží na konfiguraci), paket odchází, kontrola stavové tabulky, 'možná' budou přečtena výstupní pravidla (opět záleží na konfiguraci).
Protože má každé spojení začátek, prostředek a konec, postačí když budeme na spojení kontrolovat pouze jeho začátek. Zde je jednoduchý příklad, stroj povoluje pouze tcp pakety určené ssh serveru, nic jiného.
block out quick on tun0 all
pass in quick on tun0 proto tcp from any to 20.20.20.1/32 port = 22 keep state
Jakmile první SYN paket dorazí k ssh serveru, status je vytvořen a spojení povoleno.
Status (state) je velmi užitečný pouze při správné konfiguraci. Podívejme se na následující příklad.
pass in quick on tun0 proto tcp from any to 20.20.20.1/32 port = 23
pass out quick on tun0 proto tcp from any to any keep state
block in quick all
block out quick all
Povolili jsme příchozí spojení na port 23 a odchozí spojení kamkoli. Příchozí telnet pakety jsou povoleny a při odchozím směru se vytvoří záznam o spojení do stavové tabulky a spojení je povoleno. Tudíž vše funguje správně. Ale pravda je taková, že po 60 sekundách nečinnosti bude záznam o stavu uzavřen. Toto je způsobeno tím, že nebyla dostupná informace o původním SYN paketu určém portu 23. Informace byla pouze o ACK paketu. Ipf je výborné pro kontrolu TCP spojení od začátku do konce, ale ne pro kontrolu paketů od prostředku. Správná definice původních pravidel:
pass in quick on tun0 proto tcp from any to 20.20.20.1/32 port = 23 keep state
pass out quick on tun0 proto tcp from any to any keep state
block in quick all
block out quick all
Tento sled pravidel způsobí zapsání prvního (SYN) paketu do stavové tabulky a vše bude fungovat, jak bylo očekáváno. Aktuální stav stavové tabulky můžeme sledovat příkazem ipfstat -s (obdoba příkazu top).
Stavový paket filtr - UDP
UPD je bezstavový protokol, proto je o něco obtížnější uplaňovat 'keep state'. Funkčnost si nejlépe předvedeme na příkladu:
Příkazem nslookup www.3com.com je vygenerován DNS paket 17:54:25.499852 20.20.20.1.2111 > 198.41.0.5.53: 51979+. Paket má zdrojovou IP adresu 20.20.20.1, port 2111, určen k 198.41.0.5, port 53. 60-ti sekundový stavový záznam je vytvořen. Pokud paket přijde zpět od 198.41.0.5 port 53 určen pro 20.20.20.1, port 2111 v daném čase, paket bude povolen.
Stavový paket filtr - ICMP
Jsou dva druhy ICMP zpráv: požadavky a odpovědi. Pokud použijeme pravidlo:
pass out on tun0 proto icmp from any to any icmp-type 8 keep state
k povolení echo požadavků (obvykle ping), bude zpětně příchozí paket icmp-type 0 povolen. Stavový záznam je defaultně nastaven na 60 sekund a status 0/0. Pakety jsou oproti UDP navíc kontrolovány i dle nákladu (packet payload).
Zápis pravidel:
pass in quick on tun0 proto tcp from any to 20.20.20.1/32 port = 23 keep state
pass out quick on tun0 proto tcp from any to any keep state
block in quick all
block out quick all
není zcela vyhovující neboť nám prvními dvěma pravidly mohou procházet nejen pakety navazující spojení (SYN flag), ale i FIN, ACK, RST apod. Proto zápis upravíme:
pass in quick on tun0 proto tcp from any to 20.20.20.1/32 port = 23 flags S keep state keep frags
pass out quick on tun0 proto tcp from any to any keep state flags S keep frags
block in log quick all
block out log quick all
Nyní jsou povoleny pouze pakety navazující spojení a fragmentované pakety. Tímto neuspějí druhy scanů jakou jsou FIN a XMAS.
Je slušností na nežádoucí spojení vygenerovat ICMP zprávu a zaslat ji žadateli o spojení. Na tcp pakety je záhodno odpovídat TCP RST - return-rst, tímto zašleme zpět na zdrojovou IP adresu zprávu o resetu spojení. U udp paketů je vhodné odpovídat ICMP zprávou 'port unreachable' - return-icmp(port-unr). port-unr můžeme nahradit zprávou jiného typu. Používání return-icmp není úplně ideální, protože bychom zpět zasílali ICMP zprávu se zdrojovou IP adresou paket filtru. Toto bylo ošetřeno v ipfilter 3.3 - return-icmp-as-dest. Příklady použití:
block return-rst in log proto tcp from any to 20.20.20.0/24 port = 23
block return-icmp(port-unr) in log quick on tun0 proto udp from any to 20.20.20.0/24 port = 111
block return-icmp-as-dest(port-unr) in log quick on tun0 proto udp from any to 20.20.20.0/24 port = 111
U return-icmp je defaultně nastaveno odesílání ICMP zprávy 'port-unreachable'.
Pro umožnění logování je potřeba mít jádro zkompilované s options IPFILTER_LOG. Taktéž musí existovat zařízení /dev/ipl, ze kterého programem ipmon čteme pakety vyhovující pravidlům s klíčovým slovem log, které následně logujeme (syslog, logfile apod., viz další kapitola). Příklad:
block out log quick on xl1 from 127.0.0.0/8 to any
Jakým způsobem budeme logovat, ovlivňujeme při spouštění programu ipmon. Volba -s způsobí přeposílání logovaných paketů syslog démonu. Existují tzv. 'log levels', dle kterých máme možnost logované pakety v syslogu 'třídít'. Např.:
block in log level auth.info quick on tun0 from 20.20.20.0/24 to any
block in log level auth.alert quick on tun0 from 20.20.20.0/24 to any
Dále máme k dispozici možnost log body a log first. Při použití ipf loguje prvních 128 bitů z těla paketu. Volba log first způsobí pouze logování prvního paketu.
Typické použití NAT je pro překlad adres (v linuxu např. tzv. maškaráda)
Překlad adres (mapování mnoha adres do jedné)
Např.:
map tun0 192.168.1.0/24 -> 20.20.20.1/32
Pokud nám není známa IP adresa interface, použijeme v pravidle 0/32. Překlad rozsahu ip adres do jedné a do rozmezí portů 20000 - 30000.
map tun0 192.168.1.0/24 -> 0/32 portmap tcp/udp 20000:30000
map tun0 192.168.1.0/24 -> 0/32 portmap tcp/udp auto
Automatická detekce volných portů k alokaci. Toto se vztahuje pouze k protokolům tcp, udp, tcp/udp. Jako doplňek k předchozím 2 pravidlům můžeme použít (řádek se znakem *):
map tun0 192.168.1.0/24 -> 0/32 portmap tcp/udp 20000:30000
* map tun0 192.168.1.0/24 -> 0/32
Překlad adres (mapování mnoha adres do rozsahu adres)
map tun0 192.168.0.0/16 -> 20.20.20.0/24 portmap tcp/udp 20000:60000
Pokud potřebujeme, aby vícenásobné spojení bylo navazováno ze stejné zdrojové IP adresy, zapíšeme pravidlo:
map-block tun0 192.168.1.0/24 -> 20.20.20.0/24
nebo
map-block tun0 192.168.1.0/24 -> 20.20.20.0/24 auto
map-block tun0 192.168.1.0/24 -> 20.20.20.0/24 ports 64
Poslední pravidlo určuje počet alokovatelných portů pro každou IP adresu z daného rozsahu IP adres.
Překlad adres (mapování 1:1)
bimap tun0 192.168.1.1/32 -> 20.20.20.1/32
Policy NAT
Pokud chceme použít NAT vždy, kromě komunikace se specifickou sítí, použijeme:
map tun0 from 192.168.1.0/24 ! to 5.0.0.0/20 -> 20.20.20.1/32
nebo
map tun0 from 192.168.1.5/32 port = 5555 to 1.2.3.4/32 -> 20.20.20.2/32
map tun0 from 192.168.1.0/24 to 5.0.0.0/20 -> 20.20.20.2/32 portmap auto
Přesměrování
Např.: rdr xl0 62.24.77.9/32 port 8008 -> 192.168.0.2 port 22 tcp způsobí přeposílání tcp paketů určených pro 62.24.77.9/32 port 8008 na 192.168.0.2 port 22. Další příklady:
rdr xl0 62.24.77.9/32 port 8008 -> 192.168.0.2 port 22 tcp
rdr tun0 20.20.20.0/24 port 31337 -> 127.0.0.1 port 31337 udp
rdr tun0 from 10.1.1.1/32 to 20.20.20.5/32 port = 80 -> 192.168.0.5 port 8001
rdr tun0 from 10.1.1.1/32 port = 12345 to 20.20.20.5/32 port = 80 -> 192.168.0.5 port 8002
rdr tun0 20.20.20.5/32 port 80 -> 20.20.20.6 port 80 tcp
Pravidlo rdr tun0 20.20.20.5/32 port 80 -> 20.20.20.6 port 80 tcp nebude fungovat za předpokladu, že stroje .5 a .6 jsou na stejném LAN segmentu.
Podpora Transparetních proxy
rdr xl0 0.0.0.0/0 port 21 -> 127.0.0.1 port 21
Aplikační proxy servery
Například FTP. Můžeme zajistit, aby náš paket filtr, který při kontrole procházejících paketů zjistil, že se jedná o aktivní FTP spojení, vytvořil dočasná pravidla, podobně jako tomu je u keep state a tím umožnil funkčnost FTP data spojení. Čehož dosáhneme následujícím pravidlem.
map tun0 192.168.1.0/24 -> 20.20.20.1/32 proxy port ftp ftp/tcp
Vždy je potřeba umístit toto proxy pravidlo před jakékoli pravidlo týkající se přesměrování portů (portmap pravidla), jinak se jako první uplatní pravidlo s portmap (hlavička v paketu se přepíše) dříve, než proxy pravidlo. Mějte na paměti, že ipnat pravidla se uplatňují (kontrolují) jako první v pořadí, tzv. firt-match rules. IPF ftp proxy podporuje "FTP nat server", nedoporučuje se její používání z bezpečnostních důvodů, viz http://www.false.net/ipfilter/2001_11/0273.html.
Použití NAT jako Load Balancer
Pomocí klíčového slova round-robin můžeme námi definovaný provoz přeposílat několika hostům - Load Balancer.
rdr tun0 20.20.20.5/32 port 80 -> 192.168.0.5, 192.168.0.6, 192.168.0.7 port 8000
Tímto pravidlem budeme přeposílat veškerý provoz určený pro 20.20.20.5/32 port 80 na stroje 192.168.0.5, 192.168.0.6, 192.168.0.7 port 8000.
Naleznete v manuálových stránkách ipfstat(8), ipmon(8).
IP Forwarding:
OpenBSD:
net.inet.ip.forwarding=1
FreeBSD:
net.inet.ip.forwarding=1
NetBSD:
net.inet.ip.forwarding=1
Manipulace s porty:
OpenBSD:
net.inet.ip.portfirst = 25000
FreeBSD:
net.inet.ip.portrange.first = 25000
net.inet.ip.portrange.last = 49151
NetBSD:
net.inet.ip.anonportmin = 25000
net.inet.ip.anonportmax = 49151
Další užitečné hodnoty:
OpenBSD:
net.inet.ip.sourceroute = 0
net.inet.ip.directed-broadcast = 0
FreeBSD:
net.inet.ip.sourceroute=0
net.ip.accept_sourceroute=0
NetBSD:
net.inet.ip.allowsrcrt=0
net.inet.ip.forwsrcrt=0
net.inet.ip.directed-broadcast=0
net.inet.ip.redirect=0
FreeBSD specifické ipf sysctl možnosti:
net.inet.ipf.fr_flags: 0
net.inet.ipf.fr_pass: 514
net.inet.ipf.fr_active: 0
net.inet.ipf.fr_tcpidletimeout: 864000
net.inet.ipf.fr_tcpclosewait: 60
net.inet.ipf.fr_tcplastack: 20
net.inet.ipf.fr_tcptimeout: 120
net.inet.ipf.fr_tcpclosed: 1
net.inet.ipf.fr_udptimeout: 120
net.inet.ipf.fr_icmptimeout: 120
net.inet.ipf.fr_defnatage: 1200
net.inet.ipf.fr_ipfrttl: 120
net.inet.ipf.ipl_unreach: 13
net.inet.ipf.ipl_inited: 1
net.inet.ipf.fr_authsize: 32
net.inet.ipf.fr_authused: 0
net.inet.ipf.fr_defaultauthage: 600
Umožňuje duplikaci a odeslání paketů do "jiné sítě" dle definovaných pravidel.
pass out on xl3 dup-to ed0:192.168.254.2 from any to any
Přepošle veškerý provoz směrem ven prochájící přes rozhraní xl3 na interface ed0 a ip adresu 192.168.254.2.
TCP filtering (Postscript)
Michal Kutnohorský <michal at FreeBSD.cz> http://www.FreeBSD.cz/~michal