Vybrane stati ze sitoveho stacku
Dan Lukes
dan at obluda.cz
Sun Jan 31 13:36:31 CET 2010
On 01/31/10 11:42, Miroslav Lachman:
> Myslim, ze to bylo perfektne srozumitelne i bez oblacku. Minimalne pro
> me to bylo velmi zajimave. Jen mi v tom nejak chybi hook pro PF (jelikoz
> jsem uzivatelem PF ;]), vidim tam jen hooky pro IPFW a IPFilter.
Ja jsem to nedobre oznacil a proto to srozumitelne nebylo.
To, co bylo popsano jako "hook pro ipfilter" se asi lepe melo jmenovat
"hook pro pfil".
To je misto, kde jsou pripojene vsechny registrovatelne packet-filtry.
Hook specificky pro ipfw tam je, ale jen na L2 - tam jiny filtr nepusobi.
Dobre, ten hook pro pfil jeste teda rozepisu.
> Skoda, ze takovych podobnych "strucnych" popisu, co se jak v systemu
> odehrava, neni na netu vic.
Chapu, ze je to velmi prijemne mit "po kupe" - a ze se takhle na to
podiva i nekdo, koho vec zajima jen "ze zvedavosti" a zrovna tu znalost
bezpodminecne nutne nepotrebuje.
Na druhou stranu, je otazka, jak vysokou "pridanou hodnotu" ma podobny
popis vuci tomu, ze se na to podivas rovnou do zdrojaku. Kter jsou navic
vzdy aktualni, zatimco ten strucny popis co jsem dodal ja byl ze 7.2 a
nejenze mozna neplati pro 6.x, ale treba neni aktualni ani pro 8.x ...
========================================
Jak tedy funguje to filtrovani.
Na L2 funguje jediny filtr, a to je ipfw. K tomu neni celkem co dodat.
Na L3 ma FreeBSD pripraveny genericky zaklad. Ma centralne vedeny seznam
seznamu filtru. Seznam seznamu proto, ze zde mame ruzne tridy filtru a v
ramci jedne tridy pak muze existovat nekolik filtru, ktere vsechny maji
zajem dany provoz filtrovat.
V teto chvili (a na verzi 7.2) je realne pouziva jediny typ -
PFIL_TYPE_AF a dve ruzne AF: AF_INET a AF_INET6
Jinymi slovy - mame nekolik (realne dva) seznamu filtru. Jeden se
jmenuje inet_pfil_hook a druhy inet6_pfil_hook
Filtry se pak registruji do jednoho nebo vice seznamu. Samotny filtr
registruje zvlast vstupni bod pro filtrovani "IN" a pro filtrovani "OUT"
(muze ale registrovat i jen jeden z nich). Do seznamu registrovanych IN
filtru se novy vklada na zacatek seznamu, u OUT filtru pak na konec.
Ve vhodnem miste, kde je treba filtrovat, se zavola phil_run_hooks (v
mem popisu je to prave to misto, kde je napsano "hook pro ipfilter"),
kteremu se krome paketu a dalsich informaci predava take konkretni
seznam jehoz filtry maji byt spusteny. Spousteji se podle poradi v jakem
jsou ve fronte, to znamena, ze v pripade IN se k paketu dostanou nejprve
naposled registrvane filtry zatimco u OUT jsou prvni ty sluzebne nejstarsi.
Retezec spousteni se prerusi a dalsi filtr v seznamu uz se nespousti pokud:
a) filtr paket pohlti
b) volana filtrovaci funkce vratila nenulovou navratovou hodnotu (chyba)
Celkovym vysledkem volani seznamu filtru je navratova hodnota posledni
volane filtrovaci funkce a puvodni pripadne modifikovany paket, pripadne
paket "zadny" pokud byl filtrovanim pohlcen.
Zbyva vyresit jake filtry se registruji a v jakem poradi. A to uz je
jednoduche. Grep mi poseptal, ze:
DECLARE_MODULE(ipfilter, ipfiltermod, SI_SUB_PROTO_DOMAIN, SI_ORDER_ANY);
DECLARE_MODULE(pf, pf_mod, SI_SUB_PROTO_IFATTACHDOMAIN, SI_ORDER_FIRST);
DECLARE_MODULE(ipfw, ipfwmod, SI_SUB_PROTO_IFATTACHDOMAIN, SI_ORDER_ANY
- 256);
Jelikoz:
SI_SUB_PROTO_DOMAIN<SI_SUB_PROTO_IFATTACHDOMAIN
a pri rovnosti pak
SI_ORDER_FIRST<SI_ORDER_ANY - 256
plati, ze poradi registrace je ipfilter-pf-ipfw a v tomto poradi filtry
prochazi OUT pakety. IN pakety prochazeji v poradi opacnem.
Toz tak.
Dan
More information about the Users-l
mailing list