MeGunes

Başarılı
Katılım
26 Aralık 2023
Mesajlar
15
Beğeniler
10
Merhaba, bu rehberde size uzun yıllar siber güvenlik sektöründe kazandığım deneyimlerden yola çıkarak Cloudflare'dan maksimum koruma ve performans alabilmeniz için yapılması ve yapılmaması gerekenleri anlatıp detaylarından bahsedeceğim. Saldırganların Cloudflare'ı nasıl bypassladığından, bypassları önlemek için neler yapılabileceğinden bahsedeceğim.
Öncelikle belirtmeliyim ki bu rehber yalnızca eğitim ve bilgi amaçlıdır. İşlemleri yapıp yapmamak sizin elinizdedir. Herhangi bir sorumluluk kabul etmiyorum.

Bazı bilinen yanlışları en baştan belirtmem gerek. Cloudflare default olarak proaktif bir sistem değildir. Kurulumdan sonra otomatik kapsamlı koruma sunmaz. Kurdum artık koruyor mantığı ücretsiz atak türlerinde bile yeterli değildir.

Web sitelerinin %90'ında DDoS ataklarını Cloudflare ile sorunsuz ve ücretsiz engelleyebilirsiniz. Sadece bazı durumlarda 20 dolarlık paket gerekebiliyor. Web koruması adı altında işe yaramaz şeyleri anormal rakamlara satan insanlara itibar etmeyiniz. Bir WAF kurmak devasa malilyetlere ve geliştirme sürecine tabiidir. GitHub'dan alınan hazır scriptleri bir veya birkaç sunucuya kurarak koruma sağlayamazsınız. Artık çok cüzi rakamlara saatlerce sürecek DDoS saldırıları yapılabiliyor. Ve bu saldırılar distributed olduğundan dolayı saniyede on-yüz milyonlarca isteğe çıkabiliyor. Saniyede birkaç yüz bin isteği hatta milyon isteği kaldırmanız yeterli olduğu anlamına gelmez.

Web atakları Layer 4 seviyesinde engellenemez. Hosting'inizin veya sunucunuzun koruma servisine sahip olması web ataklarınan korunduğunuz anlamına gelmez. Web sitenizi yurt dışına kapatmak bir çözüm değildir. SEO'nuzu mahveder, kullanıcı deneyimini kötüleştirir, gelebilecek global temiz trafiği de yok etmiş olursunuz. Ayrıca Türkiye içi saldırı yapmak çok zor değildir. Eğer gerçekten bilgili veya paraya sahip birine denk gelirseniz hiçbir işinize yaramayacaktır.

Kullanıcılarınıza CAPTCHA göstermek zorunda değilsiniz. Gelişen teknoloji dünyasında Turnstile gibi threat score ve ML analizleriyle kullanıcı uğraştırılmadan koruma sağlayabilirsiniz.

Kurulum​

Kurulum ve basit aşamalardan çok koruma ve performans detaylarına yönelik bir rehber olacağı için bu kısımları kısa tutacağım. İnternette basit işlemler ile ilgili tonla rehber bulabilirsiniz.

Öncelikle Cloudflare login sayfasından bir hesap oluşturuyoruz veya giriş yapıyoruz. Bu hesap bütün domainlerinizi eklemek için kullanacağınız hesap olacak.
Domain'imizi ekliyoruz.
Eski kayıtları otomatik geçirmek isteyip istemediğimizi soracak. Bunu reddediyoruz ve oradaki bütün DNS kayıtlarını siliyoruz. Bu zaman zaman sorun yaratabiliyor.
Nameserver adreslerini Cloudflare'ın vereceği adreslere domain yöneticimiz üzerinden ekliyoruz (sadece Cloudflare adresleri olmalı)
NS adresleri güncellendiğinde ana sayfanızda bir tik görünecek ve Cloudflare size siteyi başarıyla aktif ettiğini belirtecek. Mail de geliyor onu da bekleyebilirsiniz.
DNS sekmesinden web sunucumuzun IP adresini A kaydı olarak "Proxied" seçeneğinde (turuncu bulut) aktif ediyoruz. Proxied yapılmaz ise yapacağımız hiçbir işlem geçerli olmaz ayrıca arka IP adresinizi sızdırmış olursunuz.
Bu işlemlerden sonra web sitenize Cloudflare yüzünden erişilebilecek. Artık hazırsınız.

