[zorp-hu] x-forwarded-for
Kovács Bálint
kovacs.balint at balabit.hu
2012. Nov. 9., P, 11:24:54 CET
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"
> "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
--------- következő rész ---------
Egy csatolt HTML állomány át lett konvertálva...
URL: http://lists.balabit.hu/pipermail/zorp-hu/attachments/20121109/e8dc594e/attachment.htm
További információk a(z) zorp-hu levelezőlistáról