[zorp-hu] iptables, megorulok
Kosa Attila
zsiga at kosaek.hu
2011. Május. 16., H, 10:28:03 CEST
On Sat, May 14, 2011 at 02:10:20PM +0200, Balazs Scheidler wrote:
> a TPROXY csak akkor vegzi el a redirekciot, ha a listener socket-re
> amugy be lett allitva az IP_TRANSPARENT flag.
>
> A lenyeg, hogy ha a netcat-tel nem megy, meg nem biztos, hogy nem a Zorp
> konfigban van a hiba. transparent=TRUE van megadva?
Csak egy sima plug-ot tettem egyelore oda, hogy lassam
mukodik-e... Ennyi az egesz:
class IPPlug(PlugProxy):
pass
Service("plug", IPPlug, TransparentRouter(forge_addr=TRUE))
Listener(bindto=DBIface(iface="tun0", ip="10.10.0.1", port=60001), service="plug", transparent=TRUE)
> 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.
Sajnos nincs benne a kernelben.
> Ha viszont nem sajat kernelt hasznalsz, akkor gyakrolatilag az osszes
> pontot ellenorizned kell, hogy:
>
> 1) a TPROXY szabaly illeszkedik (elvileg ezt megnezted)
Szerintem igen.
> 2) a TPROXY-nak megadott --on-ip, --on-port listener nyitva van, es
> proxyzasra meg van jelolve (IP_TRANSPARENT socket opciot bekapcsolja az
> alkalmazas)
A zorp-nak be kellene kapcsolnia, meg ha a netcat-nak nem is.
Vagy tevedek? De megneztem strace-szel, es nem lattam ehhez
hasonlo nevu opciot benne.
> 3) a mark valoban rakerul a csomagra (a fenti ketto teljesulese eseten
> ra kell keruljon, a LOG target ki tudja irni az aktualis markot)
Erre konkret opciot nem talaltam. A kovetkezo szabalyokat vettem
fel:
-A PREROUTING -i tun0 -p tcp -s 10.10.2.1 -d 192.168.0.80 --dport 80 -j LOG --log-prefix "gyun: "
-A PREROUTING -i tun0 -p tcp -s 10.10.2.1 -d 192.168.0.80 --dport 80 -j LOG --log-prefix "gyun2: " --log-tcp-sequence --log-tcp-options --log-ip-options
-A PREROUTING -i tun0 -p tcp -s 10.10.2.1 -d 192.168.0.80 --dport 80 -j TPROXY --tproxy-mark 0x1/0x1 --on-port 60001 --on-ip 10.10.0.1
Es a kovetkezo logokat generaltak:
May 16 10:10:11 fw kernel: [3246830.386696] gyun: IN=tun0 OUT= MAC= SRC=10.10.2.1 DST=192.168.0.80 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=56371 DF PROTO=TCP SPT=39184 DPT=80 WINDOW=5840 RES=0x00 SYN URGP=0
May 16 10:10:11 fw kernel: [3246830.386710] gyun2: IN=tun0 OUT= MAC= SRC=10.10.2.1 DST=192.168.0.80 LEN=60 TOS=0x00 PREC=0x00
TTL=64 ID=56371 DF PROTO=TCP SPT=39184 DPT=80 SEQ=xxx ACK=0 WINDOW=5840 RES=0x00 SYN URGP=0 OPT (020405580402080A0F721AA80000000001030307)
Es a zorp nem indult el.
> 4) a megfelelo routing rule/tabla fel van veve, ami az adott markot
> "local" -kent routolja.
Ezeket a parancsokat futtattam le:
/sbin/ip route add local 0.0.0.0/0 dev lo table 100
/sbin/ip rule add fwmark 1 lookup 100
/sbin/ip route flush cache
Probaltam ezt is, de az alabbi hibauzenetet kaptam:
# ip -f inet route add local 0.0.0.0/0 dev tun0 table 100
RTNETLINK answers: File exists
Probaltam a tun0 helyere mas interfeszt irni, de mindig ugyanezt
a hibauzenetet kaptam.
> 5) az INPUT chain nem dobja el a beerkezo csomagot (pl mark alapjan
> atengedi az ilyen forgalmat)
Van ilyen szabalyom a filter tablaban:
-A INPUT -m mark --mark 0x1/0x1 -j ACCEPT
> 6) az alkalmazas valoban megkapja a kapcsolatot.
Es ezt hogy lehetne ellenorizni?
> 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.
Hat, igen...
--
Udvozlettel
Zsiga
További információk a(z) zorp-hu levelezőlistáról