İçeriğe atla
Cloudflare Wiki

    gez · aç · Esc kapat

    WAF

    İmza tabanlı managed rule'lar, makine öğrenmesiyle üretilen attack score ve kendi yazdığın custom rule'lar. Ama Cloudflare kendi OWASP kural setini “yanlış pozitife yatkın” diye uyarıyor.

    • DurumGenel kullanımda
    • FiyatPlana dahil; malicious uploads ve Sensitive Data Detection Enterprise eklentisi
    • Ücretsiz katmanvar
    • Doğrulama

    WAF nedir?

    Cloudflare WAF iki rol üzerine kurulu ve bu ayrım ürünün tamamını anlamanın anahtarı:

    Detection: Run incoming requests through one or more traffic detections to find malicious or potentially malicious activity.”

    Mitigation: Blocks, challenges, or throttles requests through different mitigation features such as custom rules, Managed Rules, and rate limiting rules.”

    Ana bileşenler:

    Managed Rules … signature-based rules created by Cloudflare that provide immediate protection against known attacks.” “Traffic detections … that enrich requests with metadata.” “User-defined rules for your specific needs, including custom rules and rate limiting rules.”

    2026’da yedi tespit var: WAF attack score · Leaked credentials · Malicious uploads · AI Security for Apps · Bot score · Threat intelligence (yeni — Cloudforce One, 7 günlük kayan IP penceresi) · Application Profiles (yeni — pozitif güvenlik/şema, kapalı beta).

    Nasıl çalışır?

    Dört managed ruleset

    RulesetTanımID
    Cloudflare Managed Ruleset“Created by the Cloudflare security team… covers known attack techniques and zero-day vulnerabilities… updated frequently”efb7b8c949ac4650a09736fc376e9aee
    Cloudflare OWASP Core Ruleset“Cloudflare’s implementation of the OWASP ModSecurity Core Rule Set. This ruleset uses a scoring model4814384a9e5d4991b9815dcfc25d2f1f
    Cloudflare Exposed Credentials Checkkullanımdan kalktı — “Cloudflare recommends that you use leaked credentials detection instead”c2e184081120413c86c3ab7e14069605
    Cloudflare Free Managed Ruleset“Available on all Cloudflare plans. Provides protection against high-impact and widely exploited vulnerabilities.”ID doğrulanamadı
    Cloudflare Sensitive Data Detectionyanıt fazında çalışıyore22d83c647c64a3eae91b71b499d988e

    Uygunluk:

    FreeProBusinessEnterprise
    Free Managed Ruleset
    Cloudflare Managed Ruleset
    OWASP Core Ruleset
    Sensitive Data Detection

    Ve bir not: “If you have already deployed the Cloudflare Managed Ruleset, you do not need this ruleset [Free] — the Cloudflare Managed Ruleset includes broader coverage.”

    Faz sırası — tam ve resmî

    Bu tablo, “kuralım neden çalışmıyor” sorusunun cevabının çoğunu içeriyor. İstek fazları, çalışma sırasıyla:

    FazÜrün
    http_request_dynamic_redirectSingle Redirects
    http_request_sanitizeURL normalization
    http_request_transformURL Rewrite Rules
    (iç faz)Waiting Room Rules
    http_request_api_gateway_early*API Shield
    http_config_settingsConfiguration Rules
    http_request_originOrigin Rules
    ddos_l7*HTTP DDoS Attack Protection
    http_request_firewall_customCustom rules
    http_ratelimitRate limiting rules
    http_request_api_gateway_lateAPI Shield
    http_request_firewall_managedWAF Managed Rules
    http_request_sbfmSuper Bot Fight Mode
    (iç faz)Cloudflare Access uygulama kontrolü
    http_request_redirectBulk Redirects
    (iç faz)Managed Transforms
    http_request_late_transformRequest Header Transform Rules
    http_request_cache_settingsCache Rules
    http_request_snippetsSnippets
    http_request_cloud_connectorCloud Connector

    * “This phase is for configuration purposes only — the corresponding rules will not be executed at this stage.”

    Ve faz içi sıra: “Within each phase, account-level rulesets run before zone-level rulesets.”

    Attack score

    “The attack score traffic detection classifies each request using a machine learning algorithm, assigning a score from 1 to 99 based on the likelihood that the request is malicious.”

    AlanTanımPlan
    cf.waf.score“A global score from 1–99 that combines the score of each WAF attack vector”Enterprise
    cf.waf.score.sqliSQL injection vektörüEnterprise
    cf.waf.score.xssCross-site scripting vektörüEnterprise
    cf.waf.score.rceKomut enjeksiyonu / uzaktan kod çalıştırmaEnterprise
    cf.waf.score.classattack · likely_attack · likely_clean · cleanBusiness ve üzeri

    Sınıf aralıkları: attack 1–20 · likely_attack 21–50 · likely_clean 51–80 · clean 81–99.

    Kod çözme: “Attack score automatically detects and decodes Base64, JavaScript (Unicode escape sequences), and URL encoded content anywhere in the request: URL, headers, and body.”

    İki özel değer:

    DeğerAnlamı
    100“the request reached the WAF attack score system, but the system decided not to score it” — panelde Unscored, kural ifadesinde kullanılamıyor
    0“In Logpush data… the request did not reach the attack score stage” — panelde hiç görünmüyor

    Leaked credentials

    Veri kaynağı üç parçalı: Have I Been Pwned eşleşen parola veri kümesi (yalnızca parolalar), Cloudflare’in topladığı kullanıcı adları, ve sızmış kimlik bilgisi çiftleri.

    AlanPlan
    cf.waf.credential_check.password_leakedtüm planlar
    cf.waf.credential_check.username_and_password_leakedPro ve üzeri
    cf.waf.credential_check.username_leakedEnterprise
    cf.waf.credential_check.username_password_similarEnterprise
    cf.waf.auth_detectedEnterprise

    “On Free plans, the leaked credentials detection is enabled by default, and no action is required.”

    Varsayılan tarama konumları: Drupal, Joomla, Ghost, Magento, Plone, WordPress, Microsoft Exchange OWA, “plus generic rules for other common web authentication patterns.” Özel konum tanımlama yalnızca Enterprise ve en fazla 10 tane.

    2026 eklemesi (changelog, 20 Ağustos 2026):

    “Leaked credentials detection now scans the Authorization request header for Basic Authentication credentials. Previously, the detection only inspected request bodies, query strings, and headers for well-known web applications… This change was applied automatically.”

    Origin’e bildirim: bir managed transform Exposed-Credential-Check başlığı ekliyor — değer 1 (kullanıcı adı ve parola çifti sızmış), 2 (kullanıcı adı sızmış), 4 (yalnızca parola sızmış).

    Malicious uploads (content scanning)

    Enterprise + ücretli eklenti. Antivirüs motoru Zero Trust’takiyle aynı.

    “The malicious uploads detection uses heuristics to find content objects automatically, without relying on the request’s Content-Type header (since this header can be manipulated).”

    Taranmayan içerik tipleri: text/html, text/x-shellscript, application/json, text/csv, text/xml.

    Boyut: “The content scanner will fully check content objects with a size up to 50 MB. For larger content objects, the scanner will analyze the first 50 MB.”

    Hiç taranmayanlar:

    “Password-protected archives · Archives with more than three recursion levels · Archives with more than 300 files · PGP-encrypted files”

    Ve: “In rare cases, the AV scanner may time out… the cf.waf.content_scan.has_failed field will be set to true.” Ayrıca gecikme uyarısı: “Enabling malicious uploads detection can introduce latency.”

    OWASP Core Ruleset

    “The Cloudflare OWASP Core Ruleset is Cloudflare’s implementation of the OWASP ModSecurity Core Rule Set version 3.3.0.”

    Paranoia seviyeleri: PL1 (varsayılan) → PL4 (en katı). “When you configure the paranoia level… you are enabling all the rules belonging to all paranoia levels up to the level you select.” Ve: “If you use the highest paranoia level (PL4) you will probably need to disable some of its rules.”

    Skor eşikleri: Low – 60 ve üzeri · Medium – 40 ve üzeri (varsayılan) · High – 25 ve üzeri.

    Karşı sezgisel nokta: “Configuring a Low threshold means that more rules will have to match…” — yani “Low” daha gevşek, “High” daha sıkı.

    Nasıl toplanıyor: “Each OWASP rule that matches the current request has an associated score. The request threat score is the sum of the individual scores of all OWASP rules that matched.”

    Sampled loglarda görünen kural her zaman sonuncu: 949110: Inbound Anomaly Score Exceeded (6179ae15870a4bb7b2d480d4843b323c). Katkıda bulunan tek tek kuralların skorlarını görmek için olay detayında Additional logs’u aç.

    Ayarlama stratejisi — iki alternatif, Cloudflare’in kendi ifadesiyle:

    “Start from a strict configuration (PL4, threshold Low–60). Reduce the score threshold and paranoia level until you achieve a good false positives/true positives rate.”

    “Alternatively, start from a more permissive configuration (PL1, threshold High–25) and increase both parameters.”

    Exception ve override

    Exceptions have priority over overrides.

    Exception tipleri, en yüksek önceliklisinden:

    1. “Skip all remaining rules (belonging to WAF managed rulesets)”
    2. “Skip one or more WAF managed rulesets”
    3. “Skip one or more rules of WAF managed rulesets”

    Override tuzağı:

    “Ruleset overrides and tag overrides apply to both existing and future rules in the managed ruleset. If you want to override existing rules only, you must use rule overrides.”

    Varsayılan duruş:

    Some rules in the Cloudflare Managed Ruleset are disabled by default, intending to strike a balance between providing the right protection and reducing the number of false positives.”

    “It is not recommended that you enable all the available rules using overrides… unless you are running a proof of concept.”

    “Cloudflare recommends that you enable the rules whose tags correspond to your technology stack. For example, if you use WordPress, enable the rules tagged with wordpress.”

    Somut bir örnek: “Cloudflare allows requests with empty user agents by default. To block requests with an empty user agent, enable the rule with ID …0a6dbbd3.”

    Limitler

    ÖğeFreeProBusinessEnterprise
    Custom rule sayısı5201001.000
    Desteklenen aksiyonlarLog hariç hepsiLog hariçLog hariçhepsi
    Regex desteği
    Zone başına custom ruleset12510
    Account seviyesi custom ruleset

    İfade limitleri: maksimum 4.096 karakter · ifade başına en fazla 64 regex. Ve: “Existing rules above this limit continue to work but cannot be modified until the expression is simplified.”

    Listeler:

    FreeProBusinessEnterprise
    Custom list sayısı110101.000
    Toplam liste öğesi10.00010.00010.000500.000
    IP listeleri
    Hostname ve ASN listeleri

    Liste adı ^[a-z0-9_]+$, en fazla 50 karakter. IP Access Rules: hesap başına 50.000, tüm planlarda. “Block by country is only available on Enterprise plans.”

    Body inceleme boyutu: Enterprise 128 KB · Free 1 MB · diğer ücretli planlar “lower by default”.

    Analitik saklama:

    FreeProBusinessEnterprise
    Security Events (firewallEventsAdaptive)24 saat24 saat3 gün30 gün
    Security Analytics (httpRequestsAdaptive)7 gün7 gün31 gün90 gün
    Security Events sorgu penceresi24 saat24 saat3 gün31 gün

    Enterprise’da saklama 30 gün ama sorgu penceresi 31 gün — küçük ama gerçek bir asimetri.

    Doğrulanamayanlar: Free Managed Ruleset’in tam 32 karakterlik ID’si (referans sayfası 404) · zone başına maksimum exception sayısı · managed ruleset’lerdeki toplam kural sayısı. Birleşik bir WAF limitler sayfası yok (/waf/reference/limits/ 404).

    Ne zaman kullanılır, ne zaman kullanılmaz

    Kullanılır

    • Proxy’li her HTTP uygulamasında. Free Managed Ruleset zaten açık ve ücretsiz; kapatmak için bir sebep yok.
    • Bilinen zafiyetlere karşı hızlı kapama gerekiyorsa. Cloudflare Managed Ruleset haftalık, acil durumlarda daha sık güncelleniyor — 26 Ağustos 2026’daki Next.js CVE’si acil sürümle kapatıldı.
    • Kimlik doldurma saldırısı alıyorsan. Leaked credentials tespiti ücretsiz planda bile açık.
    • Yüklenen dosyaları taratman gerekiyorsa — ama Enterprise + eklenti.

    Kullanılmaz — daha doğrusu, yetmez

    Proxy’li olmayan trafikte. “Cloudflare only mitigates requests in proxied traffic.” Gri bulut kayıtlarda WAF sıfır.

    Origin’in doğrudan erişilebilirse. “Is the malicious traffic reaching your origin IP addresses directly, therefore bypassing Cloudflare protection?” Origin’de Cloudflare IP’leri dışındaki her şeyi blokla.

    HTTP olmayan protokollerde. WAF yalnızca HTTP istek ve yanıt fazlarında çalışıyor. TCP/UDP için Spectrum — ama o DDoS koruması veriyor, uygulama katmanı denetimi değil.

    Boyut limitini aşan gövdelerde. 128 KB (Enterprise) veya 1 MB (Free) üstü tam analiz edilmiyor.

    Uygulama içinde şifrelenmiş yükte. İstemci tarafında şifrelenmiş alanlar veya JSON içindeki şifreli bloklar imza ve skor motorlarına opak. Bu bir çıkarım — Cloudflare tek cümleyle böyle demiyor; content scanning’in PGP ve parola korumalı arşivleri dışlamasından ve TLS sonlandırma gerekliliğinden çıkıyor.

    Uygulama mantığı hatalarında. Cloudflare’in kendi cümlesi: “This is an application logic bug that unfortunately cannot be covered through Cloudflare WAF signature engine.”

    OWASP Top 10’un dört kategorisinde. Yukarıdaki kutu.

    Daha erken bir faz isteği sonlandırdıysa. ddos_l7 veya http_request_firewall_custom fazında bir Block varsa managed rules hiç çalışmıyor. Kendi yazdığın bir Skip kuralı da managed rules’u tamamen kapatabiliyor — en yaygın kendi kendine açılan yanlış negatif.

    Açmadığın kurallarda. “Not all rules of WAF managed rulesets are enabled by default.”

    Free, Pro veya Business’ta “önce logla” yapmak istiyorsan. Log aksiyonu yalnızca Enterprise.

    Somut örnekler

    Managed ruleset’i deploy etmek ve ID’leri almak

    curl -sS "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/rulesets/phases/http_request_firewall_managed/entrypoint" \
      -H "Authorization: Bearer $CF_API_TOKEN" \
      | jq '{ruleset: .result.id,
              kurallar: [.result.rules[] | {id, action, calistirilan: .action_parameters.id}]}'

    action_parameters.id değeri efb7b8c949ac4650a09736fc376e9aee olan kuralın id’si, exception yazarken ihtiyacın olan $EXECUTE_RULE_ID.

    Attack score’a göre kural

    RULESET=$(curl -sS ".../zones/$ZONE_ID/rulesets/phases/http_request_firewall_custom/entrypoint" \
      -H "Authorization: Bearer $CF_API_TOKEN" | jq -r '.result.id')
    
    # Enterprise
    curl ".../zones/$ZONE_ID/rulesets/$RULESET/rules" --request POST \
      -H "Authorization: Bearer $CF_API_TOKEN" \
      --json '{"description":"Attack score dusuk olanlari blokla",
               "expression":"(cf.waf.score le 20)","action":"block"}'
    
    # Business
    curl ".../zones/$ZONE_ID/rulesets/$RULESET/rules" --request POST \
      -H "Authorization: Bearer $CF_API_TOKEN" \
      --json '{"description":"Attack sinifini blokla",
               "expression":"(cf.waf.score.class eq \"attack\")","action":"block"}'

    Dar kapsamlı exception

    curl ".../zones/$ZONE_ID/rulesets/$ENTRY_POINT_RULESET_ID/rules" --request POST \
      -H "Authorization: Bearer $CF_API_TOKEN" \
      --json '{
        "expression": "(http.host eq \"ornek.com.tr\" and starts_with(http.request.uri.path, \"/admin\"))",
        "description": "Yanlis pozitif: yonetici alaninda su kurali atla",
        "action": "skip",
        "action_parameters": {
          "rules": { "efb7b8c949ac4650a09736fc376e9aee": ["<RULE_ID>"] }
        },
        "position": { "before": "'"$EXECUTE_RULE_ID"'" }
      }'

    position.before olmadan bu kural hiçbir şey atlamıyor.

    Leaked credentials tespiti ve kuralı

    # Tespiti aç
    curl ".../zones/$ZONE_ID/leaked-credential-checks" --request POST \
      -H "Authorization: Bearer $CF_API_TOKEN" --json '{"enabled": true}'
    
    # Pro ve üzeri
    curl ".../zones/$ZONE_ID/rulesets/$RULESET/rules" --request POST \
      -H "Authorization: Bearer $CF_API_TOKEN" \
      --json '{"description":"Sizmis kimlik bilgisi cifti",
               "expression":"(cf.waf.credential_check.username_and_password_leaked)",
               "action":"managed_challenge"}'

    Security Events’i GraphQL ile okumak

    curl -sS https://api.cloudflare.com/client/v4/graphql \
      -H "Authorization: Bearer $CF_API_TOKEN" -H 'Content-Type: application/json' \
      --data '{"query":"
        query($zone:String!,$bas:Time!,$bit:Time!){viewer{zones(filter:{zoneTag:$zone}){
          firewallEventsAdaptive(filter:{datetime_geq:$bas,datetime_leq:$bit},
            limit:20, orderBy:[datetime_DESC]){
            action source ruleId clientIP clientRequestPath clientCountryName userAgent datetime }
        }}}",
        "variables":{"zone":"'"$ZONE_ID"'",
                     "bas":"2026-09-01T00:00:00Z","bit":"2026-09-02T00:00:00Z"}}' | jq

    Demo 1: Bir yanlış pozitifi uçtan uca çözmek

    Bu, WAF’la çalışmanın gerçek işi — ve her ekibin er geç yapacağı şey.

    Adım 1 — Başlangıç ve veri merkezini not et

    curl -sS -D- -o /dev/null "https://ornek.com.tr/admin/kaydet" --data 'not=merhaba'

    cf-ray yanıt başlığının sonundaki üç harf hangi veri merkezinin işlediğini söylüyor — Türkiye’de IST veya ADB göreceksin.

    200 yanıtı ve cf-ray başlığında IST veya ADB son eki

    Adım 2 — Gerçek bir saldırı gönder (doğru pozitif)

    curl -sS -D- -o /dev/null "https://ornek.com.tr/ara?q=1%27%20OR%20%271%27%3D%271"
    403 yanıtı ve Cloudflare engelleme sayfası

    Adım 3 — Yanlış pozitifi üret

    Meşru ama SQL benzeri metin içeren bir yönetici isteği — bir CMS’te “SQL injection” hakkında bir doküman sayfası kaydetmek, bu senaryonun klasik gerçek hayat örneği:

    curl -sS -D- -o /dev/null "https://ornek.com.tr/admin/kaydet" \
      -H 'Content-Type: application/x-www-form-urlencoded' \
      --data "baslik=SQL+rehberi&govde=Sorgularinizda asla ' OR '1'='1 yazmayin"
    403 yanıtı — saldırı olmayan bir istekte

    Adım 4 — Security Events’te kuralı bul

    Action=Block ve Path=/admin/kaydet filtresiyle bulunan olay; Rule ID, Ruleset ve Service alanları

    Suçlu 949110: Inbound Anomaly Score Exceeded ise (6179ae15870a4bb7b2d480d4843b323c), olay detayında Additional logs’u aç — katkıda bulunan tek tek kuralların skorlarını orada görüyorsun.

    Additional logs bölümünde tek tek kural ID'leri ve skorları

    Adım 5 — Dar kapsamlı exception yaz

    Yukarıdaki POST çağrısını position.before ile çalıştır.

    API yanıtı ve panelde exception'ın execute kuralının ÜSTÜNDE göründüğü

    Adım 6 — İki tarafı da doğrula

    Adım 3’ü tekrarla → 200 olmalı. Adım 2’yi tekrarla → hâlâ 403 olmalı.

    Aynı iki isteğin yeni sonuçları yan yana

    Bir de sızma testi: aynı gövdeyi /admin dışında bir yola gönder — hâlâ engellenmeli.

    curl -sS -o /dev/null -w '%{http_code}\n' "https://ornek.com.tr/kaydet" \
      -H 'Content-Type: application/x-www-form-urlencoded' \
      --data "baslik=SQL+rehberi&govde=Sorgularinizda asla ' OR '1'='1 yazmayin"
    Aynı gövdenin /admin dışındaki yolda hâlâ 403 alması

    Bu demoda ölçülenler:

    İstekÖnceException sonrasıNe kanıtlıyor
    GET /ara?q=1' OR '1'='1403403Saldırı hâlâ engelli — kapsam dar
    POST /admin/kaydet (meşru)403200Yanlış pozitif çözüldü
    POST /kaydet (aynı gövde)403403Exception /admin dışına taşmadı
    Security Events, Block≥1 olay0 yeni olayOlay logu doğruluyor
    Security Events, Skip0≥1 olayException’ın kendisi loglanıyor

    Demo 2: Leaked credentials tespitini Cloudflare’in test kimlikleriyle tetiklemek

    Bu demo tamamen deterministik — Cloudflare test için ayrılmış kimlik bilgileri yayımlıyor.

    Adım 1 — Temiz kontrol isteği

    curl -sS -D- -o /dev/null "https://ornek.com.tr/giris" \
      -H 'Content-Type: application/x-www-form-urlencoded' \
      --data 'kullanici=ayse@ornek.com.tr&parola=Uzun-ve-benzersiz-parola-2026'
    200 veya origin'in normal yanıtı

    Adım 2 — Test kimlik bilgileriyle tetikle

    Kimlik bilgileri büyük/küçük harfe duyarlı:

    # Ücretsiz plan
    curl -sS -D- -o /dev/null "https://ornek.com.tr/giris" \
      -H 'Content-Type: application/x-www-form-urlencoded' \
      --data 'kullanici=CF_LEAKED_USERNAME_FREE&parola=CF_LEAKED_PASSWORD'
    
    # Ücretli planlar
    curl -sS -D- -o /dev/null "https://ornek.com.tr/giris" \
      -H 'Content-Type: application/x-www-form-urlencoded' \
      --data 'kullanici=CF_EXPOSED_USERNAME&parola=CF_EXPOSED_PASSWORD'
    
    # 2026 eklemesi — Basic auth da taranıyor
    curl -sS -D- -o /dev/null -u 'CF_EXPOSED_USERNAME:CF_EXPOSED_PASSWORD' "https://ornek.com.tr/giris"
    Üç isteğin de normal yanıt aldığı — henüz hiçbir şey engellenmediği
    Leaked credentials filtresiyle görünen istekler — hiçbiri engellenmemiş

    Adım 3 — Azaltma kuralını ekle

    Yukarıdaki custom rule’u uygula, sonra Adım 2’yi tekrarla.

    Aynı test kimlik bilgileriyle yapılan isteğin managed challenge alması

    Adım 4 — Origin’e bildirimi aç

    Managed transform ile Exposed-Credential-Check başlığını ekle ve on-prem origin’inde logla:

    log_format kimlik '$remote_addr "$request" ecc=$http_exposed_credential_check';
    access_log /var/log/nginx/kimlik.log kimlik;
    nginx logunda ecc=1, ecc=2 veya ecc=4 değerleri

    Değerler: 1 çift sızmış · 2 kullanıcı adı sızmış · 4 yalnızca parola sızmış.

    Adım 5 — Ücretsiz plan şablonunu göster

    Ücretsiz planda hazır bir şablon var: “you get instant protection against IPs attempting to access your application with a leaked password more than five times per 10 seconds.”

    Panelde hazır şablonun uygulanması ve oluşturduğu kural

    Bu demoda ölçülenler:

    İstekTespit kapalıTespit açık, kural yokTespit + kural
    Temiz kimlik200200200
    CF_EXPOSED_* (form)200200challenge
    CF_EXPOSED_* (Basic auth)200200challenge
    Security Analytics sinyali0≥1≥1
    Origin’de Exposed-Credential-Checkyok1 (transform açıksa)1

    Fiyatlandırma

    ÖzellikFreeProBusinessEnterprise
    WAF
    Free Managed Ruleset
    Cloudflare Managed Ruleset
    OWASP Core Ruleset
    Custom rule5201001.000
    Log aksiyonu
    Regex
    Attack score (tam)yalnızca class
    Leaked credentials (parola)
    Leaked credentials (çift)
    Malicious uploadsücretli eklenti
    Sensitive Data Detection

    Lisanslama ve hukuki çerçeve

    Hizmet tescillidir ve Cloudflare Hizmet Şartları’na tabidir.

    TLS sonlandırma gerekliliği. WAF denetimi, trafiğin Cloudflare’de deşifre edilmesini gerektiriyor: “TLS termination — the point at which encrypted HTTPS traffic is decrypted so Cloudflare can inspect and apply your security rules.” Yani WAF kullanmak, Cloudflare’in trafiğinin içeriğini görmesi demek.

    KVKK. Cloudflare hiçbir yerde KVKK, BTK, 5651 sayılı kanun veya BDDK’dan söz etmiyor — cloudflare.com/sitemap.xml (896 URL), trust-hub, data-localization ve dokuz llms-full.txt korpusunda sıfır eşleşme. Bu sayfadaki her KVKK yorumu kendi analizimizdir, Cloudflare beyanı değildir.

    Cloudflare’in kendi Türkçe terminolojisi (vaka çalışmalarından): “Web uygulaması güvenlik duvarı (WAF)” · “Hız Sınırlama” · “Gelişmiş Hız Sınırlama” · “DDoS Azaltma” · “Bot Yönetimi”. Bu portalda yerleşik İngilizce terimler korunuyor, ama Cloudflare ile yazışırken bu karşılıklar işine yarar.

    Sık yapılan hatalar

    Skip kuralını execute kuralının arkasına koymak. Hiçbir şey atlanmıyor.

    Zone seviyesinde exception yazıp account seviyesindeki kuralı atlamayı beklemek. Kapsam ayrı.

    Ruleset veya tag override’ın gelecekteki kuralları da etkilediğini bilmemek. Yalnızca mevcut kurallar için rule override kullan.

    Tek bir yanlış pozitif için tüm ruleset’i kapatmak. “disable that specific rule and not the entire ruleset.”

    Tüm managed rule’ları override ile açmak. “It is not recommended… unless you are running a proof of concept.”

    Origin’i doğrudan erişime açık bırakmak. WAF yalnızca proxy’li trafiği görüyor.

    Browser Integrity Check’i unutmak. Varsayılan açık, Ruleset Engine dışında, faz atlayarak atlanamıyor — curl ve API istemcilerindeki 403’lerin sessiz kaynağı.

    Attack score 0 gördüğünde “temiz” sanmak. İstek o aşamaya hiç ulaşmamış.

    Attack score 100’ü kural ifadesinde kullanmaya çalışmak. Unscored sınıfı ifadelerde kullanılamıyor.

    50’nin altındaki tüm attack score’ları bloklamak. Cloudflare önermiyor; 21–50 aralığı meşru istek içerebiliyor.

    OWASP’ı PL4 + Low ile açıp trafiği izlememek. Cloudflare bu kural setini “yanlış pozitife yatkın” diye tanımlıyor.

    “Low threshold daha gevşek” sanmak. Tersi — Low (60) daha çok kural eşleşmesi istiyor, yani daha gevşek. High (25) daha sıkı.

    4.096 karakter veya 64 regex sınırını aşmak. Kural kaydedilemiyor; mevcut kural çalışıyor ama düzenlenemiyor.

    Body kesilmesini hesaba katmamak. Hem saldırı kaçırıyor hem yanlış pozitif üretiyor.

    Kendi Skip kuralınla managed rules’u tamamen kapatmak. En yaygın kendi kendine açılan yanlış negatif.

    Sıkça sorulan sorular

    WAF kuralım hiç tetiklenmiyor, neden?
    Üç yaygın sebep. (1) DNS kaydın proxy'li değil — “Cloudflare only mitigates requests in proxied traffic.” (2) Daha erken bir faz isteği zaten sonlandırdı; sıra ddos_l7http_request_firewall_customhttp_ratelimithttp_request_firewall_managedhttp_request_sbfm. (3) Kuralı deploy etmedin ya da bir exception onu atlıyor.
    Custom rules ile Managed Rules arasındaki fark ne?
    Custom rules senin yazdıkların, http_request_firewall_custom fazında ve rate limiting'den önce çalışıyor. Managed Rules Cloudflare'in yazdığı imza tabanlı kurallar, http_request_firewall_managed fazında ve rate limiting'den sonra. Kritik sonuç: bir custom rule'da Block varsa, managed rules o istek için hiç çalışmıyor.
    Ücretsiz planda WAF var mı?
    Var ama sınırlı: yalnızca Cloudflare Free Managed Ruleset (varsayılan açık) — “Provides protection against high-impact and widely exploited vulnerabilities.” Cloudflare Managed Ruleset ve OWASP Core Ruleset Pro ve üzeri. Custom rules ücretsizde 5 tane, regex yok, Log aksiyonu yok.
    <code>Log</code> aksiyonunu neden seçemiyorum?
    Birebir: “Only available on Enterprise plans.” Yani Free, Pro ve Business kullanıcıları bir kuralı Block'a almadan önce “önce logla, sonra karar ver” yapamıyor. Alternatif: Security Analytics'te aynı filtreyi uygulayıp kaç isteğin etkileneceğini önceden say.
    Attack score eşiğini kaça koymalıyım?
    Cloudflare'in tavsiyesi Enterprise için cf.waf.score le 20 ile başlamak. Ve açık bir uyarı var: “Blocking traffic solely based on attack score for all values below 50 is not recommended. The Likely attack range (scores 21–50) can include legitimate requests.” Business planda yalnızca cf.waf.score.class eq "attack" kullanabiliyorsun — tam skor Enterprise.
    Attack score 0 veya 100 gördüm, ne demek?
    İkisi de özel değer. 100: “the request reached the WAF attack score system, but the system decided not to score it — panelde Unscored görünüyor ama kural ifadesinde bu sınıfı kullanamıyorsun. 0: “In Logpush data, a score of 0 means the request did not reach the attack score stage — panelde hiç görünmüyor. İkisi de “temiz” demek değil.
    OWASP Core Ruleset'i açmalı mıyım?
    Cloudflare kendisi çekinceli. Birebir: “The Cloudflare OWASP Core Ruleset is prone to false positives and offers only marginal benefits when added on top of Cloudflare Managed Ruleset and WAF attack score.” Açacaksan PL1 + Medium (40) ile başla ve trafiğini izle. Ayrıca bu, OWASP Top 10 değil — CRS 3.3.0 uygulaması.
    Bir managed rule meşru isteğimi blokluyor.
    Sırasıyla: (1) Security Events'te rule ID'yi bul; (2) mümkün olan en dar ifadeyle bir exception yaz — Cloudflare'in kendi örneği http.host eq "ornek.com" and starts_with(http.request.uri.path, "/admin"); (3) son çare olarak override ile o tek kuralı kapat. Birebir: “If one specific rule causes false positives, disable that specific rule and not the entire ruleset.”
    Exception yazdım ama hiçbir şey değişmedi.
    Sıralama. Birebir: “Rules with skip action only apply to rules with execute action listed after them. If you add a rule with skip action at the end of the rules list, nothing will be skipped.” API'de position: {"before": "<EXECUTE_RULE_ID>"} kullan.
    Exception ile override farkı ne?
    Exception kuralın çalışmasını atlıyor, override kuralın aksiyonunu değiştiriyor veya kapatıyor. Ve öncelik: Exceptions have priority over overrides. Bir tuzak daha: “Ruleset overrides and tag overrides apply to both existing and future rules… If you want to override existing rules only, you must use rule overrides.”
    curl ile 403 alıyorum ama Security Events'te kural göremiyorum.
    Büyük ihtimalle Browser Integrity Check. Varsayılan olarak açık ve Ruleset Engine'in dışında çalışıyor — faz atlayarak atlanamıyor. Birebir: “It also challenges visitors without a user agent or with a non-standard user agent.” Atlamak için custom rule'da Skip → products → bic.
    Body'nin tamamı taranıyor mu?
    Hayır, plana bağlı: Enterprise 128 KB, Free 1 MB, diğer ücretli planlar “lower by default”. Ve çift yönlü bir sorun: kesilen body hem saldırı kaçırıyor hem yanlış pozitif üretiyor“Larger payloads give more content for rules to match against, which increases the score.” Sinyal alanı: http.request.body.truncated.
    Yüklenen dosyaları taratabilir miyim?
    Enterprise + ücretli eklenti ile. Antivirüs motoru Zero Trust'takiyle aynı. 50 MB'a kadar tam tarama, üzeri kısmi. Taranmayanlar: parola korumalı arşivler, 3 seviyeden derin arşivler, 300'den fazla dosyalı arşivler, PGP şifreli dosyalar. Ve gecikme uyarısı var: “Enabling malicious uploads detection can introduce latency.”
    Sızmış parola tespiti parolalarımı Cloudflare'e mi gönderiyor?
    Hayır. Birebir: “Cloudflare does not store, log, or retain plaintext end-user passwords when performing leaked credential checks. Passwords are hashed, converted into a cryptographic representation, and then compared against a database of leaked credentials.” Veri kaynağı: Have I Been Pwned parola veri kümesi, Cloudflare'in topladığı kullanıcı adları ve sızmış çiftler.
    WAF uygulama hatalarımı kapatır mı?
    Hayır — ve Cloudflare bunu kendi changelog'unda yazıyor. İki 2026 Next.js CVE'si için birebir: “This is an application logic bug that unfortunately cannot be covered through Cloudflare WAF signature engine.” Ayrıca OWASP Top 10'un dört kategorisi için de aynı şeyi söylüyor: Cryptographic Failures, Insecure Design, Identification and Authentication Failures, Security Logging and Monitoring Failures.

    İlgili servisler

    • Rate LimitingIP, oturum veya özel anahtara göre request sayısını sınırlar.
    • Bot ManagementHer request’e bot skoru verir; kazıyıcı, kimlik doldurma ve stok kapma trafiğini ayırır.
    • DDoS ProtectionL3/L4 ağ katmanı DDoS savunması ve sınırsız (unmetered) koruma politikası. HTTP katmanı için DDoS for Web.
    • API ShieldAPI uç noktalarını schema validation, mTLS ve anomali tespitiyle korur.

    Bu sayfadaki fiyat ve özellik bilgileri 1 Eylül 2026 tarihinde Cloudflare’in resmî kaynaklarından doğrulanmıştır. Cloudflare fiyatlandırmasını önceden haber vermeden değiştirebilir; bağlayıcı bilgi içinresmî sayfaya bakın.

    Hata bildir

    Yanlış bir rakam, eskimiş bir bilgi veya bozuk bir bağlantı mı buldun? Bildir, kaynağıyla birlikte kontrol edelim.