IPFW - pravidla

Aleš Kotmel Kotmel at annexnet.cz
Thu Jun 15 07:52:53 CEST 2000


Děkuji za obsáhlé školení o funkci natd, ale jeho funkci znám.

Já si chci napsat pravidla, na základě kterých přesně řeknu, které pakety
odejdou a které pakety přijdou.

Ale pravidlo platné pro vstup paketů typu 

allow tcp from any to any

to není filtrovací pravidlo, to jsou otevřené dveře.
Můžete mi tedy prosím ukázat, jak vy by jste napsal pravidla podle kterých
mají pakety odejít na www server a přijít pakety z www serveru ?
Pravidlo pro odchod paketů bude vypadat například takto:

allow tcp from 195.250.137.147 to any 80 out xmit fxp0

A jak bude vypadat pravidlo pro příchod paketů?

Děkuji za odpověď.


-----Původní zpráva-----
Od: Martin Machacek [mailto:mm at i.cz]
Odesláno: 14. června 2000 17:46
Komu: users-l at freebsd.cz
Předmět: RE: IPFW - pravidla



On 14-Jun-00 Aleš Kotmel wrote:
> Při definování filtrovacích pravidel mohu dle své potřeby definovat, které
> typy paketů a kam mohou odejít, např.:
> 
> allow tcp from 195.250.137.147 to any 80 out xmit fxp0

Je to ještě obecnější. Filtrovacími pravidly říkám, které pakety přes svůj
počítač pustím a které ne. Rozhodnutí mohu řídit podle řady parametrů a
jedním
z nich je i síťové rozhraní, přes které byl paket přijat nebo přes které se
bude vysílat. Filtrační pravidla se vyhodnocují hned po přijetí a znovu
těsně před vysláním.

> Ale jak pak má vypadat pravidlo, kterým chci za zcela stejných podmínek
> rozhodnout, jaké pakety přijmu ?

Např. symetrické k výše uvedenému pravidlu je:

allow tcp from any 80 to 195.250.137.147  recv fxp0

Toto pravidlo jste i v konfiguraci měl. Jenže, pravidla se vyhodnocují v
pořadí, ve kterém jsou uvedena (pominuli direktivu skipto) a první pravidlo,
jehož podmínka vyhoví se uplatní a dál se již nevyhodnocuje, s vyjímkou
divert
pravidel, kdy se celá báze pravidel projede znovu, ale již bez divert
pravidel. Ve Vaší konfiguraci pravidlu pro příjem TCP paketů z portu 80
předcházelo pravidlo pro divert paketů do natd. Natd s pakety dělá to, že v
nich (dle aktuálního stavu překladové tabulky) přepisuje zdrojové resp.
cílové
adresy a (pokud se přepis podařil = byl záznam v překladové tabulce), tak je
opět vrací jádru systému. To právě provede znovuvyhodnocení filtrovacích
pravidel. Takže, co se ve Vaší konfiguraci děje, řekněme pro TCP spojení na
port 80 na adresu vně Vaší chráněné sítě. Dejme tomu, že iniciátorem spojení
je
stroj s adresou 192.168.1.14 a cílem (serverem) je 195.113.19.84.

1) klient uvnitř Vaší sítě vyšle požadavek na navázání spojení, ted paket s
   src=192.168.1.14 port=1030 dst=195.113.19.84 port=80
2) paket dorazí na firewall, kde prvním odpovídajícím pravidlem (ve Vaší
   původní konfiguraci) bylo divert pravidlo - tudíž paket je předán natd
3) natd přepíše zdrojovou adresu (a potenciálně i zdrojový port) na vnější
   adresu Vašeho firewallu, tedy vznikne paket:
   src=195.250.137.147 port=1030 dst=195.113.19.84 port=80
   Zároveň si natd poznamená, že v příchozích paketech z adresy
195.113.19.84
   portu 80 na adresu 195.250.137.147 port 1030 má přepsat cílovou adresu na
   192.168.1.14
4) znovu se vyhodnotí báze pravidel, tentokrát již bez divert pravidel a
prvním
   vyhovujícím pravidlem bude pravidlo
   allow tcp from 195.250.137.147 to any 80 out xmit fxp0
   a tudíž paket je povolen a vyslán ven přes rozhraní fxp0 (rozhraní se
ještě
   předtím zjistí z routovací tabulky)
5) server 195.113.19.84 odpoví a tedy k firewallu přijde paket
   src=195.113.19.84 port=80 dst=195.250.137.147 port=1030
6) jako první se opět uplatní divert pravidlo a paket je tedy předán natd
7) natd se podívá do aktuální překladové tabulky a zjistí, že má přepsat
   cílovou adresu na 192.168.1.14 a taky to udělá a vznikne tak paket
   src=195.113.19.84 port=80 dst=192.168.1.14 port=1030
   a ten předá zpátky jádru
8) znovu se vyhodnotí báze pravidel (opět bez divert pravidel) a první
   vyhovující pravidlo bude:
   allow log logamount 100 tcp from any to any
   Pravidlo:
   allow tcp from any 80 to 195.250.137.147  recv fxp0
   nevyhovuje, protože nesedí cílová adresa
9) paket je vyslán dále přes rozhraní fxp1 (na což se přislo z routovací
   tabulky) a zároveň je zapsán záznam do logu

Výše uvedený popis je trošku zjednodušený, protože jsem (čistě z
lenosti) vynechal druhý průchod paket filtrem tesně před odeslání. Pro
ilustraci v čem je Váš problém to ani není podstatné.

> Pravidlo:
> 
> allow log logamount 100 tcp from any to any
> 
> mi rozhodně takovou možnost nedává ....

Samozřejmě, že ne. To jenom říká, že všechny TCP pakety odkudkoliv kamkoliv
jsou
povolené a má se o nich udělat zázanm do logu, avšak maximálně stokrát. V
daném
kontextu toto pravidlo zajistilo, že TCP pakety již prošlé překladem byly
povoleny.

> Přiznám se, že vašemu výkladu zcela nerozumím. Při odchodu jasně řeknu
jaké
> pakety mohou odejít, ale při příchodu akceptuji úplně všechny????

Neakceptujete všechny, ale pouze ty, pro které je záznam v překladové
tabulce
natd. Pokud totiž propaket není záznam, tak se již nevrátí jádru a natd ho
prostě zahodí. Záznamy v překladové tabulce natd vznikají (pokud je tesy
explicitně nezkonfigurujete) POUZE na základě komunikace zevnitř. To kde je
vnitřek a kde vnějšek se říká pomocí identifikace síťového rozhraní na
kterém
se má překlad provádět v konfiguraci natd (parametr -n). Vše je popsáno v
mauálové stránce pro natd a taktéž ve FreeBSD Handbook, viz:

http://www.freebsd.org/handbook/firewalls.html
 
> Tomu nerozumím.

Doporučuji studium odpovídající literatury.
 
> Děkuji za případnou odpověď.

Rádo se stalo,

        Martin 

---
[PGP KeyID F3F409C4]



More information about the Users-l mailing list