Kurulum sonrası too many redirects hatası​

Bu sorun neredeyse Cloudflare kullanan sitelerin yarısında çıkıyor ve çözümü aşırı basit. Sorun Cloudflare'ın sitenize 80 portundan erişmeye çalıştığından fakat web sunucunuzda 80 -> 443 yönlendirmesi bulunduğundan kaynaklanıyor.
Bunu en basit şekilde SSL ayarını Full seçeneğine çekerek çözebilirsiniz ancak bu önerdiğim bir işlem değil. Web siteniz çift şifrelemeden geçecek ve performansınızı bozmaktan başka bir işe yaramayacaktır ancak çok mühim değilse tercih edilebilir.
Çözüm için kullandığımız webhost ve web yazılımının HTTPS 301 yönlendirmesini kapatmanız yeterli.
Plesk:
Domains > ornek.com > Hosting Settings.
Permanent SEO-safe 301 redirect from HTTP to HTTPS ayarını kapatın ve değişiklikleri uygulayın.
cPanel:
Domains > Domaininizin yanındaki Force HTTPS redirect seçeneğini kapatın.

1749469061005.webp


Son olarak bu kısmı da bu şekilde bırakarak sorunu çözebilirsiniz.

İlk basit ayarlamalar.​

Bunlar çok basit genel güvenlik ve performans ayarlarıdır. Her sitede uygulanabilir ve hiçbir sorun yaratmaz.
Security > Settings sekmesine gidiyoruz.
Bot traffic bölümünden bot fight Mode'u aktif ediyoruz. Merak etmeyin bu dostçul botları engellemeyecek.
Domains > ornek.com > Hosting Settings.
Permanent SEO-safe 301 redirect from HTTP to HTTPS ayarını kapatın ve değişiklikleri uygulayın.
cPanel:
Domains > Domaininizin yanındaki Force HTTPS redirect seçeneğini kapatın.

1749469061005.webp


Son olarak bu kısmı da bu şekilde bırakarak sorunu çözebilirsiniz.

Bunlar çok basit genel güvenlik ve performans ayarlarıdır ve tek başına yetersizlerdir, proaktif bir koruma sunmazlar. Her sitede uygulanabilir ve hiçbir sorun yaratmaz.

DDoS overrides ve Security Settings​

Security > Settings sekmesine gidiyoruz.
Bot traffic bölümünden bot fight Mode'u aktif ediyoruz. Merak etmeyin bu dostçul botları engellemeyecek.
Geri gelip DDoS attacks > GO to overrides sekmesine gidiyoruz.
Sağ alttan create override diyerek default kuralların üstüne bir kural ekliyoruz

1749469447960.webp


Ayarları bu şekilde yapıp kaydediyoruz.
Security > Settings > All Settings menüsüne gidiyoruz.

1749469662490.webp


Ayarları bu şekilde yapıp kaydediyoruz.
Speed > Optimization sekmesine gidiyoruz.
Burada eskiden sorun çıkaran birkaç ayar vardı ancak Cloudflare tarafından kaldırıldı. İçiniz rahat şekilde hepsini açabilirsiniz.
Caching >Configuration sekmesine gidiyoruz.

1749469801273.webp


Bu iki ayarı aktif ediyoruz. Alttaki ayar web sunucunuz çökse bile kullanıcılara statik görüntü ve yazıların Cache'den verilmesini sağlar.

Kural yapıları​

Asıl önemli kısım burası. Öncelikle ne tür bir korumaya ihtiyacınız olduğunuza karar vermeniz gerek. Her siteye her kural aynı şekilde eklenmez.
Kendinize şu soruları sorun:

