[zorp-hu] x-forwarded-for

Kálmánczi Sándor csiga at nincs.net
2012. Nov. 21., Sze, 12:06:24 CET


Üdv!

Végre volt időm neki esni.

Teljesen jól működik a javaslat. Köszönöm!

Csak a szavazások zavarodank meg a webszerveren, mert ott a phpval a 
"REMOTE_ADDR"-et nézik és nem a "X-Original-Ip"-t.

Viszont ami probléma, hogy mondjuk egy pop3 nem fogja tudni ezt nyilván 
nem is értelmezhető, és mondjuk ha egy IPről túl sokat prbálkoznak, 
akkor a fail2ban a zorp belső lábát fogja kizárni. :(

Köszönöm!


Tisztelettel:
Cs


On 11/09/2012 11:24 AM, Kovács Bálint wrote:
> Szia,
>
> On 11/09/2012 11:07 AM, Kálmánczi Sándor wrote:
>> Üdvözlet!
>>
>> Nagy örömmel olvastem az IPTABLESes levelet, nagy várakozásal vagyok 
>> ez ügyben. Sajnos nem volt időm foglalkozni mostanában nagyon ezzel, 
>> mert itt megkezdődött az évvégi hajtás. Jól. :(
>>
>> De!
>>
>> Meglestem a dolgot.
>>
>> Ez alapján csináltam is egy olyat, hogy:
>>
>> Vagy egy zorp amiben egy dummy0 interfacen fut egy webszerver:
>>
>> iptables
>>
>> # Generated by iptables-save v1.4.14 on Fri Nov  9 10:54:37 2012
>> *filter
>> :INPUT ACCEPT [12630:1064741]
>> :FORWARD ACCEPT [0:0]
>> :OUTPUT ACCEPT [30302:5576360]
>> -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
>> -A INPUT -m state --state ESTABLISHED -j ACCEPT
>> -A INPUT -m mark --mark 0x80000000/0x80000000 -j ACCEPT
>> -A OUTPUT -m mark --mark 0x80000000/0x80000000 -j ACCEPT
>> COMMIT
>> # Completed on Fri Nov  9 10:54:37 2012
>> # Generated by iptables-save v1.4.14 on Fri Nov  9 10:54:37 2012
>> *mangle
>> :PREROUTING ACCEPT [0:0]
>> :INPUT ACCEPT [55883:34402514]
>> :FORWARD ACCEPT [0:0]
>> :OUTPUT ACCEPT [30302:5576360]
>> :POSTROUTING ACCEPT [0:0]
>> -A PREROUTING -m socket --transparent -j MARK --set-xmark 
>> 0x80000000/0x80000000
>> -A PREROUTING -j KZORP --tproxy-mark 0x80000000/0x80000000
>> -A FORWARD -j KZORP --tproxy-mark 0x80000000/0x80000000
>> -A POSTROUTING -j KZORP --tproxy-mark 0x80000000/0x80000000
>> COMMIT
>> # Completed on Fri Nov  9 10:54:37 2012
>>
>> policy.py
>>
>> from  Zorp.Core import  *
>> from  Zorp.Http import  *
>> from  Zorp.Proxy import  *
>>
>> InetZone('internet', ['0.0.0.0/0'],
>>     outbound_services=[
>>         "inetnetnet_HTTP_login0-localcahe"])
>>
>> InetZone('login0', ['1.1.1.1/32'])
>>
>> InetZone('login0-localcache', ['172.16.101.254/32'],
>>     inbound_services=[
>>         "inetnetnet_HTTP_login0-localcahe"],
>>     admin_parent='login0')
>>
>>
>> NATPolicy(name="inetnet_2_login0-localcache", 
>> nat=GeneralNAT(mapping=((InetDomain(addr="0.0.0.0/0"), 
>> InetDomain(addr="1.1.1.1/32"), InetDomain(addr="172.16.101.254/32")),)))
>>
>> def http() :
>>     Service(name="inetnetnet_HTTP_login0-localcahe", 
>> router=TransparentRouter(forced_port=0, forge_addr=FALSE, 
>> forge_port=Z_PORT_ANY, overrideable=FALSE), chainer=ConnectChainer(), 
>> max_instances=0, proxy_class=HttpProxy, 
>> dnat_policy="inetnet_2_login0-localcache")
>>     Dispatcher(transparent=FALSE, 
>> bindto=DBIface(protocol=ZD_PROTO_TCP, family=2, iface="eth0", 
>> ip="1.1.1.1", port=80), service="inetnetnet_HTTP_login0-localcahe", 
>> rule_port="80")
>>
>>
>> Ez így müködik is és megjelenik a weboldal a kíváncsiskodó számára, 
>> de az látszik a logban, hogy a kérelem a 172.16.101.254.ről érkezik.
>> Akkor sem látszik az eredeti IP, ha a webszerveren a logolásnál 
>> figyelek a varnish x-forwarded-for-ra.
>>
>> 172.16.101.254 - - [09/Nov/2012:11:01:54 +0100] "GET 
>> http://example.com/sites/all/themes/bordo/images/backtotop-arrow-dark.png 
>> HTTP/1.1" 304 0 
>> "http://example.com/sites/all/themes/bordo/style.css?md27b0" 
>> <http://example.com/sites/all/themes/bordo/style.css?md27b0> 
>> "Mozilla/5.0 (X11; Linux x86_64; rv:16.0) Gecko/20100101 Firefox/16.0 
>> Iceweasel/16.0.2"
>>
>> Akad esetleg egy mentő ötlet?
>>
>>
>>
>> Köszönöm!
>>
>> Tisztelettel:
>> Cs
>
> Ha jól értem a felállást, akkor a Zorp fogadja a HTTP kéréseket és 
> továbbadja a varnish-nak, majd az vagy kiszolgálja cache-ból, vagy 
> pedig továbbadja a belső webszervernek. Ha így van, akkor a probléma 
> lényege az, hogy már a varnish sem láthatja az eredeti forrásip-t, 
> mert a zorp-nak ahhoz, hogy a routing szerint a varnish ne az eredeti 
> kliensnek válaszoljon, át kell írnia a forráscímet arra, ami a felé az 
> interfész felé néz (legyen az akár gépen belül is).
>
> Az legegyszerűbb megoldás az, ha csinálsz egy olyan HTTP proxy 
> osztályt, aminek a konfig metódusában az eredeti IP-t beleteszed egy 
> egydi header-be, pl:
>
> class ClientIPHttpProxy(HttpProxy):
>     def config(self):
>         HttpProxy.config(self)
>         self.request_header["X-Original-Ip"] = (HTTP_HDR_INSERT, 
> self.session.client_address.ip_s)
>
> Majd a belső webszerveren átállítod a loggolást, hogy az X-Original-Ip 
> header tartalmát loggolja forráscímként. Ha minden jól megy, a 
> varnish-on keresztül ennek a header-nek is át kéne folynia a 
> webszerverig és megkapod az eredeti címet.
>
> Balint
>
>
>
> _______________________________________________
> zorp-hu mailing list
> zorp-hu at lists.balabit.hu
> https://lists.balabit.hu/mailman/listinfo/zorp-hu

--------- következő rész ---------
Egy csatolt HTML állomány át lett konvertálva...
URL: http://lists.balabit.hu/pipermail/zorp-hu/attachments/20121121/479dba45/attachment.htm 


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