Lack automagisch hinzufügen load balancer IP zu X-Forwarded-For-header

Meine Anfrage läuft wie folgt ab;

HAProxy --> Varnish (4.0.1) --> Apache web backends

Wenn ein neuer request kommt in HAProxy, die client-IP-Adresse Hinzugefügt wird, die X-Forwarded-For header (was gut ist!). Aber es sieht aus wie Lack, ist das hinzufügen der HAProxy IP-als auch. Wenn die Anfrage erhält, um mein vcl_recv routine, die X-Forwarded-For header:

X-Forwarded-For: end-user-ip, haproxy-ip

Können Sie sehen, dass in der varnishlog Ausgabe:

*   << Request  >> 8
-   Begin          req 7 rxreq
-   Timestamp      Start: 1409262358.542659 0.000000 0.000000
-   Timestamp      Req: 1409262358.542659 0.000000 0.000000
-   ReqStart       192.168.1.103 48193
-   ReqMethod      PURGE
-   ReqURL         /some/path
-   ReqProtocol    HTTP/1.1
-   ReqHeader      Authorization: Basic xxx
-   ReqHeader      User-Agent: curl/7.30.0
-   ReqHeader      Host: example.com
-   ReqHeader      Accept: */*
-   ReqHeader      X-Forwarded-For: 1.2.3.4
-   ReqHeader      Connection: close
-   ReqUnset       X-Forwarded-For: 1.2.3.4
-   ReqHeader      X-Forwarded-For: 1.2.3.4, 192.168.1.101
-   VCL_call       RECV
-   ReqUnset       X-Forwarded-For: 1.2.3.4, 192.168.1.101
-   VCL_acl        NO_MATCH purge_acl
-   Debug          "VCL_error(403, Not allowed.)"
-   VCL_return     synth

Den Grund brauche ich die genaue client-IP-Adresse, so kann ich es gegen ACL-Regeln für PURGE/BAN. Seit der letzten IP in der X-Forwarded-For header ist, dass der HAProxy, die ACL-Prüfung fehlschlägt, für alle IPs. Hier ist der relevante Teil meiner config:

acl purge_acl {
    "1.2.3.4";
}

sub vcl_recv {

    set req.backend_hint = load_balancer.backend();

    if (req.method == "PURGE") {
        if (!std.ip(req.http.X-forwarded-for, "0.0.0.0") ~ purge_acl) {
            return(synth(403, "Not allowed."));
        }
        ban("obj.http.x-url ~ " + req.url);
        return(synth(200, "Ban added"));
    }

}

Irgendwelche Ideen, wie kann ich verlassen sich ausschließlich auf die X-Forwarded-For header von HAProxy, ohne Lack Manipulation mit es?

Einer seitlichen Anmerkung scheint es, dass der Lack tut genau dies (obwohl dies NICHT in mv VCL config):

if (req.restarts == 0) {
    if (req.http.X-Forwarded-For) {
        set req.http.X-Forwarded-For = req.http.X-Forwarded-For + ", " + client.ip;
    } else {
        set req.http.X-Forwarded-For = client.ip;
    }
}
Schreibe einen Kommentar