Cloudflare'i çoğu kişi önce hız için kurar, ama aynı ağ sitenizin önüne bir güvenlik katmanı da koyar. Kaynak sunucunuza ulaşmadan önce her istek Cloudflare'in kurallarından geçer: belirli ülkelerden gelen trafik engellenebilir, wp-login.php sayfasına deneme yanılma saldırısı yapan IP'ler yavaşlatılabilir, kötü botlar challenge (doğrulama) sayfasına yönlendirilebilir. Doğru kurulmamış kurallar ise Googlebot'u engelleyip arama görünürlüğünüzü düşürebilir ya da gerçek müşterilerinizi kapıda bırakabilir.

Bu rehberde Cloudflare WAF (Web Application Firewall, web uygulama güvenlik duvarı) custom rules, managed rules, rate limiting, Bot Fight Mode ve Super Bot Fight Mode, Under Attack mode, IP Access rules ve Security Events konularını güncel Cloudflare belgelerine göre anlatıyoruz. WordPress siteleri için kullanıma hazır kural ifadeleri de bulacaksınız. Genel DDoS kavramları için DDoS koruma rehberi yazımıza bakabilirsiniz.

WAF custom rules nedir?

WAF custom rules nedir? Cloudflare panelinde alan adınızı seçin ve Security rules sayfasını açın., Create rule > Custom rules, Rule name, When incoming requests match

Custom rules, alan adınıza gelen trafiği bir ifadeye (expression) göre süzmenizi sağlar. İfade isteğin özelliklerine bakar: IP adresi, ülke, URL yolu, User-Agent, çerezler gibi. İfade eşleştiğinde seçtiğiniz eylem uygulanır. Kurallar yalnızca proxy edilen (Proxied) kayıtlardan geçen trafiğe uygulanır; turuncu bulut ve DNS only farkı bu yüzden önemlidir.

PlanEn fazla custom ruleRegex desteği
Free5Hayır
Pro20Hayır
Business100Evet
Enterprise1.000Evet

Kullanılabilecek eylemler

EylemNe yapar?
BlockEşleşen isteği reddeder. Pro ve üstü planlarda özel yanıt (HTML, metin, JSON, XML ve 400-499 arası durum kodu, varsayılan 403) tanımlanabilir.
Managed ChallengeCloudflare isteğin özelliklerine göre etkileşimsiz veya etkileşimli bir doğrulama seçer. Gerçek ziyaretçiler için en az rahatsız eden seçenektir.
Non-Interactive Challenge (js_challenge)İstemcinin etkileşimsiz bir doğrulamayı geçmesini ister, geçemezse istek engellenir. Eski adı JS Challenge'dır.
Interactive Challengeİstemcinin etkileşimli bir doğrulamayı geçmesini ister.
SkipBelirli kuralları veya güvenlik özelliklerini atlar; güvendiğiniz trafik için istisna oluşturur.
LogEşleşen istekleri yalnızca kaydeder. Belgeye göre yalnızca Enterprise planlarda vardır; Free, Pro ve Business planlarda Log dışındaki eylemler kullanılabilir.

Panelden custom rule oluşturma

  • Cloudflare panelinde alan adınızı seçin ve Security rules sayfasını açın.
  • Create rule > Custom rules seçin.
  • Rule name alanına açıklayıcı bir ad girin.
  • When incoming requests match bölümünde Field, Operator ve Value seçin veya ifadeyi doğrudan yazın.
  • Then take action altında Choose action menüsünden eylemi seçin.
  • Deploy ile yayına alın veya Save as Draft ile taslak olarak kaydedin.

Skip eylemini seçtiğinizde panelde şu seçenekler çıkar: All remaining custom rules, All rate limiting rules, All Super Bot Fight Mode rules, All managed rules. Log matching requests ise atlanan isteklerin kaydedilip kaydedilmeyeceğini belirler.

WordPress için örnek kurallar

wp-admin'i yalnızca bilinen IP'lere açmak

Cloudflare'in kendi örnek kuralı WordPress yönetim alanını doğrudan hedef alır. Sabit IP adresiniz varsa en güçlü korumadır:

text
(not ip.src in {203.0.113.10 198.51.100.0/24} and http.request.uri.path wildcard "/wp-admin/*")

