rhel7, DNAT a neocekavane chovani [trochu delsi]

Slávek Banko slavek.banko na axis.cz
Středa Leden 28 23:56:03 CET 2015


On Wednesday 28 of January 2015 23:34:02 Zdeněk Kaminski wrote:
> Pavel Kankovsky napsal 27 Leden 2015, 9:40:
> >> iptables -t nat -A POSTROUTING -p tcp -s 192.168.1.168 --sport 22 -j
> >> SNAT
> >> --to-source 194.228.208.24:443
> >>
> >> Jenze me to na serveru A funguje (dostanu se z Inetu na onen ssh port) i
> >> bez toho pravidla. A vubec se mi takove chovani nelibi.
> >
> > To není chyba, to je vlastnost.
>
> Uaaaaa.
>
> > A takhle to afaik funguje od samého začátku. Může to být trochu matoucí,
> > ale má to svou logiku -- má-li překlad adres fungovat, pak je potřeba ho
> > aplikovat konzistentně na všechny pakety patřící do jednoho spojení.
>
> Nu, na jednu stranu to smysl ma, na druhou stranu by se mi vsak libilo to
> elementarnejsi chovani, tudiz ze si musim k prislusnemu DNAT pravidlu
> napsat i jeho bratricka SNAT (nikoliv MASQUERADE, ktere by se melo chovat
> jinak nez SNAT).
>
> A protoze nedodavate, ze to lze vynutit napr. v nejakem conntrack modulu
> vhodnou option, tak se s tim asi budu muset smirit. Nu coz, vyhazu
> prebytecne SNAT pravidla a tim si firewall aspon zjednodusim.
>
> Zarazilo me ale opravdu to, ze  pocitadlo paketu zapocita puze ten prvni
> paket a pak jiz pri existujicim spojeni dalsi pakety nezapocitava.
>
> Jan Marek napsal 26 Leden 2015, 15:24:
> > To jedno pravidlo nestačí. Ale Vy tam přece musíte mít
> > MASQUERADE-u nebo SNAT pro ostatní provoz z vnitřní sítě, nebo se
> > mýlím?
>
> Jane, zijete ve stejnem omylu, v jakem jsem zil doted ja. A to mi dokonce
> Yenya dal "zapocteno" ve svem seminari...
>
> Preji pekny den.
>
> Z.K.
> --
> Wallachian Laboratories? Freeride in UN*X systems...
>

Považuji za nezbytné doplnit: SNAT pravidlo nejen, že není nutné, ba dokonce 
může být naprosto nežádoucí!

Na stroji, který provádí nat a routování, DNAT pravidlo prostě přepíše cílovou 
adresu a pak paket pokračuje běžnými cestami routování paketů, včetně FORWARD 
pravidly firewallu. To mimochodem znamená, že kdyby FORWARD neměl jako 
výchozí ACCEPT, pak by bylo potřeba pravidlo povolující FORWARD.

Pokud cílový stroj, který paket díky DNAT pravidlu dostane, má jako výchozí 
bránu právě tento router, pak paket přijme, provede co potřebuje a odpověď 
přirozeně pošle zpět na původní vnější adresu tazatele => přes svou výchozí 
bránu - tedy router, který prováděl DNAT. Ten provede přepis zpět a paket 
pošle zpět do světa.

Když by na firewallu bylo mimo DNAT také SNAT pravidlo, pak by cílový stroj 
dostal paket nikoliv s původní adresou odesílatele, ale jako odesílatel by 
byla adresa firewallu == byl by tedy ochuzen o informaci, kdo byl skutečný 
odesílatel paketu. To může být nemilé či přímo nežádoucí - například pro 
SMTP. Kdyby na SMTP byl povolen relay z vnitřního segmentu, tak rázem 
fungoval jako openrelay.

Proto jediný případ, kdy může být SNAT pravidlo nezbytné, je při DNAT 
směřujícím na cíl do stejného segmentu, jako je zdrojový stroj. Jinak by 
cílový stroj mohl přirozeně posílat pakety zpět původnímu tazateli, který by 
je ale zahazoval, protože nepřichází od routeru, na který je posílal.

-- 
Slávek


Další informace o konferenci Linux