Kullanıcılarım web siteme girerken her 24 saatte 1 kere kontrol sayfası görmekten rahatsız olacak mı?
Sürekli kontrol sayfası açmam durumunda API isteklerimi Whitelist'e alarak sistemin sorunsuz çalışma devamlılığını sağlayabilecek veriye sahip miyim (IP, Subnet, User agent)?
SEO önemli mi yoksa sadece koruma mı amaçlanıyor?
Ne kadar saldırı alıyorum, yalnızca yurt dışı ataklarını engelleyerek (tamamen kapatma değil!) Türkiye içi kullanıcıların ruhu bile duymadan koruma sağlanabilir mi?
Bu tarz soruları işlemleri yaparken kendinize sorun. Hangi kuralın ne işe yarayacağını ve ne durumda kullanmanız gerektiğini ayrı ayrı anlatacağım. Bunlardan yola çıkarak kendiniz için güzel bir kural seti oluşturabilirsiniz.

Kurallar​

Cloudflare, gelen HTTP isteklerini değerlendirerek kötü niyetli trafiği durdurmak için Custom Rules (Özel Kurallar) oluşturmanıza izin verir. Bu kurallar genellikle şu amaçlarla kullanılır:

Bot filtreleme
DDoS'a karşı hassas eşik belirleme
Belirli Endpoint'leri veya yolları koruma
Belirli ülkeleri, ASN'leri veya IP'leri engelleme
Rate limit benzeri uygulamalar

Koşul (Expression)​

Bu kısım, gelen isteğin hangi özelliklerine bakılacağını belirtir. Örneğin bu kural /admin yoluna sadece 1.1.1.1 IP adresinin erişlmesine izin verir ve geri kalanını bloklar:

(http.request.uri.path contains "/admin") and (ip.src ne 192.168.1.1)
Action: Block

Eylem (Action)​

Koşul sağlandığında ne yapılacağını belirler:
Block: İsteği engelle
Managed Challenge: Tehdit skoruna göre tıklamalı veya otomatik check sayfası göster
JS Challenge: Yalnızca JavaScript kontrollerini checkle
Log: Sadece logla
Skip: Belirli özellikleri atla
Interactive Challange: Tıklamalı check yap
Kurallar arası OR ifadesi > veya anlamına gelir ayarlanan kurallardan herhangi biri olması durumunda Action'u uygular.
Kurallar arası AND ifadesi > ve anlamına gelir ayarlanan koşullardan hepsi olması durumunda Action'u uygular
Priority ve Kapsam (Scope)
Priority: Kuralın çalıştırılma sırasını belirler (öncelik numarasıyla).
Zone Scope: Hangi domain(ler) için geçerli olacağını seçebilirsin.
Enabled/Disabled: Kural aktif mi pasif mi?

DDoS koruması için kurallar​

Genel yapıyı anladığımıza göre koruma için önerdiğim kurallara geçebiliriz. Burada yukarıda belirttiğim soruları kendinize sorarak gerekli kuralları ekleyebilirsiniz. Her kuralın ne işe yarayacağını, hangi durumlarda açıp/açmamanız gerektiğine de değineceğim.

Known bots / Whitelist​

Bu koşul web sitenize bilinen ve zararsız (Google, Yandex, Bing vb.) Botların ve eklediğiniz IPlerin erişmesi durumunda ne yapılacağını belirtir.
%95 izin allow olarak birinci sıraya eklenmelidir. Böylece SEO'nuz yapılandırmadan etkilenmez.
Ancak bu kuralda eklemem gereken önemli bir detay var. Cloudflare Free sürümünde bu kural kullanılarak size atak yapılabilir. Saldırgan bilgili ise Cloudflare'ı kandırıp kendini Google bot olarak tanıtarak sitenize sınırsız atak çıkabilir. Bunu çözmenin tek yolu böyle bir saldırı aldığınızda kuralı kapatmak veya Cloudflare Pro ($20) plan almaktır. Pro planda bu atak tespit edilip Cloudflare tarafından engelleniyor.
Expression:
(cf.client.bot)
Action: Skip > Bütün seçenekler

1749472817283.webp


