Ich habe eine Reihe von Nginx-Servern hinter einem Amazon ELB-Load-Balancer. Ich verwende set_real_ip (aus dem HttpRealIpModule ), damit ich auf die IP-Adresse des Ursprungsclients auf diesen Servern zugreifen kann (zur Weiterleitung an php-fpm und zur Verwendung im HttpGeoIPModule ).
Es scheint, dass set_real_ip_from
in der Nginx-Konfiguration nur eine IP-Adresse akzeptiert werden kann. In Bezug auf ELB-Maschinen sagt Amazon jedoch:
Hinweis: Da sich die einem LoadBalancer zugeordneten IP-Adressen im Laufe der Zeit ändern können, sollten Sie niemals einen "A" -Datensatz mit einer bestimmten IP-Adresse erstellen. Wenn Sie anstelle des vom Elastic Load Balancing-Dienst generierten Namens einen benutzerfreundlichen DNS-Namen für Ihren LoadBalancer verwenden möchten, sollten Sie einen CNAME-Eintrag für den LoadBalancer-DNS-Namen erstellen oder eine gehostete Zone mit Amazon Route 53 erstellen. Weitere Informationen finden Sie unter Verwenden von Domänennamen mit elastischem Lastenausgleich
Wenn ich jedoch eine IP-Adresse eingeben muss, kann ich keinen CNAME verwenden (weder bei Amazon noch bei mir). Gibt es eine Lösung für dieses Problem?
10.0.0.1/8
würde funktionieren, obwohl es etwas spezifischeres geben könnte)Die heutige bewährte Methode ist die Verwendung von VPC. Daher kennen Sie den genauen CIDR für Ihre ELB. Anschließend können Sie Ihrer Nginx-Konfigurationsdatei Folgendes hinzufügen:
quelle
Verwenden Sie die VPC CIDR für
set_real_ip_from
Sie finden sie in der Amazon-Konsole unter VPC => Ihre VPC (durch<your VPC CIDR here>
sie ersetzen ):quelle
Das Festlegen des vertrauenswürdigen Bereichs auf 0.0.0.0/0 in Amazon ELB wird Sie mit Sicherheit in Schwierigkeiten bringen. Sie können sicherstellen, dass die Anforderungen von der ELB stammen, wenn Sie die Sicherheitsgruppe für Ihren Nginx-Server konfigurieren können. Die ursprüngliche Anforderung stammt jedoch aus einer beliebigen Quelle (Amazon ELBs sind öffentliche Schnittstellen).
Ein einfacher Test wird dies zeigen:
In den Protokollen auf Ihrem Nginx-Server wird dann 1.2.3.4 als die echte IP angezeigt, die gefälscht ist. Bessere Antworten finden Sie unter IP-Bereich für die interne private IP von Amazon ELB .
quelle
Das realip_module gibt an, dass dieses Modul im Fall von X-Forwarded-For die letzte IP-Adresse im X-Forwarded-For-Header zum Ersetzen verwendet. Dieses Modul wird nicht funktionieren , wenn nur
real_ip_header
undset_real_ip_form
eingestellt. Dies liegt daran, dass dieses Modul eine Proxy-IP-Adresse anstelle einer Client-IP verwendet. Zur Lösung dieserreal_ip_recursive
Richtlinie sollte aktiviert sein.Wenn Sie über SSL-Zertifikate verfügen, die für die Instanz bereitgestellt und erneuert werden (z. B. Letsencrypt- oder Certbot-Zertifikate). Diese Zertifizierungsstellen versuchen möglicherweise, diese Zertifikate über IPV6 zu validieren.
Es ist also wichtig, auch IPV6 zu haben. Die Nginx-Konfigurationsdatei sollte daher auch set_real_ip_from IPV6-Adresse enthalten.
Wenn zusätzliche Sicherheitsbestimmungen gelten, müssen wir möglicherweise auch
set_real_ip_from
VPC CIDR (sowohl IPV4 als auch IPV6) für Cloudfront / Elb / Ec2-Subnetze einbeziehen.quelle