Hello! Valaki meg tudna szanni, es megmondana, hogy melyik doksit kellene elolvasnom ahhoz, hogy legalabb nyomokban megprobalhassam megerteni az uj mukodest? A tproxy.txt fajlt hiaba olvasom, nem igazan ertem hogyan is kellene mukodnie... Ezt meg ertem is... # ip rule add fwmark 1 lookup 100 De ezt mar nem annyira. Miert 0.0.0.0/0 es miert "lo"? # ip route add local 0.0.0.0/0 dev lo table 100 Ez csak siman letrehozza a DIVERT chain-t. # iptables -t mangle -N DIVERT Ez beletolja a tcp forgalmat a DIVERT chain-be. # iptables -t mangle -A PREROUTING -p tcp -m socket -j DIVERT Ez megjeloli a DIVERT chain forgalmat. De miert van ketto is belole a doksiban? # iptables -t mangle -A DIVERT -j MARK --set-xmark 0x1/0xffffffff # iptables -t mangle -A DIVERT -j MARK --set-mark 1 Ez csak engedelyezi a DIVERT forgalmat. # iptables -t mangle -A DIVERT -j ACCEPT Ez a 80-as portra tarto forgalmat feltolja az 50080-as portra. # iptables -t mangle -A PREROUTING -p tcp --dport 80 -j TPROXY \ --tproxy-mark 0x1/0x1 --on-port 50080 Amit nem ertek: - Ebbol hogyan derul ki, hogy melyik interfeszre kell bind-olni a zorp-ot? - Hogyan jut el a forgalom a zorp-hoz? Ugyanis a fentieket megcsinalva nem kerul fel... - Ha kettonel tobb halokartyam van, akkor regebben tobb interfeszre is bindolhattam ugyanazon portra (eth0 - 50080, eth1 - 50080 stb.) Ezt most hogy tudom elkovetni? -- Udvozlettel Zsiga
On Tue, 2009-07-28 at 16:56 +0200, Kosa Attila wrote:
Hello! Valaki meg tudna szanni, es megmondana, hogy melyik doksit kellene elolvasnom ahhoz, hogy legalabb nyomokban megprobalhassam megerteni az uj mukodest? A tproxy.txt fajlt hiaba olvasom, nem igazan ertem hogyan is kellene mukodnie...
Ezt meg ertem is... # ip rule add fwmark 1 lookup 100 De ezt mar nem annyira. Miert 0.0.0.0/0 es miert "lo"? # ip route add local 0.0.0.0/0 dev lo table 100
ez kenyszeriti ki, hogy az 1-el megmarkolt csomagok a lokalis IP stackhez menjenek IP cimtol fuggetlenul. Amugy itt a "local" a kulcsszo, ld. route type-ok: ip route help: TYPE := [ unicast | local | broadcast | multicast | throw | unreachable | prohibit | blackhole | nat ] a local azt jelenti, hogy a lokalis stacknek menjenek a csomagok.
Ez csak siman letrehozza a DIVERT chain-t. # iptables -t mangle -N DIVERT Ez beletolja a tcp forgalmat a DIVERT chain-be. # iptables -t mangle -A PREROUTING -p tcp -m socket -j DIVERT
marmint azokat a forgalmakat, amire az "-m socket" matchel. ami arra matchel, amihez van lokalis socket.
Ez megjeloli a DIVERT chain forgalmat. De miert van ketto is belole a doksiban? # iptables -t mangle -A DIVERT -j MARK --set-xmark 0x1/0xffffffff # iptables -t mangle -A DIVERT -j MARK --set-mark 1
ha a mark-ot bitenkent akarod allokalni (aminek azert lehet ertelme), akkor az elsot hasznalod. ha a teljes markot csak erre hasznalod, akkor eleg a masodik.
Ez csak engedelyezi a DIVERT forgalmat. # iptables -t mangle -A DIVERT -j ACCEPT
igen, miutan ratette a markot.
Ez a 80-as portra tarto forgalmat feltolja az 50080-as portra. # iptables -t mangle -A PREROUTING -p tcp --dport 80 -j TPROXY \ --tproxy-mark 0x1/0x1 --on-port 50080
lookupolja az 50080-as portot azon az IP cimen, ahonnan az aktualis csomag eppen erkezik. (ez ugyanaz a mukodes, mint eddig), es ha ott van tproxy-s socket, akkor bebillenti az 1-es markot.
Amit nem ertek: - Ebbol hogyan derul ki, hogy melyik interfeszre kell bind-olni a zorp-ot?
oda, ahova eddig. a TPROXY target a bejovo interface elso IP cimet hasznalja lookuphoz.
- Hogyan jut el a forgalom a zorp-hoz? Ugyanis a fentieket megcsinalva nem kerul fel...
a Zorpnak hallgatoznia kell a fenti porton, es be kell billentenie az IP_TRANSPARENT setsockopt-ot. strace-ben nezd meg, hogy ezt megteszi-e. milyen zorp verzio? most megneztem a 3.1.15c-ben benne van a szukseges kod: static gint z_do_tp40_bind(gint fd, struct sockaddr *sa, socklen_t salen, guint32 sock_flags) { gint on = 1, res; z_enter(); if (sock_flags & ZSF_TRANSPARENT || sock_flags & ZSF_MARK_TPROXY) { if (setsockopt(fd, SOL_IP, IP_TRANSPARENT, &on, sizeof(on)) < 0) setsockopt(fd, SOL_IP, IP_FREEBIND, &on, sizeof(on)); } res = z_do_ll_bind(fd, sa, salen, sock_flags); z_return(res); } itt az IP_TRANSPARENT a lenyeg.
- Ha kettonel tobb halokartyam van, akkor regebben tobb interfeszre is bindolhattam ugyanazon portra (eth0 - 50080, eth1 - 50080 stb.) Ezt most hogy tudom elkovetni?
ugyanugy. -- Bazsi
On Thu, Jul 30, 2009 at 08:18:05AM +0000, Balazs Scheidler wrote:
On Tue, 2009-07-28 at 16:56 +0200, Kosa Attila wrote:
Valaki meg tudna szanni, es megmondana, hogy melyik doksit kellene elolvasnom ahhoz, hogy legalabb nyomokban megprobalhassam megerteni az uj mukodest? A tproxy.txt fajlt hiaba olvasom, nem igazan ertem hogyan is kellene mukodnie...
Ezt meg ertem is... # ip rule add fwmark 1 lookup 100 De ezt mar nem annyira. Miert 0.0.0.0/0 es miert "lo"? # ip route add local 0.0.0.0/0 dev lo table 100
ez kenyszeriti ki, hogy az 1-el megmarkolt csomagok a lokalis IP stackhez menjenek IP cimtol fuggetlenul.
Amugy itt a "local" a kulcsszo, ld. route type-ok:
ip route help:
TYPE := [ unicast | local | broadcast | multicast | throw | unreachable | prohibit | blackhole | nat ]
a local azt jelenti, hogy a lokalis stacknek menjenek a csomagok.
A dummy interfeszre meg szukseg van?
Ez megjeloli a DIVERT chain forgalmat. De miert van ketto is belole a doksiban? # iptables -t mangle -A DIVERT -j MARK --set-xmark 0x1/0xffffffff # iptables -t mangle -A DIVERT -j MARK --set-mark 1
ha a mark-ot bitenkent akarod allokalni (aminek azert lehet ertelme), akkor az elsot hasznalod.
ha a teljes markot csak erre hasznalod, akkor eleg a masodik.
Egyelore annak is orulnek, ha mukodne, ezert a masodikat hasznalom.
- Hogyan jut el a forgalom a zorp-hoz? Ugyanis a fentieket megcsinalva nem kerul fel...
a Zorpnak hallgatoznia kell a fenti porton, es be kell billentenie az IP_TRANSPARENT setsockopt-ot. strace-ben nezd meg, hogy ezt megteszi-e.
Nem latszik a strace-ben ilyesmi (lasd lentebb).
milyen zorp verzio? most megneztem a 3.1.15c-ben benne van a szukseges kod:
3.1.15 volt, de most atalltam a 3.1.15c verziora. Ezt csinaltam eddig: # ip rule add fwmark 1 lookup 100 # ip route add local 0.0.0.0/0 dev lo table 100 A csomagszuro konfig a kovetkezo: *mangle :PREROUTING ACCEPT [0:0] :POSTROUTING ACCEPT [0:0] :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :DIVERT - -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu -A PREROUTING -p tcp -m socket -j DIVERT -A PREROUTING -p tcp --dport 80 -j TPROXY --tproxy-mark 0x1/0x1 --on-port 50080 -A DIVERT -j MARK --set-mark 1 -A DIVERT -j ACCEPT COMMIT Igy inditottam: # strace -f -o /tmp/zorp.log /etc/init.d/zorp start # grep -i transpa /tmp/zorp.log # grep -i setsock /tmp/zorp.log 2396 setsockopt(10, SOL_IP, 0x2c0a /* IP_??? */, "\0\0\0\0\0\0\0\3\0\0\0\0"..., 12) = -1 ENOPROTOOPT (Protocol not available) 2396 setsockopt(10, SOL_IP, 0x2c0a /* IP_??? */, "\0\0\0\0\0\0\0\2\0\0\0\0"..., 12) = -1 ENOPROTOOPT (Protocol not available) 2396 setsockopt(12, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0 Az latszik, hogy a zorp listenel a megfelelo interfeszen, azonban a csomagok nem kerulnek fel hozza. -- Udvozlettel Zsiga
On 2009-07-30 12:26, Kosa Attila wrote:
*mangle :PREROUTING ACCEPT [0:0] :POSTROUTING ACCEPT [0:0] :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :DIVERT - -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu -A PREROUTING -p tcp -m socket -j DIVERT -A PREROUTING -p tcp --dport 80 -j TPROXY --tproxy-mark 0x1/0x1 --on-port 50080 -A DIVERT -j MARK --set-mark 1 -A DIVERT -j ACCEPT COMMIT
Lehet, hogy rosszul elemzem, de a DIVERT lánc végén lévő ACCEPT a mangle táblában terminálja az elemzést, így a PREROUTING láncba nem kerül vissza a vezérlés. Nem lenne jobb a -j RETURN?
On Thu, Jul 30, 2009 at 05:39:12PM +0200, Nemeth Gyorgy wrote:
On 2009-07-30 12:26, Kosa Attila wrote:
*mangle :PREROUTING ACCEPT [0:0] :POSTROUTING ACCEPT [0:0] :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :DIVERT - -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu -A PREROUTING -p tcp -m socket -j DIVERT -A PREROUTING -p tcp --dport 80 -j TPROXY --tproxy-mark 0x1/0x1 --on-port 50080 -A DIVERT -j MARK --set-mark 1 -A DIVERT -j ACCEPT COMMIT
Lehet, hogy rosszul elemzem, de a DIVERT lánc végén lévő ACCEPT a mangle táblában terminálja az elemzést, így a PREROUTING láncba nem kerül vissza a vezérlés. Nem lenne jobb a -j RETURN?
Koszi, probaltam azzal is, semmi valtozas... Nincs semmi mod arra, hogy a csomagot kovetni lehessen, hogy kideruljon, hol akad el? -- Udvozlettel Zsiga
On 2009-07-31 09:04, Kosa Attila wrote:
Koszi, probaltam azzal is, semmi valtozas... Nincs semmi mod arra, hogy a csomagot kovetni lehessen, hogy kideruljon, hol akad el?
-v opcióval listázva és a csomagszámlálót figyelve esetleg?
On Thu, 2009-07-30 at 17:39 +0200, Nemeth Gyorgy wrote:
On 2009-07-30 12:26, Kosa Attila wrote:
*mangle :PREROUTING ACCEPT [0:0] :POSTROUTING ACCEPT [0:0] :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :DIVERT - -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu -A PREROUTING -p tcp -m socket -j DIVERT -A PREROUTING -p tcp --dport 80 -j TPROXY --tproxy-mark 0x1/0x1 --on-port 50080 -A DIVERT -j MARK --set-mark 1 -A DIVERT -j ACCEPT COMMIT
Lehet, hogy rosszul elemzem, de a DIVERT lánc végén lévő ACCEPT a mangle táblában terminálja az elemzést, így a PREROUTING láncba nem kerül vissza a vezérlés. Nem lenne jobb a -j RETURN?
nem kell RETURN, jo az ACCEPT is. ha van socket (-m socket), akkor mar csak el kell accept-elni. -- Bazsi
On Thu, 2009-07-30 at 12:26 +0200, Kosa Attila wrote:
On Thu, Jul 30, 2009 at 08:18:05AM +0000, Balazs Scheidler wrote:
On Tue, 2009-07-28 at 16:56 +0200, Kosa Attila wrote:
Valaki meg tudna szanni, es megmondana, hogy melyik doksit kellene elolvasnom ahhoz, hogy legalabb nyomokban megprobalhassam megerteni az uj mukodest? A tproxy.txt fajlt hiaba olvasom, nem igazan ertem hogyan is kellene mukodnie...
Ezt meg ertem is... # ip rule add fwmark 1 lookup 100 De ezt mar nem annyira. Miert 0.0.0.0/0 es miert "lo"? # ip route add local 0.0.0.0/0 dev lo table 100
ez kenyszeriti ki, hogy az 1-el megmarkolt csomagok a lokalis IP stackhez menjenek IP cimtol fuggetlenul.
Amugy itt a "local" a kulcsszo, ld. route type-ok:
ip route help:
TYPE := [ unicast | local | broadcast | multicast | throw | unreachable | prohibit | blackhole | nat ]
a local azt jelenti, hogy a lokalis stacknek menjenek a csomagok.
A dummy interfeszre meg szukseg van?
Ez megjeloli a DIVERT chain forgalmat. De miert van ketto is belole a doksiban? # iptables -t mangle -A DIVERT -j MARK --set-xmark 0x1/0xffffffff # iptables -t mangle -A DIVERT -j MARK --set-mark 1
ha a mark-ot bitenkent akarod allokalni (aminek azert lehet ertelme), akkor az elsot hasznalod.
ha a teljes markot csak erre hasznalod, akkor eleg a masodik.
Egyelore annak is orulnek, ha mukodne, ezert a masodikat hasznalom.
- Hogyan jut el a forgalom a zorp-hoz? Ugyanis a fentieket megcsinalva nem kerul fel...
a Zorpnak hallgatoznia kell a fenti porton, es be kell billentenie az IP_TRANSPARENT setsockopt-ot. strace-ben nezd meg, hogy ezt megteszi-e.
Nem latszik a strace-ben ilyesmi (lasd lentebb).
milyen zorp verzio? most megneztem a 3.1.15c-ben benne van a szukseges kod:
3.1.15 volt, de most atalltam a 3.1.15c verziora.
Ezt csinaltam eddig: # ip rule add fwmark 1 lookup 100 # ip route add local 0.0.0.0/0 dev lo table 100
A csomagszuro konfig a kovetkezo: *mangle :PREROUTING ACCEPT [0:0] :POSTROUTING ACCEPT [0:0] :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :DIVERT - -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu -A PREROUTING -p tcp -m socket -j DIVERT -A PREROUTING -p tcp --dport 80 -j TPROXY --tproxy-mark 0x1/0x1 --on-port 50080 -A DIVERT -j MARK --set-mark 1 -A DIVERT -j ACCEPT COMMIT
Igy inditottam: # strace -f -o /tmp/zorp.log /etc/init.d/zorp start # grep -i transpa /tmp/zorp.log # grep -i setsock /tmp/zorp.log 2396 setsockopt(10, SOL_IP, 0x2c0a /* IP_??? */, "\0\0\0\0\0\0\0\3\0\0\0\0"..., 12) = -1 ENOPROTOOPT (Protocol not available) 2396 setsockopt(10, SOL_IP, 0x2c0a /* IP_??? */, "\0\0\0\0\0\0\0\2\0\0\0\0"..., 12) = -1 ENOPROTOOPT (Protocol not available) 2396 setsockopt(12, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
Az latszik, hogy a zorp listenel a megfelelo interfeszen, azonban a csomagok nem kerulnek fel hozza.
ez az uzenet startup-kor jon -v6 -os loglevelen. mi jon ki itt: z_log(NULL, CORE_DEBUG, 6, "System dependant init; sysdep_tproxy='%s'", sysdep_tproxy_str[sysdep_tproxy]); -- Bazsi
On Fri, Jul 31, 2009 at 11:10:41AM +0200, Balazs Scheidler wrote:
On Thu, 2009-07-30 at 12:26 +0200, Kosa Attila wrote:
Igy inditottam: # strace -f -o /tmp/zorp.log /etc/init.d/zorp start # grep -i transpa /tmp/zorp.log # grep -i setsock /tmp/zorp.log 2396 setsockopt(10, SOL_IP, 0x2c0a /* IP_??? */, "\0\0\0\0\0\0\0\3\0\0\0\0"..., 12) = -1 ENOPROTOOPT (Protocol not available) 2396 setsockopt(10, SOL_IP, 0x2c0a /* IP_??? */, "\0\0\0\0\0\0\0\2\0\0\0\0"..., 12) = -1 ENOPROTOOPT (Protocol not available) 2396 setsockopt(12, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
Az latszik, hogy a zorp listenel a megfelelo interfeszen, azonban a csomagok nem kerulnek fel hozza.
# grep -i transpa /tmp/zorp.log # grep -i setsock /tmp/zorp.log 11195 setsockopt(10, SOL_IP, 0x2c0a /* IP_??? */, "\0\0\0\0\0\0\0\3\0\0\0\0"..., 12) = -1 ENOPROTOOPT (Protocol not available) 11195 setsockopt(10, SOL_IP, 0x2c0a /* IP_??? */, "\0\0\0\0\0\0\0\2\0\0\0\0"..., 12) = -1 ENOPROTOOPT (Protocol not available) 11195 setsockopt(12, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0 11195 setsockopt(12, SOL_IP, 0x13 /* IP_??? */, [1], 4) = 0 # cat /etc/zorp/policy-http.py from Zorp.Core import * from Zorp.Http import * Zorp.firewall_name = 'zorp-http@x.hu' InetZone("webezes", "10.10.10.0/24", inbound_services=[], outbound_services=["intra_http"]) InetZone("internet", "0.0.0.0/0", inbound_services=["intra_http"], outbound_services=[]) class IntraHttp(HttpProxy): def config(self): HttpProxy.config(self) self.transparent_mode = 1 def zorp_http(): Service("intra_http", IntraHttp, InbandRouter()) Listener(SockAddrInet("10.10.10.10", 50080), "intra_http", transparent=TRUE)
ez az uzenet startup-kor jon -v6 -os loglevelen. mi jon ki itt:
z_log(NULL, CORE_DEBUG, 6, "System dependant init; sysdep_tproxy='%s'", sysdep_tproxy_str[sysdep_tproxy]);
Aug 4 10:22:12 gplzorp-lenny zorp/zorp_http[11195]: (nosession): System dependant init; sysdep_tproxy='tproxy40' # ip rule list 0: from all lookup local 32765: from all fwmark 0x1 lookup 100 32766: from all lookup main 32767: from all lookup default # cat /etc/iptables.conf.in *mangle :PREROUTING ACCEPT [0:0] :POSTROUTING ACCEPT [0:0] :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :DIVERT - -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu -A PREROUTING -p tcp -m socket -j LOG --log-prefix "SOCKET forgalom: " -A PREROUTING -p tcp -m socket -j DIVERT -A PREROUTING -p tcp --dport 80 -j LOG --log-prefix "PREROUTING forgalom: " -A PREROUTING -p tcp --dport 80 -j TPROXY --tproxy-mark 0x1/0x1 --on-port 50080 -A DIVERT -j LOG --log-prefix "DIVERT forgalom: " -A DIVERT -j MARK --set-mark 1 -A DIVERT -j ACCEPT COMMIT *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A INPUT -j LOG --log-prefix "INPUT forgalom: " COMMIT A tcpdump szerint csak a SYN-es csomag jut el a tuzfalig, es semmi nem megy vissza a klienshez. A tproxy-s szabaly szamlaloi emelkednek, de a divert chain szamlaloi nem. # grep forgalom /var/log/syslog Aug 4 10:54:43 gplzorp-lenny kernel: [427773.913935] INPUT forgalom: IN=eth1 OUT= MAC=00:0c:29:c1:1a:35:00:0c:29:9b:d1:7e:08:00 SRC=10.10.10.100 DST=10.10.10.10 LEN=54 TOS=0x00 PREC=0x00 TTL=64 ID=19689 DF PROTO=UDP SPT=32770 DPT=53 LEN=34 Aug 4 10:54:43 gplzorp-lenny kernel: [427773.915082] INPUT forgalom: IN=eth1 OUT= MAC=00:0c:29:c1:1a:35:00:0c:29:9b:d1:7e:08:00 SRC=10.10.10.100 DST=10.10.10.10 LEN=66 TOS=0x00 PREC=0x00 TTL=64 ID=19689 DF PROTO=UDP SPT=32770 DPT=53 LEN=46 Aug 4 10:54:43 gplzorp-lenny kernel: [427773.915842] INPUT forgalom: IN=eth1 OUT= MAC=00:0c:29:c1:1a:35:00:0c:29:9b:d1:7e:08:00 SRC=10.10.10.100 DST=10.10.10.10 LEN=54 TOS=0x00 PREC=0x00 TTL=64 ID=19690 DF PROTO=UDP SPT=32770 DPT=53 LEN=34 Aug 4 10:54:43 gplzorp-lenny kernel: [427773.925156] PREROUTING forgalom: IN=eth1 OUT= MAC=00:0c:29:c1:1a:35:00:0c:29:9b:d1:7e:08:00 SRC=10.10.10.100 DST=217.20.130.97 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=60218 DF PROTO=TCP SPT=35813 DPT=80 WINDOW=5840 RES=0x00 SYN URGP=0 Aug 4 10:54:46 gplzorp-lenny kernel: [427776.920697] PREROUTING forgalom: IN=eth1 OUT= MAC=00:0c:29:c1:1a:35:00:0c:29:9b:d1:7e:08:00 SRC=10.10.10.100 DST=217.20.130.97 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=60219 DF PROTO=TCP SPT=35813 DPT=80 WINDOW=5840 RES=0x00 SYN URGP=0 -- Udvozlettel Zsiga
Kozben kinyomoztuk, es a megoldas az volt, hogy a TPROXY szabaly-nak meg kell adni a listener IP cimet is, valamiert nem mukodik az a logika, hogy defaultbol a bejovo interface elsodleges IP cimet hasznalja. Magyarul ez kellett: -A PREROUTING -p tcp --dport 80 -j TPROXY --tproxy-mark 0x1/0x1 --on-ip x.y.z.h --on-port 50080 ahol x.y.z.h a listener IP cime. On Tue, 2009-08-04 at 10:58 +0200, Kosa Attila wrote:
On Fri, Jul 31, 2009 at 11:10:41AM +0200, Balazs Scheidler wrote:
On Thu, 2009-07-30 at 12:26 +0200, Kosa Attila wrote:
Igy inditottam: # strace -f -o /tmp/zorp.log /etc/init.d/zorp start # grep -i transpa /tmp/zorp.log # grep -i setsock /tmp/zorp.log 2396 setsockopt(10, SOL_IP, 0x2c0a /* IP_??? */, "\0\0\0\0\0\0\0\3\0\0\0\0"..., 12) = -1 ENOPROTOOPT (Protocol not available) 2396 setsockopt(10, SOL_IP, 0x2c0a /* IP_??? */, "\0\0\0\0\0\0\0\2\0\0\0\0"..., 12) = -1 ENOPROTOOPT (Protocol not available) 2396 setsockopt(12, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
Az latszik, hogy a zorp listenel a megfelelo interfeszen, azonban a csomagok nem kerulnek fel hozza.
# grep -i transpa /tmp/zorp.log # grep -i setsock /tmp/zorp.log 11195 setsockopt(10, SOL_IP, 0x2c0a /* IP_??? */, "\0\0\0\0\0\0\0\3\0\0\0\0"..., 12) = -1 ENOPROTOOPT (Protocol not available) 11195 setsockopt(10, SOL_IP, 0x2c0a /* IP_??? */, "\0\0\0\0\0\0\0\2\0\0\0\0"..., 12) = -1 ENOPROTOOPT (Protocol not available) 11195 setsockopt(12, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0 11195 setsockopt(12, SOL_IP, 0x13 /* IP_??? */, [1], 4) = 0
# cat /etc/zorp/policy-http.py from Zorp.Core import * from Zorp.Http import *
Zorp.firewall_name = 'zorp-http@x.hu'
InetZone("webezes", "10.10.10.0/24", inbound_services=[], outbound_services=["intra_http"])
InetZone("internet", "0.0.0.0/0", inbound_services=["intra_http"], outbound_services=[])
class IntraHttp(HttpProxy): def config(self): HttpProxy.config(self) self.transparent_mode = 1
def zorp_http(): Service("intra_http", IntraHttp, InbandRouter())
Listener(SockAddrInet("10.10.10.10", 50080), "intra_http", transparent=TRUE)
ez az uzenet startup-kor jon -v6 -os loglevelen. mi jon ki itt:
z_log(NULL, CORE_DEBUG, 6, "System dependant init; sysdep_tproxy='%s'", sysdep_tproxy_str[sysdep_tproxy]);
Aug 4 10:22:12 gplzorp-lenny zorp/zorp_http[11195]: (nosession): System dependant init; sysdep_tproxy='tproxy40'
# ip rule list 0: from all lookup local 32765: from all fwmark 0x1 lookup 100 32766: from all lookup main 32767: from all lookup default
# cat /etc/iptables.conf.in *mangle :PREROUTING ACCEPT [0:0] :POSTROUTING ACCEPT [0:0] :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :DIVERT - -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu -A PREROUTING -p tcp -m socket -j LOG --log-prefix "SOCKET forgalom: " -A PREROUTING -p tcp -m socket -j DIVERT -A PREROUTING -p tcp --dport 80 -j LOG --log-prefix "PREROUTING forgalom: " -A PREROUTING -p tcp --dport 80 -j TPROXY --tproxy-mark 0x1/0x1 --on-port 50080 -A DIVERT -j LOG --log-prefix "DIVERT forgalom: " -A DIVERT -j MARK --set-mark 1 -A DIVERT -j ACCEPT COMMIT *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A INPUT -j LOG --log-prefix "INPUT forgalom: " COMMIT
A tcpdump szerint csak a SYN-es csomag jut el a tuzfalig, es semmi nem megy vissza a klienshez.
A tproxy-s szabaly szamlaloi emelkednek, de a divert chain szamlaloi nem.
# grep forgalom /var/log/syslog Aug 4 10:54:43 gplzorp-lenny kernel: [427773.913935] INPUT forgalom: IN=eth1 OUT= MAC=00:0c:29:c1:1a:35:00:0c:29:9b:d1:7e:08:00 SRC=10.10.10.100 DST=10.10.10.10 LEN=54 TOS=0x00 PREC=0x00 TTL=64 ID=19689 DF PROTO=UDP SPT=32770 DPT=53 LEN=34 Aug 4 10:54:43 gplzorp-lenny kernel: [427773.915082] INPUT forgalom: IN=eth1 OUT= MAC=00:0c:29:c1:1a:35:00:0c:29:9b:d1:7e:08:00 SRC=10.10.10.100 DST=10.10.10.10 LEN=66 TOS=0x00 PREC=0x00 TTL=64 ID=19689 DF PROTO=UDP SPT=32770 DPT=53 LEN=46 Aug 4 10:54:43 gplzorp-lenny kernel: [427773.915842] INPUT forgalom: IN=eth1 OUT= MAC=00:0c:29:c1:1a:35:00:0c:29:9b:d1:7e:08:00 SRC=10.10.10.100 DST=10.10.10.10 LEN=54 TOS=0x00 PREC=0x00 TTL=64 ID=19690 DF PROTO=UDP SPT=32770 DPT=53 LEN=34 Aug 4 10:54:43 gplzorp-lenny kernel: [427773.925156] PREROUTING forgalom: IN=eth1 OUT= MAC=00:0c:29:c1:1a:35:00:0c:29:9b:d1:7e:08:00 SRC=10.10.10.100 DST=217.20.130.97 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=60218 DF PROTO=TCP SPT=35813 DPT=80 WINDOW=5840 RES=0x00 SYN URGP=0 Aug 4 10:54:46 gplzorp-lenny kernel: [427776.920697] PREROUTING forgalom: IN=eth1 OUT= MAC=00:0c:29:c1:1a:35:00:0c:29:9b:d1:7e:08:00 SRC=10.10.10.100 DST=217.20.130.97 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=60219 DF PROTO=TCP SPT=35813 DPT=80 WINDOW=5840 RES=0x00 SYN URGP=0
-- Bazsi
On Wed, Aug 05, 2009 at 01:04:41PM +0000, Balazs Scheidler wrote:
Kozben kinyomoztuk, es a megoldas az volt, hogy a TPROXY szabaly-nak meg kell adni a listener IP cimet is, valamiert nem mukodik az a logika, hogy defaultbol a bejovo interface elsodleges IP cimet hasznalja.
Magyarul ez kellett:
-A PREROUTING -p tcp --dport 80 -j TPROXY --tproxy-mark 0x1/0x1 --on-ip x.y.z.h --on-port 50080
ahol x.y.z.h a listener IP cime.
Elnezest kerek, amiert nem irtam meg a megoldast. Nagy-nagy koszonet Bazsinak, amiert szant ram idot es energiat, hogy belepve a gepre megkeresse a megoldast. A kerdesem az, hogy a "valamiert nem mukodo logika" varhato-e, hogy mukodni fog, vagy mindig ki kell majd irni a --on-ip kapcsolot. -- Udvozlettel Zsiga
participants (3)
-
Balazs Scheidler
-
Kosa Attila
-
Nemeth Gyorgy