TR7 önünde CDN / proxy varsa WAF gerçek istemci IP'sini nasıl görür?
Kısa cevap
Trusted Proxies profiliyle. Profil, yalnızca Trusted Networks alanındaki ağlardan (CDN'in ya da önündeki proxy'nin yayımladığı IP aralıkları) gelen bağlantılarda, Real IP from alanında seçilen header'daki adresi istemci adresi yapar. Bu çözümleme WAF taramasından önce yapıldığı için (çözülen adresi kullanan bileşenler) WAF'ın kara liste denetimi, Teacher ve Conditional Learning IP tanımları, öğrenme ve analiz filtreleri ile Event Logs'taki Attacker IP, Attacker Location ve Attack Network bilgileri çözülen adresi kullanır. Profil yoksa WAF bütün istekleri CDN'in adreslerinden geliyor sayar ve Event Logs'tan bir saldırganı kara listeye almak bütün CDN trafiğini engeller. Profil Load Balancer → Profiles → Trusted Proxies ekranında ya da vService formundan oluşturulur ve HTTP vService'in Details listesindeki Trusted Proxy alanında seçilir; WEB-CLI'da lb trusted-proxy add ve lb service update komutları kullanılır. Trusted Networks alanına bütün internet girilmez; aksi hâlde istemci header'ı sahteleyerek kendini başka bir adres gibi gösterebilir.
Sorun: WAF Her İsteği CDN Adresinden Geliyor Sayıyor
TR7'nin önünde bir CDN ya da proxy varsa TR7'ye bağlanan istemci CDN'in edge sunucusudur. vService'e profil atanmadığında TR7 gelen X-Forwarded-For ve benzeri header'ları istemci adresi olarak kullanmaz; WAF da bağlantının geldiği CDN adresini görür. Bunun WAF'taki sonuçları:
- Kara liste: Blacklist Protection ve Frontend Blacklist ziyaretçinin değil CDN'in adresine bakar; Event Logs'taki Attacker IP satırının Actions menüsünden bir adresi kara listeye almak, o CDN adresinden gelen bütün ziyaretçileri engeller.
- Öğrenme: Teacher ve Conditional Learning için IP ile tanımlanan kimlikler tanınmaz; Analysis & Learning filtrelerindeki ülke ve kaynak IP ölçütleri CDN adreslerine göre çalışır.
- Kayıt ve rapor: Event Logs'taki Attacker IP, Attacker Location, Attack Network ve WAF Dashboard'daki ülke dağılımı CDN'in adreslerini ve konumlarını gösterir.
Gerçek adres CDN'in eklediği header'da durur; bu header'a yalnızca CDN'den geldiğinde güvenilmelidir, çünkü istemci de aynı header'ı kendisi yazabilir.
Çözüm: 3 Yöntem
Üç yöntem aynı profili oluşturup vService'e atar; sonuç aynıdır.
| Durumunuz | Uygun yöntem |
|---|---|
| Profili önceden oluşturup bir ya da birden fazla vService'e atamak istiyorum | Yöntem 1: Profiles menüsünden |
| Profili vService'i düzenlerken oluşturmak istiyorum | Yöntem 2: vService formundan yeni profil |
| Komut satırından yapılandırmak istiyorum | Yöntem 3: WEB-CLI |
Yöntem 1: Profiles Menüsünden Önerilen
- Nasıl çalışır Profil, güvenilen ağlardan gelen bağlantılarda seçilen header'daki adresi istemci adresi yapar; diğer bağlantılarda header dikkate alınmaz (silinmez, Kurum Servisine olduğu gibi iletilir). Birden fazla kaynak varsa sırayla değerlendirilir ve ilk eşleşen uygulanır.
- Nerede açılırLoad Balancer → Profiles → Trusted Proxies · vService → Details → Trusted Proxy
- Gereksinim CDN'in yayımladığı IP aralıkları; WAF'ı açık HTTP vService
- vService tipi HTTP
Adım adım yapılandırma
Sol alttaki TR7 logosuyla Configuration Menu açılır; Load Balancer → Profiles → Trusted Proxies yolu izlenip Add'e tıklanır (profil ekleme formu).
Trusted Proxy Profile Name alanına benzersiz bir ad yazılır.
Sources altındaki ilk kaynakta Real IP from seçilir: Cloudflare için Custom Header ve Header Name = CF-Connecting-IP; Akamai için Custom Header ve True-Client-IP; birden fazla proxy katmanı olan genel yapılarda X-Forwarded-For (last / most trusted) (varsayılan). Seçeneklerin farkı: Trusted Proxy profilindeki "Real IP from" seçenekleri (X-Forwarded-For (last / most trusted), X-Forwarded-For (first), Custom Header) arasındaki fark nedir?
Trusted Networks alanına CDN'in yayımladığı IPv4 ve IPv6 aralıkları CIDR olarak girilir (en az bir tane); yeni satır (+) ile eklenir. Aralıklar TR7'ye kendiliğinden gelmez, CDN'in yayımladığı listeden alınır. /0 ya da /1 gibi çok geniş bir önek girilirse form uyarı gösterir. Birden fazla CDN ya da proxy için Sources alanına (+) ile yeni kaynak eklenir.
Add butonuna tıklanır.
Load Balancer → Load Balancer vService List ekranında WAF'ı açık HTTP vService seçilip Edit ile düzenleme formu açılır.
Details listesinde Trusted Proxy kutusu işaretlenir ve Trusted Proxy Profile alanında profil seçilir.
Save butonuna tıklanır; ayrı bir dağıtım adımı yoktur. Cluster'da değişiklik varsayılan olarak eş cihaza kendiliğinden aktarılır; Manual Sync Mode açıksa Synchronize ile gönderilir.
Doğrulama
Profil atandıktan sonra oluşan bir kaydın önizlemesinde Request & Location sekmesine bakılır.
Attacker IP ve Attacker Location ziyaretçiyi gösterirEvent Logs listesinde X-Forwarded-For kolonundaki adres, aynı kaydın istemci adresiyle karşılaştırılır.
İstemci adresi CDN aralıklarının dışındavService'in Load Balancer Management ekranında gerçek IP'nin profil üzerinden çözüldüğünü belirten cümle görünür.
The real client IP is resolved from a header through the … profileYöntem 2: vService Formundan Yeni Profil
- Nasıl çalışır Profil vService formundan açılan pencerede oluşturulur ve alana kendiliğinden seçilir.
- Nerede açılır vService → Details → Trusted Proxy → Trusted Proxy Profile açılır listesindeki Add
- Gereksinim CDN'in yayımladığı IP aralıkları; WAF'ı açık HTTP vService
- vService tipi HTTP
Adım adım yapılandırma
Load Balancer → Load Balancer vService List ekranında HTTP vService seçilip Edit ile açılır.
Details listesinde Trusted Proxy kutusu işaretlenir; Trusted Proxy Profile alanının açılır listesindeki Add ile profil penceresi açılır.
Trusted Proxy Profile Name, Real IP from (gerekirse Header Name) ve Trusted Networks Yöntem 1'in 2–4. adımlarındaki gibi girilir.
Penceredeki Add butonuna tıklanır; profil alana kendiliğinden seçilir.
vService formu Save ile kaydedilir. Cluster'da değişiklik eş cihaza Yöntem 1'deki gibi aktarılır.
Doğrulama
Profil atandıktan sonra oluşan bir kaydın Request & Location sekmesine bakılır.
Attacker IP ziyaretçinin adresini gösterirYöntem 3: WEB-CLI
- Nasıl çalışır Profil
lb trusted-proxy addile oluşturulur, kimliğilb trusted-proxy listile alınır velb service updateile vService'e atanır. - Nerede açılırWEB-CLI →
lb trusted-proxy·lb service - Gereksinim WEB-CLI erişimi; CDN'in yayımladığı IP aralıkları
- vService tipi HTTP
Adım adım yapılandırma
Her kaynak ve her ağ kendi sıra numarasıyla yazılır (kaynak tanımları). Örnekteki 198.51.100.0/24 yerine CDN'in yayımladığı aralık yazılır; ikinci aralık --sources.0.trustedNetworks.1.ip ve --sources.0.trustedNetworks.1.cidr ile eklenir:
lb trusted-proxy add name cdn-proxy --sources.0.type customHeader --sources.0.headerName CF-Connecting-IP --sources.0.trustedNetworks.0.ip 198.51.100.0 --sources.0.trustedNetworks.0.cidr 24Komut başarılı olduğunda çıktı vermez.
--trustedProxy alanı profilin kimliğini alır; kimlik listenin id sütunundan okunur:
lb trusted-proxy list<vService> yerine vService'in kimliği, <profil-kimliği> yerine 2. adımdaki kimlik yazılır:
lb service update id <vService> --trustedProxy <profil-kimliği>Cluster'da değişiklik eş cihaza arayüzdeki gibi aktarılır.
Doğrulama
vService kaydı görüntülenir.
Komut: lb service show <vService>
trustedProxy satırında profil kimliğiSık Yapılan Hatalar
Trusted Networks alanına bütün interneti girmek
0.0.0.0/0 gibi bir aralık girilirse her istemci header'a istediği adresi yazarak WAF'ın kara listesinden ve IP'ye bağlı kurallardan kaçabilir ya da başka bir adresi kara listeye düşürebilir. Yalnızca CDN'in ya da önündeki proxy'nin aralıkları girilir (Trusted Proxy yanlış yapılandırılırsa ne tür bir güvenlik riski oluşur (IP Spoofing)?).
- Profil atanmadan Event Logs'tan kara listeye almak. Attacker IP CDN adresi olduğu için bütün CDN trafiği engellenir; önce profil atanır, sonra yeni kayıtlardaki ziyaretçi adresi listeye alınır.
- CDN aralıklarını güncel tutmamak. CDN yeni aralık eklediğinde bu aralıklardan gelen isteklerde header okunmaz ve WAF yeniden CDN adresini görür; liste düzenli kontrol edilir.
- vService'teki X-Forwarded-For seçeneğini gerçek IP çözümü sanmak. vService'teki X-Forwarded-For seçeneği yalnızca Kurum Servisine giden isteğe header ekler; gelen header'dan gerçek IP'yi Trusted Proxies profili çözer.
- Profil olmadan IP ile Teacher tanımlamak. CDN arkasında Teacher IP'si eşleşmez; profil atanana kadar Teacher kimliği header ya da cookie ile tanımlanır (Teacher Header'ının veya cookie'sinin adı ne olmalı (TR7-LEARN); Conditional Learning için hangi ad kullanılır (TR7-ANALYZE)?).
- Kayıtlarda hâlâ CDN adresi görünüyorsa yalnızca profili kontrol etmek. Header adı, Real IP from seçimi ve isteğin geldiği adresin Trusted Networks içinde olup olmadığı birlikte kontrol edilir (Loglarda istemci IP'si yerine proxy / CDN IP'si görünüyor; ne yapmalıyım?).
Dokümantasyonda nasıl yapılır
