IPFW a kernet NAT

Petr Valenta xvalen at gmail.com
Thu Aug 9 13:44:00 CEST 2012


Ze paket prochazi filtrem v mem pripade dvakrat je mi jasne,..manualovou
stranku jsem cetl nekolikrat a i prave ono skipto v plne mire pouzivam,
i kdyz to z me otazky neni zrejme, protoze jsem poslal pouze fragment
pravidel.

Asi jsme si uplne nerozumneli, tak to zkusim popsat jinak:

Poslu paket z lokalni site do DMZ a projde to nasledujicimi pravidly:


prvni pruchod:
$fwcmd add 2900 skipto 5000 all from any to any in via $lan_if
$fwcmd add 5000 count all from any to any in recv $lan_if
$fwcmd add 5100 allow all from any to any in recv $lan_if

druhy:
$fwcmd add 2800 skipto 11000 all from any to any out via $dmz_if
$fwcmd add 11000 count all from any to any out xmit $dmz_if
$fwcmd add 11100 skipto 26000 all from any to any out recv $lan_if xmit
$dmz_if         // skok do NATu pro LAN
$fwcmd add 26000 count all from any to any via $dmz_if
$fwcmd add 26200 nat 2 all from any to any via $dmz_if

konfigurace NATu pro $dmz_if:
$fwcmd nat 2 config ip $public_ip deny_in same_ports



cesta paketu zpet:
prvni pruchod:
$fwcmd add 2700 skipto 10000 all from any to any in via $dmz_if
$fwcmd add 10000 count all from any to any in recv $dmz_if
$fwcmd add 10100 allow all from any to any in recv $dmz_if setup //
povoli SYN, !ACK spojeni z DMZ do internetu
# SYN+ACK pakety se prelozi zpet, pokud jsou v nat tabulce a otaguji se
$fwcmd add 10200 nat 2 log tag 2 all from any to any in recv $dmz_if

druhy pruchod:
$fwcmd add 3000 skipto 6000 all from any to any out via $lan_if
$fwcmd add 6000 count all from any to any out xmit $lan_if
$fwcmd add 6200 allow all from any to any out recv $dmz_if xmit $lan_if
tagged 2 // otagovane povoli

Kazpopadne vyse zmineny system pravidel funguje pouze pro TCP a ja
hledam reseni i pro ICMP a UDP

Ted uz to bude snad lepe pochopitelne :)

Diky
P.

Dne 9.8.2012 11:17, Zbyněk Burget napsal(a):
> Myslim, ze to s tak jemnym filtrovanim, jako je napr. podle SYN
> priznaku, je az zbytecne prehnane.
> Mozna bude stacit si uvedomit, ze kazdy packet prochazejici skrz router,
> vchazi do firewallu minimalne dvakrat (v pripade filtrovani na urovni
> layer2 ctyrikrat) - jednou (dvakrat) na vstupnim interface a jednou
> (dvakrat) na interface vystupnim.
> Mne vzdycky stacilo si ve firewallu provoz pomoci skipto rozhodit do
> ruznych vetvi firewallu a tam je filtrovat tim nejjednodussim zpusobem.
> NAT se pak samozrejme provadi na vnejsim interface a ruzne filtrovani,
> co kam ma nebo nema projit na vnitrnim. Jde to i na vnejsim, jen si
> clovek musi hlidat, v jake casti firewallu je jaka IP adresa (pred / po
> prekladu).
> V mem pripade vypadaji pravidla tak, ze propousti prakticky vsecho, jen
> je vyjmenovano, co blokuji. A v minulem zamestanni jsme to meli zase
> naopak, ze zakazano bylo vse, pouze bylo explicitne vyjmenovani, co je
> povoleno (tedy opravdu, pro DNS byl ve firewallu zaznam, ze je povoleny
> provoz UDP na port 53). Pak clovek musi jen uhlidat, co vsechno
> potrebuje ke spokojenemu zivotu...
> 
> Zbynek
> 
> Dne 9.8.2012 10:43, Petr Valenta napsal(a):
>> Zdravim,
>>
>> uz nejaky ten tyden si hraju s IPFW a in-kernel NATem. Premyslim, jak
>> elegantne vyresit NAT do DMZ, kdy je problem s ICMP a UDP, protoze jsou
>> nestavove.
>> Pravidlo 10100 mi povoli SYN pakety jdouci z DMZ (a dale budou
>> pokracovat do internetu). Neco podobneho bych potreboval s ICMP a UDP a
>> to predtim, nez paket dorazi na pravidlo 10200, ktere ho zahodi, pokud
>> se nejedna o odpoved na pozadavky prichazejici z $lan_if (v NAT tabulce).
>>
>> Problem je v tom, ze pravidla pred 10200 musi byt natolik chytra, aby
>> nepasovala na odpovedi do $lan_if. Takove demonstracni chybne pravidlo
>> je 10100, diky kteremu se mi nevrati pingy puvodne z $lan_if do $dmz_if,
>> kdyz do $lan_if poustim pouze pakety tagged 2.
>>
>> Existuje na to vubec nejake elegantni reseni pro IPFW, krome presne
>> specifikace pravidel typu udp jdouci na port 53, atd atd...?
>>
>> Diky
>>
>> Petr
>>
>>
>>
>> # DEMILITARIZOVANA ZONA  (em0)
>> #
>> # NAT
>> $fwcmd nat 2 config ip $public_ip deny_in same_ports
>>
>> # IN na DMZ_IF
>> $fwcmd add 10000 count all from any to any in recv $dmz_if
>> $fwcmd add 10100 allow all from any to any in recv $dmz_if setup
>>
>>
>> $fwcmd add 10100 allow icmp from any to any in recv $dmz_if
>>                  // povoluje ICMP
>> $fwcmd add 10200 nat 2 log tag 2 all from any to any in recv $dmz_if
>>                  // taguje pakety prochazejici NATem na dmz_if
>>
> 


More information about the Users-l mailing list