Vybrane stati ze sitoveho stacku (was: Jaily a jedna IP)

Dan Lukes dan at obluda.cz
Fri Jan 29 22:09:26 CET 2010


On 01/29/10 18:32, Miroslav Prýmek:
> Druhym ucelem je to, ze chci mit (relativne) neduveryhodneho spravce jailu, takze by se mi
> potencialne hodilo omezit, co muze a nemuze na siti provadet.

No, az takovou duveru jsem v jail nikdy neziskal, abych mel dojem, ze me 
ochrani pred nekym, kdo nechce, abych se pred nim ochranil.

Jail preci jen neni VM ...

>> Pruchod packetu routerem (pokud je zdrojovym nebo cilovym strojem router, odmysli si prislusnou cast grafu od nebo po kernel.


Jako zaklad dobry. Tak ja pritam nejake detaily (ale nebudu malovat). A 
omezim se (nejmene pro ted) na ethernet interface a IPv4 pakety.

hardware->prijaty paket->ether_input:

  -----------------------------------
ether_input:

1. vyrobi se MAC label
2. kopie pro BPF
3. pokud je interface v rezimu "MONITOR" paket se zahodi ted
4. pokud je paket IFT_IEEE8023ADLAG ==>hook pro lagg
5. pokud je paket VLAN (a jeste nebyl odVLANovan hardwarove) tak se
    odVLANuje
6. ==>hook pro netgraph
7. je prijimaci interface soucast bridge ?
     ==>hook pro if_bridge
8. ==>hook pro ether_ipfw
9. pro nenulove VLAN predat na vstup interface vlan
A. je-li paket IP hook pro ip_fastforward
B. je-li paket ARP a interface NOARP tak zahod
C. je-li paket IPX ==> hook pro ef
D. je-li paket neznameho typu, hook pro netgraph
E. predej na vrstvu L3 (formalne vyvolanim SW preruseni)
  -----------------------------------

SW preruseni pro obsluhu prichozich L3 paketu rozhodne, jestli je mozne 
zavolat vstupni rutinu prislusneho protokolu hned a pak ji zavola nebo 
paket vlozi do fronty pro pozdejsi zpracovani


ip_fastforward
  -----------------------------------
1. je paket z nebo pro 127.0.0.0/8 ? Zahod
2. ==> hook pro ALTQ
3. test dle sysctl net.inet.ip.process_options
4. pokud paket ma optiony a ty se maji zpracovat ?
    nelze ho vyridit v ramci fastforward =< HOOK_RETURN
5. je paket z/na broadcast nebo multicast (at na L2 nebo L3),
    linklocal, INADDR_ANY ?
    nelze ho vyridit v ramci fastforward =< HOOK_RETURN
6. je pro nekterou z adres tohoto stroje ?
    nelze ho vyridit v ramci fastforward =< HOOK_RETURN
7. ==> hook pro ipfilter(IN)
8. je pro nekterou z adres tohoto stroje ?
    nebo
    IPFIREWALL_FORWARD && ipfw nastavilo M_FASTFWD_OURS ?
    oznac paket jako M_FASTFWD_OURS a =< HOOK_RETURN
9. najdi route
A. ==> hook pro ipfilter(OUT)
B. je pro nekterou z adres tohoto stroje ?
    oznac paket jako M_FASTFWD_OURS a =< HOOK_RETURN
C. zmenil ipfilter cilovou adresu ?
    najdi route
D. cilovy interface neni UP ? zahod
E. je-li treba a dovoleno, fragmentuj
F. predej paket nebo fragmenty k odeslani
    driveru ciloveho interface
  -----------------------------------

ip_input
  -----------------------------------
1. je paket z nebo pro 127.0.0.0/8 ? Zahod
2. ==> hook pro ALTQ
3. ==> hook pro ipsec_filtertunnel, po navratu ->bod 6
4. ==> hook pro ipfilter(IN)
5. IPFIREWALL_FORWARD a zadan forward ?
    predej ->ip_forward
6. zpracuj routing optiony (vc. pripadneho zahozeni paketu)
7. bezi RSVP a paket je RSVP ?
    ->paket je LOKALNI
8. paket je pro unicast a pocitac nema zadnou IP adresu
    ->paket je LOKALNI
9. je pozadovan test na to zda src ip odpovida vstupnimu interface ?
    nejsme router, paket neni lokalni, nenastalo ipfw fwd ?
    proved test a pri neshode zahod
A. je paket pro broadcast nektere IP site
    na interfacu pres ktere prisel ?
    ->paket je LOKALNI
B. je link-local ? zahodit
C. paket pro multicast a jsme mrouter ?
      ==>hook pro ip_mforward
D. paket je multicast a jsme k prijmu takoveho prihlaseni
    na interface ze ktereho prisel ?
      ->paket je LOKALNI
E. paket pro INADDR_BROADCAST nebo INADDR_ANY ?
      ->paket je LOKALNI
F. paket prisel pres FAITH ?
     podle sysctl net.inet.ip.keepfaith
     bud' paket LOKALNI nebo zahod
# zde vime, ze paket neni pro nas
G. nejsme router ?
     zahod
H. ==> hook pro ipsec_fwd
I. predej ->ip_forward
  ...................................
kdyz je paket LOKALNI:
1. ipstealth ?
    zpracuj non-routing optiony (vc. pripadneho zahozeni paketu)
2. fragmentovan ?
    ==> hook pro ip_reass
3. ==> hook pro ipsec_input
4. predej ->L4 vrstve
  -----------------------------------

ip_reass
  -----------------------------------
1. mas vsechny fragmenty ?
    poskladej z nich cely paket a =< HOOK_RETURN
2. uloz si fragment a ukonci zpracovani
  -----------------------------------

  *************************************************

No, to uz by snad zatim stacilo. Snad je to alespon trochu srozumitelne. 
Popis pro jednoduchost nezahrnuje technicke testy (na delku paketu, 
hlavicek, spravnost CRC a pod.). Jedinou vysvetlivku venuji oznaceni 
"hook pro" - to znamena, ze paket je predan komusi mimo a ten paket muze 
pozmenit a vratit, vratit nezmeneny, ale take finalne zpracovat sam, 
nebo zahodit.

Jestli to nekomu k necemu bude, tim lip. Jestli to nikomu k nicemu neni, 
tak jsem si to ozivil alespon ja (a konecne uz vim k cemu presne je a 
jak funguje ten fast-forward).

Jestli to nekdo chce prevest do nejake citelnejsi a/nebo srozumitelnejsi 
formy, necht' si poslouzi. Ja chapu, ze rozmalovany do oblacku a 
diagramu by to bylo daleko uzitecnejsi, ale na to nemam silu.

Jestli nekdo chce rozepsat sam nektery z nerozepsanych hooku nebo jinou 
zajimavou cast (treba downstream nebo forwarding - tohle byl vlastne jen 
upstream), necht' si klidne poslouzi. Pokud se nikdo k nicemu nebude 
mit, ale bude z diskuse (pokud se k tomu nejaka rozvine) jasne, ze tu je 
o nejakou konkretni cast eminentni zajem (treba proto, ze je obzvlaste 
nejasna a/nebo dulezita) mohlo by me to vyprovokovat rozepsat nekdy tu. 
Pokud se zadna diskuse konat nebude, tak uz spis nic neudelam, protoze 
takova zabava to zas neni.

Prezentovane udaje si necini narok na presnost, uplnost a spravnost obecne.

						Dan



More information about the Users-l mailing list