Nginx set_real_ip_from AWS ELB-Load Balancer-Adresse

Nginx set_real_ip_from AWS ELB-Load Balancer-Adresse

Ich habe eine Reihe von Nginx-Servern hinter einem Amazon ELB-Load Balancer. Ich verwende set_real_ip (von derHttpRealIpModule), damit ich auf die ursprüngliche Client-IP-Adresse auf diesen Servern zugreifen kann (zur Weitergabe an php-fpm und zur Verwendung in derHttpGeoIPModule).

Es scheint, dass set_real_ip_fromin der Nginx-Konfiguration nur eine IP-Adresse akzeptiert werden kann. In Bezug auf ELB-Maschinen sagt Amazon jedoch:

Hinweis: Da sich die mit einem LoadBalancer verknüpften IP-Adressen im Laufe der Zeit ändern können, sollten Sie niemals einen „A“-Eintrag mit einer bestimmten IP-Adresse erstellen. Wenn Sie für Ihren LoadBalancer einen benutzerfreundlichen DNS-Namen anstelle des vom Elastic Load Balancing-Dienst generierten Namens verwenden möchten, sollten Sie einen CNAME-Eintrag für den DNS-Namen des LoadBalancers erstellen oder Amazon Route 53 verwenden, um eine gehostete Zone zu erstellen. Weitere Informationen finden Sie unter Verwenden von Domänennamen mit Elastic Load Balancing.

Wenn ich jedoch eine IP-Adresse eingeben muss, kann ich keinen CNAME verwenden (weder den von Amazon noch meinen eigenen). Gibt es eine Lösung für dieses Problem?

Antwort1

Wenn Sie garantieren können, dass alle Anfragen von ELB kommen (ich bin damit nicht vertraut), könnten Sie Folgendes versuchen:

real_ip_header X-Forwarded-For;
set_real_ip_from 0.0.0.0/0;

Das sollte nginx sagen, dass es einem X-Forwarded-For-Header von jedem vertrauen soll. Der Nachteil ist, dass jeder, der direkt auf Ihren Server zugreift, einen X-Forwarded-For-Header fälschen könnte und nginx die falsche Client-IP-Adresse verwenden würde.

Antwort2

Heutzutage ist die Verwendung von VPC die beste Vorgehensweise. Dann kennen Sie den genauen CIDR für Ihren ELB. Anschließend können Sie Ihrer Nginx-Konfigurationsdatei Folgendes hinzufügen:

real_ip_header X-Forwarded-For;
set_real_ip_from 10.0.0.0/8;

Antwort3

Verwenden Sie die VPC CIDR für: set_real_ip_fromSie finden sie in der Amazon-Konsole unter VPC => Ihre VPC (ersetzen Sie <your VPC CIDR here>sie durch):

real_ip_header X-Forwarded-For;
set_real_ip_from <your VPC CIDR here>;

Antwort4

Wenn Sie den vertrauenswürdigen Bereich auf 0.0.0.0/0 auf Amazon ELB setzen, werden Sie mit Sicherheit in Schwierigkeiten geraten. Sie können garantieren, dass die Anfragen vom ELB kommen, wenn Sie die Sicherheitsgruppe für Ihren Nginx-Server konfigurieren können, aber dieOriginalDie Anfrage kann aus jeder möglichen Quelle stammen (Amazon ELBs sind öffentliche Schnittstellen).

Ein einfacher Test kann dies verraten:

curl --header "X-Forwarded-For: 1.2.3.4" "http://your-elb-dns-address/"

Die Protokolle auf Ihrem Nginx-Server zeigen dann 1.2.3.4 als echte IP an, die jedoch gefälscht ist. SieheIP-Bereich für interne private IP von Amazon ELBfür bessere Antworten.

verwandte Informationen