Apache mod_remoteip e registri di accesso


9

Da Apache 2.4 ho iniziato a utilizzare mod_remoteip invece di mod_extract_forwarded per riscrivere l'indirizzo client da x-forwarded-for fornito dai server frontend (varnish, squid, apache ecc.).

Finora tutto funziona bene con i moduli, ad esempio php, cgi, wsgi ecc ... - gli indirizzi dei client sono mostrati come dovrebbero essere, ma non sono riuscito a scrivere l'indirizzo dei client nei log di accesso (% a,% h,% {c }un). Nessuna fortuna - ricevo sempre 127.0.0.1 (localhost forward ex.).

Come registrare l'indirizzo IP del client quando si utilizza mod_remoteip?

Aggiornamento: FUNZIONA O_O - vedere la risposta di seguito


potresti voler aggiungere la configurazione specifica che usi / testati. Inoltre, sebbene non nei dettagli, questo potrebbe aiutare: knowledgevoid.com/blog/2012/01/13/… Presumo che tu abbia letto httpd.apache.org/docs/trunk/mod/mod_remoteip.html#page-header pure? stackexchange ha alcune domande che potresti voler leggere: stackoverflow.com/questions/25455731/…
Dennis Nolte,

ri-costruita la configurazione, ora funziona O_O
GioMac

Risposte:


20

configurazione vernice:

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

sezioni di configurazione di apache 2.4:

mod_remoteip:

RemoteIPHeader X-Forwarded-For
RemoteIPInternalProxy 127.0.0.1/8

registrazione (% a fa il lavoro):

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

+

se c'è un nginx davanti (es. terminazione SSL):

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

1
Se accetti questa risposta, dovresti assegnare la generosità, anche se è la tua risposta.
mc0e

Potresti aggiornare questo o fornirci la variante per http.cf-connect-ip da CloudFlare? Non ho avuto fortuna a farlo funzionare, scusa.
Ruslan Abuzant,

Dovresti effettivamente usare $ proxy_add_x_forwarded_for invece di $ remote_addr per Nginx X-Forwarded-For. Ciò ha la stessa funzionalità dell'esempio di Varnish, mentre $ remote_addr non include i precedenti valori X-Forwarded-For
Andy

4

Secondo la documentazione di mod_remoteip , il modulo dovrebbe semplicemente sostituire l'indirizzo IP del client, ma solo quando RemoteIPHeader x-forwarded-forè impostato ( doc ). Inoltre, assicurati che la registrazione del tuo vhost utilizzi il CustomLog che hai definito.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.