[zorp-hu] iptables, megorulok

Balazs Scheidler bazsi at balabit.hu
2011. Május. 14., Szo, 14:10:20 CEST


On Tue, 2011-05-10 at 09:25 +0200, Kosa Attila wrote:
> On Tue, May 10, 2011 at 09:08:49AM +0200, Csányi Krisztián wrote:
> >  On Tue, 10 May 2011 08:32:57 +0200, Kosa Attila wrote:
> > >
> > > Bocs, ha nem volt egyertelmu, de azzal kezdtem, hogy egy mukodo
> > > szabalyt masoltam le, tehat mukodik a tproxy azon a gepen, csak
> > > ez az uj szabaly nem akar valamiert.
> > 
> >  Vilagos. Ilyen esetben szerintem nincs jobb eszköz, mint:
> >  iptables -t mangle -L -v -n
> >  itt laszik, hogy match-el a csomagokra vagy sem. Ha a tcpdumpnal is az
> >  latszik, hogy eljut oda a csomag akkor az el is jut. Nalam ilyenkor
> >  csak egyetlen problema szokott lenni: a Dispatcher-nek nem adom meg a
> >  transparent=TRUE -t.
> 
> Irtam, hogy novekszenek a szamlalok, a tcpdump-ban latszanak a
> csomagok, es ha zorp helyett netcat-ot akasztok oda, akkor sem
> kerulnek fel a csomagok (tehat a Dispatcher-hez el sem jutnak).
> 
> >  De ahogy mondtad ez egy mukodo konfigrol lett masolva...
> 
> Az iptables szabalyra irtam, hogy egy mukodo szabalyt masoltam
> le.
> 

a TPROXY csak akkor vegzi el a redirekciot, ha a listener socket-re
amugy be lett allitva az IP_TRANSPARENT flag.

van olyan netcat, ami beallitja, de patchelni kell hozza.

http://people.netfilter.org/hidden/tproxy/netcat-ip_transparent-support.patch

Viszont csereben nem egy, hanem legalabb 2 fele netcat valtozat van, az
pedig, hogy az upstream gyakorlatilag nem mukodik azt jelenti, hogy a
kulonbozo Linux/FreeBSD stb valtozatokban erosen eltero netcatek vannak.

netcat-openbsd - TCP/IP swiss army knife
netcat - TCP/IP swiss army knife -- transitional package
netcat-traditional - TCP/IP swiss army knife
netcat6 - TCP/IP swiss army knife with IPv6 support

A lenyeg, hogy ha a netcat-tel nem megy, meg nem biztos, hogy nem a Zorp
konfigban van a hiba. transparent=TRUE van megadva?

Hmm.. jo lenne valami diagnosztika ebben az esetben, a TPROXY cel
esetleg logolhatna egyet ilyenkor.

... megneztem, a TPROXY target-ben vannak pr_debug()-os uzenetek, igy ha
a kerneledben van CONFIG_DYNAMIC_DEBUG (ami sajnos ubuntu kernelben pl.
nincs), akkor be lehet kapcsolni ezeket az uzeneteket, ld.

$KERNEL_SOURCE/Documentation/dynamic-debug-howto.txt

Ha viszont nem sajat kernelt hasznalsz, akkor gyakrolatilag az osszes
pontot ellenorizned kell, hogy:

  1) a TPROXY szabaly illeszkedik (elvileg ezt megnezted)
  2) a TPROXY-nak megadott --on-ip, --on-port listener nyitva van, es
proxyzasra meg van jelolve (IP_TRANSPARENT socket opciot bekapcsolja az
alkalmazas)
  3) a mark valoban rakerul a csomagra (a fenti ketto teljesulese eseten
ra kell keruljon, a LOG target ki tudja irni az aktualis markot)
  4) a megfelelo routing rule/tabla fel van veve, ami az adott markot
"local" -kent routolja.
  5) az INPUT chain nem dobja el a beerkezo csomagot (pl mark alapjan
atengedi az ilyen forgalmat)
  6) az alkalmazas valoban megkapja a kapcsolatot.

Gyakorlatilag barmelyik pont nem teljesulese eseten semmi nem tortenik,
a csomagot eldobjuk.

Az eredeti TPROXY 4.0 egy picit konnyebben hasznalhato volt (tproxy
tabla stb), csereben azt nem fogadtak el az upstream kernelben, ezert
maradt ez, a nehezebben kezelheto valtozat.

-- 
Bazsi




További információk a(z) zorp-hu levelezőlistáról