Eylem: Block. Örnekteki IP'leri kendi ofis veya ev IP adreslerinizle değiştirin. Not: WordPress'te bazı eklentiler ve tema ön yüzü /wp-admin/admin-ajax.php dosyasına istek atar; bu yolu engellerseniz ziyaretçi tarafında özellikler bozulabilir. Gerekirse ifadeye and http.request.uri.path ne "/wp-admin/admin-ajax.php" ekleyin.

wp-login.php ve xmlrpc.php için challenge

Sabit IP'niz yoksa giriş sayfasını Managed Challenge ile korumak deneme yanılma saldırılarını büyük ölçüde zorlaştırır:

text
(http.request.uri.path eq "/wp-login.php") or (http.request.uri.path eq "/xmlrpc.php")

Eylem: Managed Challenge. XML-RPC kullanan bir uygulamanız veya eklentiniz yoksa /xmlrpc.php için ayrı bir kuralla doğrudan Block da seçebilirsiniz. Kullanıp kullanmadığınızdan emin değilseniz önce challenge ile başlayıp Security Events kayıtlarına bakın.

Ülkeye göre engelleme

Ülke kodu ip.src.country alanıyla kontrol edilir. Değer ISO 3166-1 Alpha 2 biçiminde iki harfli koddur (örneğin "TR", "GB"). Eski ip.geoip.country alanı çalışmaya devam etse de kullanımdan kaldırılmıştır; Cloudflare ip.src.country kullanılmasını öneriyor.

text
# Belirli ülkeleri engelle (Block)
(ip.src.country in {"KP" "IR"})

# Yalnızca Türkiye dışını challenge et, doğrulanmış botları hariç tut (Managed Challenge)
(not ip.src.country in {"TR"} and not cf.client.bot)

İkinci ifade, Cloudflare'in "Allow traffic from search engine bots" örneğindeki yapıyı uyarlıyor. Ülke engeli koyarken not cf.client.bot eklemeyi unutmayın; aksi halde yurt dışından gelen arama motoru tarayıcıları da challenge sayfasına takılır.

Doğrulanmış botlar: Googlebot'u engellemeyin

Cloudflare, kim olduğunu açıkça bildiren ve kötüye kullanım yapmayan botları verified bots (doğrulanmış botlar) olarak sınıflandırır. Belgede arama motoru tarayıcıları kategorisinde Googlebot, Bingbot, Yandexbot ve Baidubot sayılıyor. Kurallarda bu botları cf.client.bot alanıyla ayırt edebilirsiniz; bu alan isteğin bilinen iyi bir bot veya tarayıcıdan gelip gelmediğini gösteren bir Boolean değerdir ve cf.bot_management.verified_bot ile aynı bilgiyi verir.

User-Agent başlığında "Googlebot" yazması, isteğin gerçekten Google'dan geldiği anlamına gelmez. Sahte botları ayırt etme yöntemini Googlebot doğrulama ve sahte botlar yazısında, genel bot trafiği analizini bot trafiği tespit etme yazısında anlattık. Kurallarınızı User-Agent metnine göre değil, cf.client.bot alanına göre yazın.

Managed rules: plan durumu

Managed rules: plan durumu: Free Managed Ruleset, Cloudflare Managed Ruleset, Cloudflare OWASP Core Ruleset

Managed rules, Cloudflare'in hazırlayıp güncellediği kural setleridir. Belgedeki tabloya göre:

Kural setiFreeProBusinessEnterprise
Free Managed RulesetVarVarVarVar
Cloudflare Managed RulesetYokVarVarVar
Cloudflare OWASP Core RulesetYokVarVarVar

Free Managed Ruleset, yaygın olarak istismar edilen ve etkisi yüksek açıklara karşı koruma sağlar ve çoğu uygulamada güvenle açılabilecek kurallardan oluşur. Cloudflare Managed Ruleset daha geniş kapsamlıdır; onu açtıysanız Free Managed Ruleset'e ayrıca gerek kalmaz. Exposed Credentials Check kural seti ise kullanımdan kaldırılmış olarak işaretlenmiştir.

Rate limiting rules ile wp-login.php'yi korumak

