Wie bekomme ich Client-IP von AWS, Google Cloud LB und Cloudflare in Nginx?

Die Herausforderung der Client-IP-Adresse in Cloud-Umgebungen

Das Aufsetzen einer Webanwendung in der Cloud ist stets eine aufregende und lehrreiche Angelegenheit.

Vor Kurzem habe ich ein wdzwdz-Tool ins Leben gerufen, welches in AWS gehostet und durch Cloudflare geschützt wird.

Dabei setze ich auf den AWS Application Load Balancer in Verbindung mit Nginx als Webserver. Nach dem Go-Live fiel mir beim Blick in die access.log-Dateien auf, dass sämtliche Anfragen von einer internen IP-Adresse (des Load Balancers) zu stammen schienen.

Das ist natürlich ungünstig, wenn man die Server-Logs zur Analyse von Besucherstandorten heranziehen möchte. Mir wurde klar, dass ich einige Konfigurationsanpassungen vornehmen musste, um die tatsächlichen Client-IPs wiederherzustellen.

Geht es Ihnen vielleicht ähnlich?

Im Folgenden zeige ich Ihnen, wie Sie die korrekte Client-IP in Ihren Nginx-Zugriffsprotokollen erhalten.

Ermittlung der Besucher-IP hinter einem AWS oder Google Cloud Load Balancer

  • Melden Sie sich auf Ihrem Nginx-Webserver an.
  • Navigieren Sie zum Installationspfad (standardmäßig /etc/nginx).
  • Erstellen Sie eine Sicherheitskopie Ihrer `nginx.conf`-Datei.
  • Fügen Sie den folgenden Code innerhalb des `http`-Blocks ein:
real_ip_header X-Forwarded-For;
set_real_ip_from 0.0.0.0/0;
  • Starten Sie Nginx neu. Sie sollten nun die tatsächlichen IP-Adressen Ihrer Besucher in den access.log-Dateien sehen.

Sollten Sie Cloudflare als CDN verwenden, werden Sie zunächst dessen IPs anstelle der tatsächlichen Client-IPs sehen. Hier ist eine zusätzliche Konfiguration notwendig.

Abrufen der Client-IP bei Nutzung von Cloudflare

Cloudflare ist ein ausgezeichneter Anbieter für CDN und Sicherheitslösungen, den ich sehr schätze. Wenn Sie – wie ich – Cloudflare einsetzen und die korrekten Besucher-IPs in Ihren Webserver-Logs anzeigen lassen möchten, gehen Sie wie folgt vor:

Angenommen, Sie haben sich bereits am Nginx-Server angemeldet.

Erstellen Sie eine Sicherheitskopie Ihrer Site-Konfigurationsdatei (üblicherweise unter `/etc/nginx/sites-available/ihredomain`).

Fügen Sie am Anfang der Datei Folgendes hinzu:

set_real_ip_from 103.21.244.0/22;
set_real_ip_from 103.22.200.0/22;
set_real_ip_from 103.31.4.0/22;
set_real_ip_from 104.16.0.0/13;
set_real_ip_from 104.24.0.0/14;
set_real_ip_from 108.162.192.0/18;
set_real_ip_from 131.0.72.0/22;
set_real_ip_from 141.101.64.0/18;
set_real_ip_from 162.158.0.0/15;
set_real_ip_from 172.64.0.0/13;
set_real_ip_from 173.245.48.0/20;
set_real_ip_from 188.114.96.0/20;
set_real_ip_from 190.93.240.0/20;
set_real_ip_from 197.234.240.0/22;
set_real_ip_from 198.41.128.0/17;
set_real_ip_from 199.27.128.0/21;
set_real_ip_from 2400:cb00::/32;
set_real_ip_from 2606:4700::/32;
set_real_ip_from 2803:f800::/32;
set_real_ip_from 2405:b500::/32;
set_real_ip_from 2405:8100::/32;
set_real_ip_from 2c0f:f248::/32;
set_real_ip_from 2a06:98c0::/29;
real_ip_header CF-Connecting-IP;

Wichtiger Hinweis: Die aktuell gültige IP-Adressliste finden Sie auf der offiziellen Cloudflare-Seite.

Starten Sie Nginx erneut. Ab sofort sollten die korrekten Client-IPs in Ihren Logdateien erscheinen. Mir hat diese Anpassung sehr geholfen, und ich hoffe, Ihnen auch!

Als Nächstes befasse ich mich damit, wie man sichere Header mithilfe von Cloudflare Workers implementieren kann.

Hat Ihnen dieser Artikel gefallen? Dann teilen Sie ihn gerne mit anderen!