CloudFlare + Varnish + Nginx – Echte IP in den Logs

Ich zeige euch heute ein kurzes Tutorial. Wenn ihr wie ich den Varnish Cache, den Nginx Webserver und CloudFlare benutzt kennt ihr folgendes Problem: die Access-Logs enthalten nur 127.0.0.1 als IP oder nur die IP der CloudFlare-Server. Dieses Problem tritt auch auf wenn ihr nur Nginx und CloudFlare benutzt: ihr habt dann die CloudFlare Server IP durch die der jeweilige Benutzer geleitet wurde in euren Logs anstatt der richtigen IP des Benutzers. Das ist besonders mit Cookies, Tracking-Services und Analysesoftware ein großes Problem. Dafür gibt es jedoch Abhilfe. Ich habe selber lange gebraucht bis ich diese Lösung gefunden hatte. Dieses Tutorial zeigt euch die Lösung für dieses Problem. Ich erwarte dazu das ihr bereits Nginx und Varnish und CloudFlare für ein Linux-System (vorzugsweise Debian) funktionierend eingerichtet habt.

1. Schritt: Varnish

Wenn ihr kein Varnish benutzt, dann könnt ihr diesen Schritt überspringen.
Dieses Tutorial behandelt ausschließlich Varnish 4.0 und keine anderen Varnish-Versionen. Zu anderen Varnish-Versionen ist es wahrscheinlich nicht kompatibel. Es besteht die Möglichkeit das es mit Varnish 4.1 auch funktionieren könnte, das kann ich aber nicht garantieren.
Zu erst einmal müssen wir ein paar Änderungen an der Konfigurationsdatei von Varnish vornehmen. Die Varnish-Konfigurationsdateien heißen normalerweise „default.vcl„. Diese Datei könnt ihr normalerweise unter /etc/varnish/default.vcl finden. Ungewöhnliche Installationen haben diese Datei unter Umständen woanders. Schaut in eure Man-Pages um es herauszufinden. Wenn ihr bereits Varnish eingerichtet habt, sollte ihr wissen wo sich die Datei befindet. Öffnet die Datei mit einem Texteditor wie nano mit root-Rechten.

## Tragt den Code in den sub vcl_recv{ Abschnitt ein

unset req.http.X-Forwarded-For;
if (req.http.cf-connecting-ip) {
    set req.http.X-Forwarded-For = req.http.cf-connecting-ip;
    } else {
            set req.http.X-Forwarded-For = client.ip;
        }

Speichert die Datei und startet euren Varnish erneut.

2. Schritt: Nginx

Gebt folgendes in euer Terminal ein:

nginx -V

Nginx zeigt euch welche Version von Nginx ihr installiert habt und welche Features sie hat. Sucht danach ob

--with-http_realip_module

dabei ist. Wenn es dabei ist könnt ihr das Tutorial weiterführen. Ansonsten müsst ihr Nginx mit diesem Modul neu kompilieren.
Öffnet mit einem Texteditor mit root-Rechten eure /etc/nginx/nginx.conf und tragt dort in den http{ Bereich folgendes ein:

set_real_ip_from   127.0.0.1;
##die IP eures Varnish Caches. Läuft meistens auf der selben Maschine, ansonsten die IP der Maschine auf der Varnish läuft
real_ip_header     X-Forwarded-For; 
##Hiermit wird der X-Forward-For Header den der Varnish Cache aus den Paketen von CloudFlare gelesen hat gesetzt, dies sorgt dafür das die IP des Benutzers anstatt der CloudFlare IP in die Logs kommt.

Jetzt gibt es noch etwas zu tun. Geht zu der Zeile in eurer Nginx.conf in der „access_log“ steht. Geht jetzt eine Zeile über diesen Eintrag und macht mit der Enter-Taste eine neue Zeile auf. In dieser Zeile die ÜBER der Zeile mit „access_log“ steht gebt ihr folgendes ein:

log_format varnish_log '$http_x_forwarded_for - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent "$http_referer" ' '"$http_user_agent"' ;

Danach geht ihr in die „access_log“ Zeile und ändert diese Zeile in folgendes:

access_log /var/log/nginx/access.log varnish_log;

Jetzt speichert ihr die Datei, schließt euren Texteditor und startet euren Nginx neu.

Fertig! Wenn ihr alle Schritte befolgt habt dann habt ihr jetzt die richtige IP in euren Nginx-Logs. Probiert es einfach einmal selber aus in dem ihr eure Website besucht und dann in eure Nginx-Logs schaut. Die Nginx-Logs findet ihr wie immer in der Datei /var/log/nginx/access.log

PS:

Dieser Artikel ist eine Übersetzung und Anpassung von zwei älteren englischen Artikeln die ich so verändert habe das sie auch mit den aktuellen Versionen von Nginx und Varnish funktionieren. Es handelt sich hierbei um den Artikel von BitronicTech und den Artikel von Linuxaria.com die ich verbessert und übersetzt habe.

Update 28.10.2015:

Ich habe mein VCL-Skript auf meinen Blog gepostet. Vielleicht kann der Skript euch helfen wenn ihr einen Varnish Cache vor eurer WordPress-Seite stellen wollt.

Facebooktwittergoogle_plusredditpinterestlinkedintumblrmail
mxvt Verfasst von:

Administrator