Apache mod_remoteip et journaux d'accès

9

Depuis Apache 2.4, j'ai commencé à utiliser mod_remoteip au lieu de mod_extract_forwarded pour réécrire l'adresse client à partir de x-forwarded-for fourni par les serveurs frontaux (vernis, squid, apache, etc.).

Jusqu'à présent, tout fonctionne bien avec les modules, c'est-à-dire php, cgi, wsgi etc ... - les adresses des clients sont affichées comme elles devraient l'être, mais je n'ai pas pu écrire l'adresse du client dans les journaux d'accès (% a,% h,% {c }une). Pas de chance - je reçois toujours 127.0.0.1 (localhost forward ex.).

Comment enregistrer l'adresse IP du client lors de l'utilisation de mod_remoteip?

Mise à jour: IT WORKS O_O - voir la réponse ci-dessous

GioMac
la source
vous voudrez peut-être ajouter la configuration spécifique que vous utilisez / testée. De plus, bien que cela ne soit pas détaillé, cela pourrait aider: knowledgevoid.com/blog/2012/01/13/… Je suppose que vous avez lu httpd.apache.org/docs/trunk/mod/mod_remoteip.html#page-header également ? stackexchange a quelques questions que vous voudrez peut-être lire: stackoverflow.com/questions/25455731/…
Dennis Nolte
configuration reconstruite, maintenant ça marche O_O
GioMac

Réponses:

20

configuration du vernis:

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

sections de configuration d'apache 2.4:

mod_remoteip:

RemoteIPHeader X-Forwarded-For
RemoteIPInternalProxy 127.0.0.1/8

journalisation (% a fait le travail):

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

+

s'il y a un nginx devant (ex. terminaison 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;
    }
}
GioMac
la source
1
Si vous acceptez cette réponse, vous devez attribuer la prime, même si c'est votre propre réponse.
mc0e
Pourriez-vous s'il vous plaît mettre à jour cela, ou nous donner la variation pour http.cf-connection-ip de CloudFlare? Je n'ai pas eu de chance de le faire fonctionner, désolé.
Ruslan Abuzant
Vous devez réellement utiliser $ proxy_add_x_forwarded_for au lieu de $ remote_addr pour Nginx X-Forwarded-For. Cela fait la même fonctionnalité que l'exemple Varnish, alors que $ remote_addr n'inclut pas les valeurs X-Forwarded-For précédentes
Andy
4

Selon la documentation de mod_remoteip , le module doit simplement remplacer l'adresse IP du client, mais uniquement lorsqu'il RemoteIPHeader x-forwarded-forest défini ( doc ). Assurez-vous également que la journalisation de votre vhost utilise le CustomLog que vous avez défini.

Sgaduuw
la source