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
--
FreeBSD mailing list (users-l@freebsd.cz)
http://www.freebsd.cz/listserv/listinfo/users-l

Odpovedet emailem