<html>
  <head>
    <meta content="text/html; charset=ISO-8859-2"
      http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <div class="moz-cite-prefix">Szia,<br>
      <br>
      On 11/09/2012 11:07 AM, Kálmánczi Sándor wrote:<br>
    </div>
    <blockquote cite="mid:509CD5C7.8030905@nincs.net" type="cite">
      <meta http-equiv="content-type" content="text/html;
        charset=ISO-8859-2">
      Üdvözlet!<br>
      <br>
      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. :(<br>
      <br>
      De!<br>
      <br>
      Meglestem a dolgot.<br>
      <br>
      Ez alapján csináltam is egy olyat, hogy:<br>
      <br>
      Vagy egy zorp amiben egy dummy0 interfacen fut egy webszerver:<br>
      <br>
      iptables<br>
      <br>
      <small><small><small># Generated by iptables-save v1.4.14 on Fri
            Nov  9 10:54:37 2012<br>
            *filter<br>
            :INPUT ACCEPT [12630:1064741]<br>
            :FORWARD ACCEPT [0:0]<br>
            :OUTPUT ACCEPT [30302:5576360]<br>
            -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT<br>
            -A INPUT -m state --state ESTABLISHED -j ACCEPT<br>
            -A INPUT -m mark --mark 0x80000000/0x80000000 -j ACCEPT<br>
            -A OUTPUT -m mark --mark 0x80000000/0x80000000 -j ACCEPT<br>
            COMMIT<br>
            # Completed on Fri Nov  9 10:54:37 2012<br>
            # Generated by iptables-save v1.4.14 on Fri Nov  9 10:54:37
            2012<br>
            *mangle<br>
            :PREROUTING ACCEPT [0:0]<br>
            :INPUT ACCEPT [55883:34402514]<br>
            :FORWARD ACCEPT [0:0]<br>
            :OUTPUT ACCEPT [30302:5576360]<br>
            :POSTROUTING ACCEPT [0:0]<br>
            -A PREROUTING -m socket --transparent -j MARK --set-xmark
            0x80000000/0x80000000<br>
            -A PREROUTING -j KZORP --tproxy-mark 0x80000000/0x80000000 <br>
            -A FORWARD -j KZORP --tproxy-mark 0x80000000/0x80000000 <br>
            -A POSTROUTING -j KZORP --tproxy-mark 0x80000000/0x80000000
            <br>
            COMMIT<br>
            # Completed on Fri Nov  9 10:54:37 2012</small></small></small><br>
      <br>
      policy.py<br>
      <br>
      <small><small><small>from  Zorp.Core import  *<br>
            from  Zorp.Http import  *<br>
            from  Zorp.Proxy import  *<br>
            <br>
            InetZone('internet', ['0.0.0.0/0'],<br>
                outbound_services=[<br>
                    "inetnetnet_HTTP_login0-localcahe"])<br>
            <br>
            InetZone('login0', ['1.1.1.1/32'])<br>
            <br>
            InetZone('login0-localcache', ['172.16.101.254/32'],<br>
                inbound_services=[<br>
                    "inetnetnet_HTTP_login0-localcahe"],<br>
                admin_parent='login0')<br>
            <br>
            <br>
            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")),)))<br>
            <br>
            def http() :<br>
                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")<br>
                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")</small></small></small><br>
      <br>
      <br>
      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.<br>
      Akkor sem látszik az eredeti IP, ha a webszerveren a logolásnál
      figyelek a varnish x-forwarded-for-ra.<br>
      <br>
      172.16.101.254 - - [09/Nov/2012:11:01:54 +0100] "GET <a
        moz-do-not-send="true" class="moz-txt-link-freetext"
href="http://example.com/sites/all/themes/bordo/images/backtotop-arrow-dark.png">http://example.com/sites/all/themes/bordo/images/backtotop-arrow-dark.png</a>
      HTTP/1.1" 304 0 <a moz-do-not-send="true"
        class="moz-txt-link-rfc2396E"
        href="http://example.com/sites/all/themes/bordo/style.css?md27b0">"http://example.com/sites/all/themes/bordo/style.css?md27b0"</a>
      "Mozilla/5.0 (X11; Linux x86_64; rv:16.0) Gecko/20100101
      Firefox/16.0 Iceweasel/16.0.2"<br>
      <br>
      Akad esetleg egy mentő ötlet?<br>
      <br>
      <br>
      <br>
      Köszönöm!<br>
      <br>
      Tisztelettel:<br>
      Cs<br>
    </blockquote>
    <br>
    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).<br>
    <br>
    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:<br>
    <br>
    class ClientIPHttpProxy(HttpProxy):<br>
        def config(self):<br>
            HttpProxy.config(self)<br>
            self.request_header["X-Original-Ip"] = (HTTP_HDR_INSERT,
    self.session.client_address.ip_s)<br>
    <br>
    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.<br>
    <br>
    Balint<br>
    <br>
  </body>
</html>