Apache mod_remoteip und Zugriffsprotokolle

9

Seit Apache 2.4 verwende ich mod_remoteip anstelle von mod_extract_forwarded zum Umschreiben der Clientadresse von x- forwarded -for, das von Frontend-Servern (Lack, Tintenfisch, Apache usw.) bereitgestellt wird.

Bisher funktioniert alles einwandfrei mit den Modulen, dh PHP, CGI, WSGI usw. - Client-Adressen werden so angezeigt, wie sie sein sollten, aber ich konnte keine Client-Adresse in Zugriffsprotokolle schreiben (% a,% h,% {c }ein). Kein Glück - ich bekomme immer 127.0.0.1 (localhost forward ex.).

Wie protokolliere ich die IP-Adresse des Clients bei Verwendung von mod_remoteip?

Update: ES FUNKTIONIERT O_O - siehe Antwort unten

GioMac
quelle
Möglicherweise möchten Sie die spezifische Konfiguration hinzufügen, die Sie verwenden / getestet haben. Auch wenn dies nicht im Detail beschrieben ist, kann dies hilfreich sein: KnowledgeVoid.com/blog/2012/01/13/… Ich nehme an, Sie haben auch httpd.apache.org/docs/trunk/mod/mod_remoteip.html#page-header gelesen? stackexchange hat ein paar Fragen, die Sie vielleicht lesen möchten: stackoverflow.com/questions/25455731/…
Dennis Nolte
neu erstellte Konfiguration, jetzt funktioniert es O_O
GioMac

Antworten:

20

Lackkonfiguration:

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;
    }
}

Konfigurationsabschnitte für Apache 2.4:

mod_remoteip:

RemoteIPHeader X-Forwarded-For
RemoteIPInternalProxy 127.0.0.1/8

Protokollierung (% a erledigt den Job):

LogFormat "%a %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

+

Wenn sich ein Nginx vor Ihnen befindet (z. B. SSL-Terminierung):

server {
    listen       123.123.123.123:443;
    server_name  server.com;
    root         html;

    ssl                  on;
    ssl_certificate      /etc/pki/httpd/site/chain.crt;
    ssl_certificate_key  /etc/pki/httpd/site/private.key;

    ssl_session_timeout  5m;

    ssl_protocols  SSLv2 SSLv3 TLSv1;
    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers   on;

    location / {
        proxy_pass   http://127.0.0.1:6081;
        proxy_set_header Host $http_host;
        proxy_pass_header Server;
        proxy_set_header X-Forwarded-For $remote_addr;
    }
}
GioMac
quelle
1
Wenn Sie diese Antwort akzeptieren, sollten Sie das Kopfgeld vergeben, auch wenn es Ihre eigene Antwort ist.
mc0e
Würden Sie dies bitte aktualisieren oder uns die Variante für http.cf-connecting-ip von CloudFlare geben? Ich hatte kein Glück, es zur Arbeit zu schaffen, sorry.
Ruslan Abuzant
Sie sollten tatsächlich $ proxy_add_x_forwarded_for anstelle von $ remote_addr für Nginx X-Forwarded-For verwenden. Dies entspricht der Funktionalität des Varnish-Beispiels, während $ remote_addr keine vorherigen X-Forwarded-For-Werte enthält
Andy
4

Gemäß der Dokumentation von mod_remoteip sollte das Modul einfach die Client-IP-Adresse ersetzen, jedoch nur, wenn dies festgelegt RemoteIPHeader x-forwarded-forist ( doc ). Stellen Sie außerdem sicher, dass die Protokollierung Ihres vhost das von Ihnen definierte CustomLog verwendet.

Sgaduuw
quelle