Nginx set_real_ip_bir AWS ELB yük dengeleyici adresinden


22

Amazon ELB yük dengeleyicisinin arkasında bir dizi Nginx sunucusu var. Set_real_ip ( HttpRealIpModule'den ) kullanıyorum, böylece bu sunuculardaki kaynak IP adreslerine erişebiliyorum (php- fpm'ye geçmek ve HttpGeoIPModule'de kullanmak için ).

set_real_ip_fromNginx konfigürasyonunda sadece bir IP adresi kabul edebildiği anlaşılıyor . Ancak, ELB makineleri konusunda Amazon şöyle diyor:

Not: Bir LoadBalancer ile ilişkilendirilmiş IP adresleri kümesi zaman içinde değişebildiğinden, belirli bir IP adresi ile asla bir "A" kaydı oluşturmamalısınız. Elastik Yük Dengeleme hizmeti tarafından oluşturulan ad yerine LoadBalancer'ınız için dostça bir DNS adı kullanmak istiyorsanız, LoadBalancer DNS adı için bir CNAME kaydı oluşturmanız veya barındırılan bir bölge oluşturmak için Amazon Route 53 kullanmanız gerekir. Daha fazla bilgi için, bkz. Elastik Yük Dengelemeli Etki Alanı Adlarını Kullanma

Ancak bir IP adresi girmem gerekirse, bir CNAME kullanamıyorum (amazon veya benim). Bu sorunun bir çözümü var mı?

Yanıtlar:


40

Tüm isteklerin ELB'den geleceğini garanti ediyorsanız (buna aşina değilim), deneyebilirsiniz:

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

Bu, nginx'e herhangi birinden bir X-Forwarded-For başlığına güvenmesini söylemelidir. Dezavantajı eğer birisi sunucunuza doğrudan erişirse, bir X-Forwarded-For başlığını taklit edebilir ve nginx yanlış istemci ip adresini kullanır.


2
Teşekkürler - Orada bir IP aralığı ekleyebileceğimin farkında değildim ... 10.0.0.1/8
ELB'nin

Geçerli aralığı bilen olup olmadığını öğrenmek için bir takip sorusu ekledim: serverfault.com/questions/331697/…
vitch

Eğer bir VPC ALB ise, aralık (lar) LB'nin bir parçası olduğu alt ağ aralıklarınızla aynıdır.
talonx 12:18

17

Günümüzün en iyi uygulaması VPC kullanmaktır, bu yüzden ELB'niz için tam CIDR'yi bileceksiniz. Ardından, Nginx yapılandırma dosyanıza böyle bir şey ekleyebilirsiniz:

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

Sorunun 2011'den geldiğini görünce, o zaman seçenek mevcut değildi. Sadece olası tüm özel ağları ekliyorum çünkü dışarıdaki kullanıcılar kolayca ulaşamıyor.
Jordan Reiter

7

Bunun için VPC CIDR kullanın set_real_ip_fromVPC => VPC'nizin altındaki Amazon konsolunda bulabilirsiniz (onunla değiştirin <your VPC CIDR here>):

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

4

Amazon ELB'de güvenilen aralığı 0.0.0.0/0 olarak ayarlamak kesinlikle başınızı belaya sokar. Nginx sunucunuz için güvenlik grubunu yapılandırabilirseniz, isteklerin ELB'den geleceğini garanti edebilirsiniz, ancak orijinal istek olası herhangi bir kaynaktan gelecektir (Amazon ELB'ler genel arayüzlerdir).

Basit bir test bunu ortaya çıkaracaktır:

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

Nginx sunucunuzdaki günlükler daha sonra sahte olan gerçek IP olarak 1.2.3.4'ü gösterecektir. Daha iyi cevaplar için Amazon ELB’nin dahili IP’si için IP Range’e bakınız .


3
Bu sadece , real_ip_recursive ayarını yaparsanız , hangisi varsayılan değildir ve soruyu ilk başta cevapladığımda bile mevcut değildi.
kolbyjack

3

Realip_module X-Forwarded-For durumunda, bu modül son ip adresi kullanan Devletleri X-Forward-For değiştirilmesi için başlığındaki. Bu modül yalnızca ayarlandığında real_ip_headerve çalışmayacaksa çalışmayacaktır set_real_ip_form. Bunun nedeni, bu modülün istemci IP'si yerine proxy IP adresi kullanmasıdır. Bu real_ip_recursiveyönergeyi çözmek için etkin olmalıdır.

Ayrıca, örnekte dağıtılan ve yenilenen SSL sertifikalarınız varsa (örneğin letsencrypt veya certbot sertifikaları gibi). Bu sertifika yetkilileri bu sertifikaları IPV6 aracılığıyla doğrulamaya çalışabilir.

Bu yüzden IPV6'ya sahip olmak önemlidir. Bu yüzden Nginx yapılandırma dosyası IPV6 adresinden set_real_ip_from da içermelidir.

real_ip_header X-Forwarded-For;
real_ip_recursive on;
set_real_ip_from <your VPC IPV4 CIDR here>;
set_real_ip_from <your VPC IPV6 CIDR here>;

ek güvenlik önlemleri uygulanırsa, set_real_ip_fromcloudfront / elb / ec2 alt ağları için VPC CIDR (hem IPV4 hem IPV6) eklememiz gerekebilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.