Rate limiting, belirli bir sürede belirli sayının üzerinde istek yapan istemcilere eylem uygular. Free planda imkânlar sınırlıdır ama giriş sayfası için yeterlidir:

ÖzellikFreeProBusiness
Kural sayısı125
İfadede kullanılabilen alanlarPath, Verified Bot+ Host, URI, Full URI, Query+ Method, Source IP, User Agent
Sayım ölçütüIPIPIP, NAT destekli IP
Sayım süresi10 sn1 dakikaya kadar10 dakikaya kadar
Engelleme süresi10 sn1 saate kadar1 güne kadar

Oluşturmak için Security rules sayfasında Create rule > Rate limiting rules seçin. İfade olarak Free planda kullanılabilen Path alanıyla şunu yazabilirsiniz:

text
(http.request.uri.path eq "/wp-login.php")
  • With the same characteristics: IP.
  • When rate exceeds: örneğin 10 saniyede 5 istek (sitenizin gerçek kullanımına göre ayarlayın).
  • Then take action: Block. Varsayılan yanıt kodu 429'dur.
  • Duration: Free planda 10 saniye.

Bot Fight Mode ve Super Bot Fight Mode

Bot Fight Mode Free planda kullanılabilen ücretsiz bir üründür. Bilinen bot kalıplarına uyan trafiğe hesaplama açısından pahalı challenge'lar uygular. Panelde Security > Settings sayfasında Bot traffic filtresini seçip Bot fight mode anahtarını açarak etkinleştirilir.

Super Bot Fight Mode Pro, Business ve Enterprise planlarda bulunur. Definitely automated traffic (kesin otomatik), Likely automated traffic (muhtemel otomatik) ve Verified bots grupları için ayrı ayrı eylem seçebilir; Static resource protection, JavaScript detections ve Optimize for WordPress seçeneklerini açabilirsiniz. Bot Fight Mode'dan farklı olarak WAF custom rules ile istisna tanımlanabilir. Super Bot Fight Mode'a geçmeden önce Bot Fight Mode'u kapatmanız gerekir.

Under Attack mode ve Security Level

Under Attack mode ve Security Level: Ara sayfanın gösterilip geçilebilmesi için tarayıcıda JavaScript gerekir., Site analizlerini ve üçüncü taraf analiz araçlarını etkiler., API...

I'm Under Attack modu, katman 7 DDoS saldırılarını hafifletmek için ek kontroller ekler: ziyaretçiler bir ara sayfa görür, şüpheli trafik engellenir. Cloudflare bu modu saldırı altındayken başvurulacak son çarelerden biri olarak tanımlar. Varsayılan olarak kapalıdır; alan adınızın genel bakış (Overview) sayfasındaki Quick Actions bölümünden Under Attack Mode anahtarıyla açılır.

  • Ara sayfanın gösterilip geçilebilmesi için tarayıcıda JavaScript gerekir.
  • Site analizlerini ve üçüncü taraf analiz araçlarını etkiler.
  • API trafiğini etkileyebileceği için yalnızca saldırı sırasında açık tutun.

Modu sitenin yalnızca bir bölümüne uygulamak istiyorsanız Cloudflare bir Configuration Rule öneriyor. Örneğin (starts_with(http.request.uri.path, "/wp-admin")) ifadesiyle eşleşen isteklerde I'm Under Attack ayarını ekleyip açabilirsiniz.

Security Level ayarı hâlâ mevcut ama anlamı değişti. Güncel belgeye göre yeni güvenlik panelinde, API'de ve Terraform'da Security Level, Under Attack modunu açıp kapatan ayardır; eski panelde ise "Always protected" olarak sabittir. Threat score artık her zaman 0 olduğundan Cloudflare buna dayalı kural yazmamanızı öneriyor.

IP Access rules

IP Access rules; IP adresi, IP aralığı, ASN (otonom sistem numarası) veya ülkeye göre trafiğe izin vermenizi, engellemenizi ya da challenge uygulamanızı sağlar. Tüm planlarda hesap başına 50.000 kurala kadar izin verilir. İki önemli not:

  • Belgeye göre IP Access rules ile ülke engelleme yalnızca Enterprise planlarda vardır. Diğer planlarda ülke engelini yukarıdaki gibi WAF custom rules ile yapmalısınız.
  • Cloudflare, IP tabanlı engelleme ve coğrafi engelleme için IP Access rules yerine custom rules kullanmayı öneriyor; Allow eylemi yerine de Skip eylemini öneriyor.