Özel Whitelist için:
(cf.client.bot) or (ip.src eq 1.1.1.1) or (ip.src eq 2.2.2.2)

Genel Bloklar​

Bu kurallar gerçek bir kullanıcı tarafından asla gelmeyecek request header vb türlerini engeller. Zaman zaman saldırganlar tarafından kullanılan/unutulan/ kafa karıştıran başlıklardır. API'niz veya bir sisteminiz bu kurallarla eşleşen bir request yaparsa bu da engellenecektir. Test yapmayı unutmayın.
Expression:
((http.user_agent eq "") or (http.request.version eq "") or (ip.geoip.country eq "T1") or (ip.geoip.country eq "XX") or (ip.geoip.continent eq "T1")
Action: Block
İlk kural > User agent Header'ı boş requestleri engeller.
İkinci kural > HTTP versiyon Header'ı boş requestleri engeller.
Üçüncü kural > Tor'dan gelen istekleri engeller.
Dördüncü kural > Ülkesi tespit edilemeyen istekleri engeller.
Beşinci kural > Tor isteklerini daha detaylı engeller.

1749473303260.webp


Bütün istekleri kontrol etme​

Bu kural ile birlikte sitenize/subdomain'inize gelen bütün istekleri (birinci kuralla birleştirildiğinde SEO etkilemez) kontrol ettirebilirsiniz böylece atak trafiği hiçbir zaman içeri sızamaz. Kullanıcılara birkaç saniyelik oto veya tıklamalı check sayfası gösterilir.
Bütün Domain'lerde aktif etmek için:
(http.host contains "ornek.com")
Sadece ana domain veya bir subdomainde aktif etmek için:
(http.host eq "ornek.domain.com")
Action: Managed Challange

1749473774521.webp


Türkiye dışı kontrol​

Bu kuralı yalnızda TR dışına check attırmak için kullanabilirsiniz (birinci kuralla birleştiğinde SEO etkilemez).
Expression:
(ip.geoip.country ne "TR")
Action: Managed Challange

1749474011601.webp


Web sitem kompleks, özel kurallara ihtiyacım var!​


Verdiğim kurallardan daha çok yapılandırmaya ihtiyacınız varsa anlattığım Action'ları kullanarak koşullarla kendinize özel koruma yazabilirsiniz.
https://developers.cloudflare.com/ruleset-engine/rules-language/fields/reference/ adresinden kullanabileceğiniz onlarca koşul bulabilirsiniz.
Eğer bir yerde daha fazla bilgiye ihtiyacınız olursa veya kural oluşturma için desteğe ihtiyacınız olursa konu altından dilediğiniz gibi sorabilirsiniz.

Cloudflare dışı 80 ve 443 portlarını kapatma (kritik)​

Arka IP adresiniz geçmiş kayıtlardan, exploitlerden veya hosting'inize yapılacak host IP header manipülasyonlu bir nmap scan ile bulunabilir. Bu yüzden 80 ve 443 portlarına yalnızca Cloudflare erişebilmeli.
İptables destekli Linux sunucular için bash scripti:

CF_IPS=$(curl -s https://www.cloudflare.com/ips-v4; curl -s https://www.cloudflare.com/ips-v6)

for ip in $CF_IPS; do
iptables -I INPUT -p tcp -s $ip --dport 80 -j ACCEPT
iptables -I INPUT -p tcp -s $ip --dport 443 -j ACCEPT
iptables -I INPUT -p udp -s $ip --dport 443 -j ACCEPT
done

iptables -A INPUT -p tcp --dport 80 -j DROP
iptables -A INPUT -p tcp --dport 443 -j DROP
iptables -A INPUT -p udp --dport 443 -j DROP


Saygılar sevgiler! Güvende kalın!
 

Dosya Ekleri

  • 1749469855116.webp
    1749469855116.webp
    85,9 KB · Görüntüleme: 55
  • 1749471310929.webp
    1749471310929.webp
    85,9 KB · Görüntüleme: 45
  • 1749471488518.webp
    1749471488518.webp
    85,9 KB · Görüntüleme: 71
Son düzenleme: