Nginx RealIP modülünde güven sorunu: PROXY protocol riski

Nginx'te ters proxy kullanırken istemcinin gerçek IP adresini görmek için RealIP modülünü devreye sokarsın. Ama bu modül aynı zamanda hiç bağlanmayan bir adresi de geçerli gösterebilir, eğer güven ayarlarını yanlış yaparsanız.

Modülün işi basit: başka bir sistem tarafından gönderilen IP adresini alıp istemci adresinin yerine koyuyor. Ama burada kritik soru şu: hangi sistemlere güveniyorsun? Auditing Nginx client-IP trust when PROXY protocol meets RealIP yazısında bu ayırım çok iyi anlatılıyor.

set_real_ip_from direktifi, IP adresini değiştirmesi için izin verilen kaynakları tanımlar. Eğer burada çok geniş bir aralık yazarsan (örneğin tüm ağı), ortadaki bir saldırgan istediği IP'yi sahte olarak gönderebilir. real_ip_header ise nereden alacağını seçer: X-Real-IP, X-Forwarded-For veya PROXY protocol.

PROXY protocol biraz farklı çalışır. Sadece dinleme soketinde proxy_protocol parametresiyle etkinleştirilirse kullanılabilir. HTTP başlıkları gibi değil, bağlantı protokolünün kendisine yazılıyor. Bu da başlık manipülasyonundan daha güvenli, ama yine de set_real_ip_from ayarlarını doğru yapman gerekir.

real_ip_recursive ayarı da önemli. Eğer kapalıysa, güvenilen bir adresten gelen istek direkt olarak kabul edilir. Açıksa, başlık zincirinin tamamı kontrol edilir. Yanlış yapılandırma, saldırganın başlıklara çoklu IP ekleyip birini geçmesine izin verebilir.

Nginx'in RealIP modülü varsayılan olarak derlenmez; derlerken etkinleştirmen gerekir. Eğer reverse proxy arkasında çalışıyorsan ve IP adresleri yanlış görünüyorsa, bu modülü kontrol et, ama güven zincirini tam olarak anladığından emin ol.

konu hakkında tepkinizi verebilirsiniz