Kendi ofis IP'nizi her durumda geçirmek gibi basit ihtiyaçlar için IP Access rules hâlâ pratik bir araçtır. Ancak kaynak sunucunuzun gerçek IP adresini hiçbir yerde açığa çıkarmayın ve sunucunuzun Cloudflare IP aralıklarından gelen trafiği tanıdığından emin olun; ayrıntılar gerçek ziyaretçi IP adresi yazısında. Sunucu tarafı güvenlik duvarı için UFW rehberine bakabilirsiniz.

Security Events ile yanlış engelleri bulmak

Bir müşteri "siteye giremiyorum" dediğinde ya da Search Console'da tarama hataları arttığında ilk bakacağınız yer Security Events'tir. Cloudflare panelinde Analytics sayfasında Events sekmesini açın. Burada Cloudflare'in güvenlik ürünlerinin işlem yaptığı veya işaretlediği istekleri görürsünüz.

  • Add filter ile alan, operatör ve değer seçip Apply deyin (örneğin belirli bir IP veya URL yolu).
  • Varsayılan zaman aralığı Last 24 hours'tır; olayın zamanına göre daraltın.
  • Sampled logs altında bir olayı açarak uygulanan eylemi ve bunu hangi güvenlik özelliğinin uyguladığını görün.
  • Gerekirse Create custom security rule ile mevcut filtrelerinizden doğrudan bir kural oluşturun.

Yanlış engel tespit ettiğinizde kuralın ifadesini daraltın (örneğin not cf.client.bot ekleyin), eylemi Block yerine Managed Challenge yapın ya da güvendiğiniz trafik için ilgili kuralların üstüne bir Skip kuralı ekleyin. Kullanıcının gördüğü hata 403 ise 403 Forbidden hatası yazımız sunucu tarafındaki olası sebepleri de açıklar.

Sık Sorulan Sorular

Cloudflare ücretsiz planda WAF var mı?

Evet. Free planda 5 custom rule (regex desteği olmadan), 1 rate limiting rule, Free Managed Ruleset ve Bot Fight Mode kullanılabilir. Cloudflare Managed Ruleset ve OWASP Core Ruleset ise Pro ve üstü planlardadır.

Ülke engeli Googlebot'u etkiler mi?

İfadenize not cf.client.bot eklemezseniz etkileyebilir. Cloudflare'in örnek kuralı da ülke koşulunu not cf.client.bot ile birlikte kullanarak Googlebot ve Bingbot gibi doğrulanmış botları hariç tutar.

Bot Fight Mode için istisna tanımlayabilir miyim?

WAF custom rules içindeki Skip eylemiyle hayır; Bot Fight Mode bunu desteklemez. Önce eşleşen IP Access rules tetiklenmeyi önleyebilir. Ayrıntılı istisnalar için Cloudflare, Super Bot Fight Mode'u öneriyor.

Under Attack modunu sürekli açık tutmalı mıyım?

Hayır. Cloudflare bu modu saldırı sırasında kullanılacak son çarelerden biri olarak tanımlıyor; analizleri ve API trafiğini etkileyebilir. Sürekli koruma için hedefli custom rules ve rate limiting kullanın.

Yeni bir kuralı engellemeden nasıl test ederim?

Log eylemi yalnızca Enterprise planlarda bulunduğu için diğer planlarda kuralı önce Managed Challenge ile yayına alın, Security Events kayıtlarını birkaç gün izleyin, sorun yoksa Block'a çevirin.

Cloudflare ve adı geçen diğer hizmet adları sahiplerine aittir. Bu yazı bağımsız bir teknik rehberdir; Cloudflare ile ortaklık veya bayilik ilişkisi bulunduğu anlamına gelmez.

İlgili içerikler: DDoS koruma rehberi · Googlebot doğrulama · Bot trafiği tespit etme · Cloudflare kurulumu · Cloudflare önbellek ayarları · Cloudflare gerçek ziyaretçi IP