Wie man eine echte IP über Cloudflare erhält – Nginx Reverse Proxy – Docker

Veröffentlicht von Rhein-Ruhr-Informatik am

Einführung

Wenn Sie Cloudflare als CDN- und DDoS-Schutzdienst verwenden, fungiert es als Vermittler zwischen Ihrer Website und ihren Besuchern. Das bedeutet, dass die für Ihren Webserver sichtbare IP-Adresse standardmäßig die von Cloudflare ist, nicht die des ursprünglichen Besuchers. Dies kann zu Problemen bei der Protokollierung, der Analyse und den auf IP-Adressen basierenden Sicherheitsrichtlinien führen. In diesem Artikel gehen wir die Schritte durch, die notwendig sind, um Ihren Nginx-Server so zu konfigurieren, dass er die echten IP-Adressen der Besucher richtig protokolliert und verwendet, wenn Sie Cloudflare verwenden, selbst in einer Docker-Umgebung.

Das Problem verstehen

Wenn sich ein Besucher über Cloudflare mit Ihrer Website verbindet, wird die ursprüngliche IP-Adresse durch die eigene IP von Cloudflare maskiert. Dies hilft, Ihren Server vor direkten Angriffen zu schützen, erschwert aber die Identifizierung der wahren Besucher-IP. Um dieses Problem zu lösen, fügt Cloudflare Header wie X-Forwarded-For und CF-Connecting-IP ein, die die Original-IP des Clients enthalten. Nginx verwendet diese Header standardmäßig nicht, so dass eine zusätzliche Konfiguration erforderlich ist.

Voraussetzungen

Vergewissern Sie sich vor dem Start, dass Sie alles haben:

  1. Auf einem Nginx-Server, auf dem das Modul ngx_http_realip_module aktiviert ist. Dieses Modul ist erforderlich, um die realen IP-Header korrekt zu behandeln.
  2. Ein grundlegendes Verständnis der Nginx-Konfiguration und von Docker.
  3. Zugang zu den Konfigurationsdateien Ihres Servers.

Schritt 1: Nginx für die Verwendung von echten IP-Headern konfigurieren

Damit Nginx die echte IP aus den von Cloudflare bereitgestellten Headern erkennt, müssen Sie die Konfiguration ändern. Stellen Sie zunächst sicher, dass das Modul ngx_http_realip_module installiert ist. Dieses Modul ist normalerweise in den meisten Nginx-Installationen standardmäßig enthalten.

Als nächstes erstellen Sie eine Datei namens Cloudflare im Verzeichnis /etc/nginx/ mit folgendem Inhalt:

set_real_ip_from 103.21.244.0/22;
set_real_ip_from 103.22.200.0/22;
...
real_ip_header CF-Verbindungs-IP;

Diese Datei listet alle Cloudflare-IP-Bereiche auf und weist Nginx an, diesen IPs zu vertrauen und den CF-Connecting-IP-Header für die echte IP zu verwenden. Für zukünftige Updates ist es wichtig, die IP-Bereiche von Cloudflare regelmäßig zu überprüfen, da sie sich im Laufe der Zeit ändern können.

Schritt 2: Einbindung der Cloudflare-Konfiguration in Nginx

Bearbeiten Sie die Hauptkonfigurationsdatei von Nginx, die sich normalerweise unter /etc/nginx/nginx.conf befindet. Fügen Sie im Abschnitt http {} die neu erstellte Cloudflare-Konfigurationsdatei ein:

http {
     include /etc/nginx/cloudflare;
     ...
}

Dadurch wird sichergestellt, dass die reale IP-Konfiguration global auf alle Ihre Serverblöcke angewendet wird.

Schritt 3: Aufzeichnung echter IP-Adressen

Um die ursprüngliche Besucher-IP in Ihre Logs aufzunehmen, ändern Sie die log_format-Direktive in Ihrer nginx.conf, um die Variablen $http_cf_connecting_ip und $http_x_forwarded_for zu verwenden. Zum Beispiel:

log_format main '$remote_addr - $http_cf_connecting_ip [$time_local] "$request" '
    '$status $body_bytes_sent "$http_referer" '
    '"$http_user_agent" "$http_x_forwarded_for"';

So können Sie sowohl die Cloudflare-IP als auch die ursprüngliche Besucher-IP in Ihren Protokollen sehen.

Schritt 4: Übernahme der Änderungen

Um die Änderungen anzuwenden, testen Sie die Nginx-Konfiguration:

  • Für CentOS/RHEL:

nginx -t

  • Für Ubuntu:

service nginx restart

Schritt 5: Überprüfen der Konfiguration

Überprüfen Sie Ihre Website und die Nginx-Zugangs- und Fehlerprotokolle (z. B. /var/log/nginx/access.log), um sicherzustellen, dass die echten Besucher-IPs korrekt protokolliert werden. Dieser Schritt ist wichtig, um sicherzustellen, dass Ihre Konfiguration wie erwartet funktioniert.

Optional: Handhabung von Real IP in einer Docker-Umgebung

Wenn Ihre Webanwendung in einem Docker-Container läuft, müssen Sie die echte IP an die containerisierte Anwendung übergeben. Fügen Sie die folgende Zeile in Ihre Nginx-Konfiguration ein, direkt nach der fastcgi_pass Direktive:

fastcgi_param REMOTE_ADDR $http_x_real_ip;

Dies setzt die Variable $_SERVER['REMOTE_ADDR'] in PHP-basierten Anwendungen auf die ursprüngliche IP.

Allgemeine Probleme und Fehlerbehebung

  1. Falsche IP in den Protokollen: Überprüfen Sie, ob die Cloudflare-IP-Bereiche aktuell sind und ob die real_ip_header Direktive korrekt gesetzt ist.
  2. Nginx-Konfigurationsfehler: Verwenden Sie nginx -t, um vor dem Neustart von Nginx auf Syntaxfehler in den Konfigurationsdateien zu prüfen.
  3. Docker-Netzwerk-Probleme: Stellen Sie sicher, dass der Netzwerkmodus von Docker eine korrekte IP-Weiterleitung ermöglicht.

Schlussfolgerung

Wenn Sie die in diesem Artikel beschriebenen Schritte befolgen, können Sie sicherstellen, dass Ihr Nginx-Server, auch wenn er innerhalb von Docker läuft, die von Cloudflare bereitgestellten ursprünglichen IP-Adressen der Besucher korrekt protokolliert und verwendet. Dies ist für eine genaue Protokollierung, Sicherheitskonfigurationen und Analysen unerlässlich. Mit der richtigen Konfiguration können Sie die Vorteile des Schutzes von Cloudflare nutzen, ohne die Sichtbarkeit von echten Benutzerdaten zu opfern.

de_DEDeutsch