<html>
  <head>
    <meta content="text/html; charset=ISO-8859-2"
      http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    Üdv!<br>
    <br>
    Végre volt időm neki esni.<br>
    <br>
    Teljesen jól működik a javaslat. Köszönöm!<br>
    <br>
    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.<br>
    <br>
    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. :(<br>
    <br>
    Köszönöm!<br>
    <br>
    <br>
    Tisztelettel:<br>
    Cs<br>
    <br>
    <br>
    On 11/09/2012 11:24 AM, Kovács Bálint wrote:
    <blockquote cite="mid:509CD9F6.6040206@balabit.hu" type="cite">
      <meta http-equiv="Context-Type" content="text/html;
        charset=ISO-8859-2">
      <div>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">
        Ü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>
        # 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 <br>
        <br>
        policy.py<br>
        <br>
        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") <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"
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"
          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>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <br>
      <pre wrap="">_______________________________________________
zorp-hu mailing list
<a class="moz-txt-link-abbreviated" href="mailto:zorp-hu@lists.balabit.hu">zorp-hu@lists.balabit.hu</a>
<a class="moz-txt-link-freetext" href="https://lists.balabit.hu/mailman/listinfo/zorp-hu">https://lists.balabit.hu/mailman/listinfo/zorp-hu</a>
</pre>
    </blockquote>
    <br>
  </body>
</html>