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