ALB istekleri iletirken arka uç sunucunun gördüğü kaynak IP adresi, ALB örneğinin IP adresidir. ALB, gerçek istemci IP'sini HTTP başlığındaki X-Forwarded-For alanına ekleyebilir; bu bilgiyi arka uç sunucunuzda basit bir yapılandırma ile alabilirsiniz.
X-Forwarded-For alanının biçimi aşağıdaki gibidir:
X-Forwarded-For: <real client IP, proxy server 1-IP, proxy server 2-IP, ...>
Yordam
Adım 1: Dinleyici yapılandırmasında X-Forwarded-For doğrulaması yapın**
ALB konsolu oturumunu açın ve hedef örnek kimliğine tıklayarak Instance Details sayfasına gidin.
-
Listener sekmesinde hedef dinleyicinin kimliğine tıklayın. Listener Details sayfasında Basic Information bölümünde Add HTTP Header seçeneğinin
X-Forwarded-Foriçerecek şekilde yapılandırıldığını doğrulayın.Bu seçenek varsayılan olarak etkindir. Etkin değilse Basic Information bölümündeki Modify Listener seçeneğine tıklayın ve Advanced Settings bölümünden etkinleştirin.
Adım 2: Arka uç sunucusunu yapılandırın
Bu konuda, arka uç sunucunuzun erişim günlüğünde gerçek istemci IP'sinin nasıl kaydedileceği (
X-Forwarded-Foralanı aracılığıyla) açıklanır. Sunucu bağlantı katmanı değişkenleri (Nginx'te$remote_addrve Apache'de%hgibi) ALB yönlendirme IP'sine (yerel IP) ayarlı kalır ve etkilenmez.Bağlantı katmanı değişkenlerini doğrudan gerçek istemci IP'si ile değiştirmek istiyorsanız (böylece mevcut günlük tutma, erişim kontrolü ve diğer kurallar değiştirilmeden çalışır) bkz. Nginx veya Apache'nin gerçek istemci IP'sini doğrudan almasını sağlama (bağlantı katmanı adresinin değiştirilmesi).
Nginx sunucusu
Bu konuda Alibaba Cloud Linux 3.2104 ve nginx/1.20.1 sürümlerini çalıştıran bir Nginx sunucusu örnek olarak kullanılmıştır. Gerçek yapılandırma ortamınıza bağlı olarak değişiklik gösterebilir.
Nginx, http_realip_module modülünü kullanarak X-Forwarded-For başlığını ayrıştırır ve gerçek istemci IP'sini alır.
-
Modülün yüklü olduğunu doğrulayın: Sunucuda
nginx -V 2>&1 | grep --color=auto http_realip_modulekomutunu çalıştırın. Çıktıda--with-http_realip_moduleifadesi varsa modül yüklüdür.
Yaygın Linux dağıtımlarında
yumveyaaptgibi bir paket yöneticisi aracılığıyla yüklenen Nginx genellikle bu modülü varsayılan olarak içerir. Modül yüklü değilse Nginx'i bir paket yöneticisi kullanarak yüklemeniz veya yükseltmeniz önerilir. -
Nginx yapılandırma dosyasını değiştirin: Yapılandırma dosyasının yolunu bulmak için
sudo nginx -tkomutunu çalıştırın. Varsayılan yol genellikle/etc/nginx/nginx.confolur.http { # Ensure the log format includes $http_x_forwarded_for to record the value of the X-Forwarded-For header. log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; # Ensure the access log uses the preceding log format. access_log /var/log/nginx/access.log main; # ... } Yapılandırmayı yeniden yükleyin: Yapılandırma sözdizimini denetlemek için
sudo nginx -tkomutunu çalıştırın. Sözdizimi doğruysa değişiklikleri uygulamak üzeresudo nginx -s reloadkomutunu çalıştırın.
Apache sunucusu
Bu konuda Alibaba Cloud Linux 3.2104 ve Apache/2.4.37 sürümlerini çalıştıran bir Apache sunucusu örnek olarak kullanılmıştır. Gerçek yapılandırma ortamınıza bağlı olarak değişiklik gösterebilir.
Apache, mod_remoteip modülünü kullanarak X-Forwarded-For başlığını ayrıştırır ve gerçek istemci IP'sini alır.
-
Modülün yüklü olduğunu doğrulayın: Sunucuda
httpd -M | grep remoteip_modulekomutunu çalıştırın. Çıktıdaremoteip_module (shared)ifadesi varsa modül yüklüdür.
Yaygın Linux dağıtımlarında
yumveyaaptgibi bir paket yöneticisi aracılığıyla yüklenen Apache genellikle bu modülü varsayılan olarak içerir. Modül yüklü değilse Apache'yi bir paket yöneticisi kullanarak yüklemeniz veya yükseltmeniz önerilir. -
Apache yapılandırma dosyasını değiştirin: Yapılandırma dosyasının yolunu bulmak için
httpd -Vkomutunu çalıştırın. Varsayılan yol genellikle/etc/httpd/conf/httpd.confolur.# ... <IfModule log_config_module> # ... # Ensure the log format includes %{X-Forwarded-For}i to record the value of the X-Forwarded-For header. LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %{X-Forwarded-For}i" combined # ... # Ensure the access log uses the preceding log format. CustomLog "logs/access_log" combined </IfModule> # ... Yapılandırmayı yeniden yükleyin: Değişiklikleri uygulamak için
sudo systemctl restart httpdkomutunu çalıştırın.
IIS sunucusu
Bu konuda Windows Server 2022 21H2 ve IIS 10.0 sürümlerini çalıştıran bir IIS sunucusu örnek olarak kullanılmıştır. Gerçek yapılandırma ortamınıza bağlı olarak değişiklik gösterebilir.
-
IIS Yöneticisi'nin Connections bölmesinde hedef sunucuyu seçin. Ana bölmede Logging öğesine çift tıklayın.

-
Log File bölümünde Select Fields seçeneğine tıklayın.

-
W3C Logging Fields iletişim kutusunda Add Field seçeneğine tıklayın. Add Custom Field iletişim kutusunda alan bilgilerini yapılandırın ve OK seçeneğine tıklayın.
Field Name:
X-Forwarded-Forgirin.Source Type: Varsayılan değeri olan
Request Headerdeğerini koruyun.Source:
X-Forwarded-Forgirin.

-
Özel alanın eklendiğini onaylayın ve OK seçeneğine tıklayın.

-
Sağ taraftaki Actions bölmesinde değişiklikleri kaydetmek için Apply seçeneğine tıklayın.

Adım 3: İstemci IP'sinin alındığını doğrulayın
Gerçek istemci IP'sinin alındığını doğrulamak için arka uç web sunucusunun erişim günlüğünü denetleyin.
Nginx sunucusu
Nginx erişim günlüğünün varsayılan yolu /var/log/nginx/access.log konumudur.
Her günlük girdisinde $http_x_forwarded_for değişkeninin değeri gerçek istemci IP'sidir.

Apache sunucusu
Apache erişim günlüğünün varsayılan yolu /var/log/httpd/access_log konumudur.
Her günlük girdisinde %{X-Forwarded-For}i değişkeninin değeri gerçek istemci IP'sidir.

IIS sunucusu
IIS erişim günlüğünün varsayılan yolu %SystemDrive%\inetpub\logs\LogFiles konumudur.
Her günlük girdisinde son X-Forwarded-For alanındaki değer gerçek istemci IP'sidir.

Üretim en iyi uygulamaları
X-Forwarded-For başlığını doğrulayın ve filtreleyin: Arka uç sunucunuzda X-Forwarded-For başlığını doğrulayın ve filtreleyin. Hatalı biçimlendirilmiş veya güvenilmeyen IP adresleri içeren girdileri reddedin.
Güvenlik ilkelerini kullanın: ALB ile arka uç sunucularınız arasında güvenlik grupları veya diğer üçüncü taraf güvenlik ilkelerini kullanarak sahte X-Forwarded-For başlığı içeren kötü amaçlı istekleri kısıtlayın ve filtreleyin.
TLS şifrelemesi: Bileşenler arasındaki iletişimi korumak ve X-Forwarded-For başlığının iletimi sırasında araya girme saldırıları ile veri kurcalama riskini azaltmak için TLS şifrelemesi kullanın.
SSS
100 ile başlayan IP'lerden sık erişim
Yükseltilmiş ALB örnekleri arka uç sunucularıyla iletişim kurmak için ilişkili vSwitch CIDR bloklarından özel IP adresleri (yerel IP'ler) kullanır.
Yükseltilmemiş ALB örnekleri arka uç sunucularıyla iletişim kurmak için Alibaba Cloud tarafından ayrılmış ve herhangi bir güvenlik riski oluşturmayan
100.64.0.0/10adres aralığını kullanır.
ALB, istekleri arka uç sunucularına iletmenin yanı sıra sürekli durum denetimleri de gerçekleştirir. Yükseltilmemiş bir ALB örneği kullanıyorsanız arka uç sunucusu erişim günlüklerinizde 100.64.0.0/10 aralığındaki IP adreslerinden gelen çok sayıda istek görürsünüz.
ALB örneğiniz ile arka uç hizmetleri arasında düzgün bağlantı sağlamak için arka uç ECS örneklerinizdeki iptables veya diğer üçüncü taraf güvenlik yazılımlarının ALB örneğinin vSwitch CIDR bloğunu veya 100.64.0.0/10 adres aralığını engellemediğinden emin olun.
WAF, CDN veya GA ile istemci IP'sini alma
Trafik ALB'ye ulaşmadan önce Web Application Firewall (WAF), Content Delivery Network (CDN) veya Global Accelerator (GA) gibi hizmetler tarafından yönlendiriliyorsa gerçek istemci IP'sini X-Forwarded-For alanından da alabilirsiniz. Bu ürünler varsayılan olarak bu başlığı iletir ve ek yapılandırma gerektirmez.
X-Forwarded-For sahteciliğini önlemek için gerçek istemci IP'sini kaydetmek amacıyla diğer HTTP başlıklarını kullanabilirsiniz:
-
Alibaba Cloud CDN'den gelen
Ali-Cdn-Real-Ipbaşlığını kullanın. Mimari Client > CDN > WAF > ALB > ECS şeklindedir.Varsayılan olarak CDN, kök sunucuya iletilen isteklere
Ali-Cdn-Real-Ipistek başlığını ekler. Bu başlık, CDN noktasına (POP) bağlanan istemcinin gerçek IP adresini iletir.WAF ile entegrasyon yaparken istemci IP'si algılama için özel başlık olarak
Ali-Cdn-Real-Ipseçin.Bu alandan gerçek istemci IP'sini almak için arka uç Nginx sunucusunda
$http_Ali_Cdn_Real_Ipgünlük değişkenini yapılandırın.
-
Bir ALB dinleyicisinin yönlendirme kuralında Insert Header eylemini kullanarak isteğe bir HTTP başlığı (anahtar-değer çifti) ekleyin. Mimari Client > GA > ALB > ECS şeklindedir.
ALB dinleyici yönlendirme kuralında Action değerini Insert Header olarak ayarlayın. Bu örnekte anahtar
client-real-ipve değerSystem-defined-Client IP Addressolarak ayarlanır.Dinleyici için Retrieve Client IP seçeneğini etkinleştirin ve güvenilir IP adresi listesine GA uç noktasının genel çıkış IP adreslerini ekleyin.
Bu alandan gerçek istemci IP'sini almak için arka uç Nginx sunucusunda
$http_client_real_ipgünlük değişkenini yapılandırın.
ACK ortamında istemci IP'sini alma
Daha fazla bilgi için bkz. AlbConfig kullanarak ALB örneklerini yapılandırma.
Nginx veya Apache'nin gerçek istemci IP'sini doğrudan almasını sağlama (bağlantı katmanı adresinin değiştirilmesi)
Nginx
Varsayılan olarak Nginx günlüklerindeki $remote_addr ALB yönlendirme IP'sini (yerel IP) kaydeder. Mevcut günlük tutma ve erişim kontrolü kurallarının değiştirilmeden çalışması için bunu gerçek istemci IP'si ile değiştirmek üzere ngx_http_realip_module modülünü kullanın:
Modülün yüklü olduğunu doğrulamak için
nginx -V | grep http_realip_modulekomutunu çalıştırın.-
Yapılandırma dosyasında (varsayılan:
/etc/nginx/nginx.conf)httpbloğuna aşağıdakileri ekleyin:set_real_ip_from <vSwitch CIDR block of the instance>; real_ip_header X-Forwarded-For; real_ip_recursive on;Yükseltilmemiş bir ALB örneği kullanıyorsanız
set_real_ip_fromdeğerini100.64.0.0/10olarak ayarlayın. Sözdizimini doğrulamak için
sudo nginx -tkomutunu çalıştırın ardından yapılandırmayı yeniden yüklemek içinsudo nginx -s reloadkomutunu çalıştırın.
Yapılandırma etkili olduktan sonra erişim günlüğünü (varsayılan:/var/log/nginx/access.log) denetleyerek$remote_addrdeğerinin artık gerçek istemci IP'sini gösterdiğini doğrulayın.
Trafik WAF veya CDN gibi birden çok ara sunucudan geçiyorsa her ara sunucu katmanının kaynak IP aralıklarını set_real_ip_from değerine ekleyin.
Durum denetimi istekleriX-Forwarded-Forbaşlığını taşımaz bu nedenle bu istekler için$remote_addrdeğeri hâlâ ALB örneğinin vSwitch CIDR bloğunu (veya yükseltilmemiş örnekler için100.64.0.0/10) gösterir. Bu beklenen bir davranıştır.
Apache
Varsayılan olarak Apache günlüklerindeki %h ALB yönlendirme IP'sini (yerel IP) kaydeder. Mevcut günlük tutma ve Require ip erişim kontrolü kurallarının değiştirilmeden çalışması için bunu gerçek istemci IP'si ile değiştirmek üzere Apache 2.4'teki yerleşik mod_remoteip modülünü kullanın:
Modülün yüklü olduğunu doğrulamak için
httpd -M | grep remoteip_modulekomutunu çalıştırın.-
Yapılandırma dosyasında (varsayılan:
/etc/httpd/conf/httpd.conf) aşağıdakileri ekleyin:RemoteIPHeader X-Forwarded-For RemoteIPTrustedProxy <vSwitch CIDR block of the instance>Yükseltilmemiş bir ALB örneği kullanıyorsanız
RemoteIPTrustedProxydeğerini100.64.0.0/10olarak ayarlayın. Apache'yi yeniden başlatmak için
sudo systemctl restart httpdkomutunu çalıştırın.
Yapılandırma etkili olduktan sonra erişim günlüğünü (varsayılan:/var/log/httpd/access_log) denetleyerek%hdeğerinin artık gerçek istemci IP'sini gösterdiğini doğrulayın.
Trafik WAF veya CDN gibi birden çok ara sunucudan geçiyorsa her ara sunucu katmanının kaynak IP aralıklarını RemoteIPTrustedProxy değerine ekleyin.
Durum denetimi istekleriX-Forwarded-Forbaşlığını taşımaz bu nedenle bu istekler için%hdeğeri hâlâ ALB örneğinin vSwitch CIDR bloğunu (veya yükseltilmemiş örnekler için100.64.0.0/10) gösterir. Bu beklenen bir davranıştır.