Thread Starter
#0
Nginx Real-IP Nedir ve Neden Önemlidir?
Modern web altyapılarında Nginx genellikle doğrudan internete açık değildir; önünde bir yük dengeleyici, CDN (İçerik Dağıtım Ağı) veya başka bir vekil sunucu bulunur. Bu durum, Nginx'in erişim günlüklerine doğrudan istemcinin gerçek IP adresini değil, vekil sunucunun IP adresini kaydetmesine neden olur. Real-IP özelliği, bu vekil sunucuların arkasındaki Nginx sunucusunun, istekleri yapan orijinal istemcinin IP adresini doğru bir şekilde tanımlamasını ve loglamasını sağlar. Bu, güvenlik analizi, coğrafi hedefleme, kötüye kullanım tespiti ve hatta bazı uygulama içi özellikler için kritik öneme sahiptir. Doğru IP tespiti olmadan, sistemler sanki tüm istekler tek bir kaynaktan geliyormuş gibi görünür ve bu durum yanıltıcı sonuçlara yol açar.
Vekil Sunucuların Gerçek IP'leri Gizlemesi Sorunu
İnternet trafiği, istemciden sunucuya ulaşana kadar genellikle birden fazla noktadan geçer. Özellikle büyük ölçekli veya performans odaklı web servislerinde, yük dengeleyiciler, ters vekil sunucular veya CDN'ler, istemci ile hedef sunucu arasına konumlanır. Bu ara katmanlar, gelen istekleri alır ve ardından kendi IP adresleriyle hedef sunucuya iletir. Bu yapılandırma, sunucuları doğrudan internet saldırılarından korur, yükü dağıtır ve performansı artırır; ancak aynı zamanda orijinal istemcinin IP adresini gizler. Başka bir deyişle, Nginx sunucusu, istek kaynağı olarak vekil sunucunun IP'sini görür, orijinal kullanıcının IP adresini göremez. Bu durum, web uygulamalarının veya sistem yöneticilerinin gerçek kullanıcı kaynaklarını izlemesini zorlaştırır.
X-Forwarded-For Başlığının Anlaşılması
Vekil sunucuların gerçek IP'yi gizlemesi sorununu çözmek için HTTP protokolünde `X-Forwarded-For` (XFF) başlığı geliştirilmiştir. Bir vekil sunucu, bir istemciden gelen isteği hedef sunucuya iletirken, istemcinin orijinal IP adresini bu XFF başlığına ekler. Eğer birden fazla vekil sunucu varsa, her vekil sunucu kendisinden önceki vekilin veya istemcinin IP adresini başlığın sonuna ekleyerek bir IP zinciri oluşturur. Örneğin, `X-Forwarded-For: client_ip, proxy1_ip, proxy2_ip` gibi bir yapı oluşur. Nginx, bu başlığı doğru bir şekilde yapılandırıldığında okuyarak zincirdeki gerçek istemci IP'sini bulabilir. Ayrıca `X-Real-IP` gibi benzer başlıklar da kullanılır, ancak XFF daha yaygın ve standarttır.
Nginx `real_ip_header` Yönergesi
Nginx'in vekil sunucu arkasındaki gerçek istemci IP'sini doğru bir şekilde algılayabilmesi için `real_ip_header` yönergesini kullanırız. Bu yönerge, Nginx'e hangi HTTP başlığının gerçek istemci IP adresini taşıdığını söyler. En yaygın kullanılan başlıklar `X-Forwarded-For` ve `X-Real-IP`'dir. Örneğin, `real_ip_header X-Forwarded-For;` komutu Nginx'e, gelen isteklerdeki `X-Forwarded-For` başlığına bakarak gerçek IP'yi bulmasını emreder. Bu ayar genellikle `http` veya `server` blokları içerisinde yapılandırılır. Doğru başlığın seçilmesi, vekil sunucu altyapınızın özelliklerine göre değişiklik gösterir; bu nedenle vekil sunucunuzun hangi başlığı kullandığını bilmek önemlidir.
Gerçek IP Kaynaklarının Belirtilmesi: `set_real_ip_from`
`real_ip_header` yönergesini tek başına kullanmak yeterli veya güvenli değildir. Kötü niyetli bir kullanıcı kendi `X-Forwarded-For` başlığını manipüle ederek Nginx'i kandırabilir. Bu riski ortadan kaldırmak için Nginx, `set_real_ip_from` yönergesini sunar. Bu yönerge, Nginx'e hangi IP adreslerinden veya IP bloklarından gelen isteklerin güvenilir olduğunu bildirir. Başka bir deyişle, Nginx sadece bu belirtilen IP adreslerinden gelen isteklerdeki `real_ip_header` başlığını dikkate alır. Eğer istek güvenilir bir kaynaktan gelmiyorsa, Nginx bu başlığı yok sayar ve vekil sunucunun IP adresini gerçek IP olarak kaydetmeye devam eder. Bu sayede IP sahteciliği önlenir ve sistemin güvenliği artırılır.
Birden Fazla Vekil Sunucu Durumunda Yapılandırma
Bazı karmaşık altyapılarda, istemci ile Nginx sunucusu arasında birden fazla vekil sunucu bulunabilir; örneğin, bir CDN'in arkasında bir yük dengeleyici olabilir. Bu durumda, `X-Forwarded-For` başlığı `istemci_ip, proxy1_ip, proxy2_ip` şeklinde bir zincir taşır. Nginx'in bu zincirden doğru istemci IP'sini çekebilmesi için `real_ip_recursive` yönergesini kullanmak gerekir. Bu yönerge, Nginx'e `set_real_ip_from` ile tanımlanmış güvenilir IP adreslerini, `X-Forwarded-For` başlığı içerisindeki IP zincirinden çıkartmasını söyler. Nginx, zinciri sondan başa doğru tarar ve `set_real_ip_from` listesindeki tüm güvenilir IP'leri atlar. Sonuç olarak, ilk güvenilir olmayan IP'yi, yani genellikle orijinal istemcinin IP adresini bulur ve bunu gerçek IP olarak ayarlar.
En İyi Uygulamalar ve Güvenlik Hususları
Nginx Real-IP ayarlarını yapılandırırken bazı en iyi uygulamaları takip etmek, hem doğru işleyişi hem de güvenliği garanti eder. Her şeyden önce, `set_real_ip_from` yönergesi ile tüm güvenilir vekil sunucu IP adreslerinizi veya IP bloklarınızı doğru bir şekilde tanımlayın. Bu, IP sahteciliğini önlemede kritik bir adımdır. İkincisi, eğer birden fazla vekil sunucunuz varsa, `real_ip_recursive on;` yönergesini etkinleştirdiğinizden emin olun. Bu, Nginx'in IP zincirini doğru şekilde işlemesini sağlar. Ayrıca, bu yapılandırmaların doğru çalıştığından emin olmak için Nginx erişim günlüklerini düzenli olarak kontrol edin. Hatalı yapılandırma, yanlış IP kaydına, yanlış güvenlik kararlarına veya uygulama davranışlarında sorunlara yol açabilir. Güvenlik açısından, `set_real_ip_from` listesini güncel tutmak ve yalnızca güvendiğiniz kaynakları eklemek hayati önem taşır.