Teknoloji

Cloudflare WAF Kuralları ve Oran Sınırlama ile WordPress’i Bot’lardan Nasıl Korursun?

İçindekiler

Küçük Bir Hikâye: Bir Sabah Uyanıyorsun ve Site Nefes Nefese

Hiç sabah kahveni alıp siteni açtığında, sayfaların ağır ağır yüklenirken “Acaba hosting mi yetmiyor?” dediğin oldu mu? Bir müşterimde tam böyle bir gün yaşamıştık. WooCommerce’li bir WordPress mağazası, gece boyunca “iyi niyetli görünmeyen” binlerce isteğin hedefi olmuş. Sunucu loglarını açınca aynı desen tekrar tekrar: wp-login.php ve xmlrpc.php… Yani doğrudan kalbin üstüne basan botlar. Site nefes nefese kalmış, ziyaretçiler kaçıyor, sepetler boş kalıyordu. O anda anladım; hız kadar katmanlı güvenlik da bir WordPress sitesinin en yakın dostu.

Bugün seninle, bu tür bot saldırılarını Cloudflare WAF kuralları ve oran sınırlama (rate limiting) ile nasıl sakinleştirebileceğini, hatta çoğunu daha kapından içeri bile sokmadan nasıl durdurabileceğini konuşalım. Yolda bolca gerçek örnek vereceğim, zor terimleri sadeleştireceğim, ama işi asla hafife almayacağız. En sonunda elinde kullanabileceğin pratik bir kural seti, denetleme ve bakım rutini olacak. Hazırsan başlayalım.

Botlar WordPress’i Neden Bu Kadar Sever? Ve Biz Buna Ne Yapabiliriz?

Kapı Neredeyse Hep Aynı Yerden Zorlanır

WordPress popüler olunca, kötü niyetli botların da ilk adresi oluyor. Mesela düşün; wp-login.php herkesin bildiği standart bir kapı. xmlrpc.php ise hem otomasyonlar hem de saldırganlar tarafından çok seviliyor. Bir de arama, yorum, kayıt gibi formlar var, trafik normal görünürken bir anda artış gösterebiliyor. İşin garibi, bu artış her zaman hacklenmeye çalışılıyorsun anlamına gelmiyor; bazen sadece kötü yapılandırılmış bir bot içerik çekiyor, ama sonuç aynı: performans düşüyor, kullanıcılar sıkılıyor.

Bu noktada Cloudflare devreye giriyor. Trafiği önce kendi üst katmanında karşılıyor, sonra sitene gönderiyor. Yani “kapı önünde” bekleyen güvenlik görevlisi gibi. WAF (Web Application Firewall) ile belli kalıpları, şüpheli davranışları ve bilinen kötü niyetli imzaları yakalıyor. Oran sınırlama ise işin ritmini düzenliyor; aynı kaynaktan kısa sürede fazla istek gelirse, “bir nefes al” diyerek yavaşlatıyor, engelliyor ya da doğrulama istiyor.

Benim pratikte gördüğüm şu: İyi ayarlanmış birkaç kural, sunucunun üzerindeki yükü hissedilir şekilde azaltıyor. Üstelik bunu yaparken meşru kullanıcıyı üzmemek asıl başarı. O yüzden kuralları “kırmızı çizgi” gibi değil, ince ayar gibi düşünmek lazım. Birazdan adım adım gideceğiz.

Cloudflare WAF’i Sade Düşün: Yönetilen Kurallar + Hafif Dokunuşlu Özelleştirme

Yönetilen Kurallar: Kutudan Çıkan Akıl

Cloudflare’ın yönetilen WAF kuralları zaten iyi bir başlangıç. En bilinen saldırı paternlerini, güncel tehditleri ve yaygın suistimal yollarını kapsıyor. Panoda Security > WAF ekranında bu kuralları etkinleştirince, kötü trafiğin büyük bir kısmı daha sana gelmeden eleniyor. Detaylara meraklıysan, Cloudflare’ın WAF dokümantasyonundaki güncel kural setlerine göz atmak güzel olur, ama burada işin özünü konuşalım: Yönetilen kurallar temel savunmayı sağlar, WordPress’e özel kilit noktalar ise özelleştirmeyle güçlenir.

Özelleştirme: WordPress’in Zayıf Halkalarına İyi Gelen Küçük Kurallar

Mesela şöyle düşün: Sitenin asıl ziyaretçisi wp-login.php’ye günde kaç kez uğrar? İki, üç, bilemedin beş. Peki botlar? Birkaç dakikada yüzlerce. Bu fark bize harika bir sinyal sunuyor. WAF kurallarıyla bu dosyaya gelen yoğun denemeleri önce challenge ile yavaşlatabilir, hâlâ ısrar edenleri bloklayabilirsin. xmlrpc.php için de benzer bir yaklaşım mümkün; eğer mecbur değilsen bu dosyayı tamamen kapatmak bile işi çok kolaylaştırır. Ama otomasyon kullanıyorsan, güvenilir IP aralığını izinli listeye almak akıllıca.

Ben genelde iki prensipten şaşmıyorum: Bir, kayıt ve giriş gibi hassas uç noktaları daha sıkı koru. İki, botların yoğunlaştığı saatleri izle ve kuralları nazikçe ayarla. Gerektiğinde “yumuşak bir balyoz” gibi davran: Önce uyar (challenge), sonra ısrar edilirse engelle. Bu sayede gerçek kullanıcıyı kırmadan botun nabzını düşürürsün.

Oran Sınırlama: Ritmi Sen Belirle, Sunucu Sakin Kalsın

Bazı Kapılar Kapasite İster, Bazıları Sabır

Oran sınırlama, bir bakıma sitenin kapısındaki sıra yönetimi. Aynı IP kısa sürede çok fazla istekte bulunuyorsa, “bir dur, önce önündekiler geçsin” diyorsun. Bu, wp-login.php ve xmlrpc.php gibi uç noktalar için şahane çalışır. Hatta arama sonuçları, yorum gönderme, sepet işlemleri gibi eylemlerde de aşırı kullanım tespit edildiğinde devreye girer. Burada amaç gerçek kullanıcıyı rahatsız etmek değil; tam tersine, onun için kaynakları korumak.

Panoda Security > WAF > Rate Limiting Rules bölümünden birkaç akıllı kural eklediğinde, trafiğin ritmi güzelleşiyor. Mesela “Bir IP, 1 dakika içinde wp-login.php’ye 5’ten fazla deneme yapıyorsa önce challenge, ısrar ederse block” gibi basit bir kalıp bile harikalar yaratır. Teknik detayı merak ediyorsan, oran sınırlama kurallarının mantığına hızlıca göz atıp geri dönebilirsin.

Yan Etkileri Düşün: İstisnalar ve Bypass

Her kuralın küçük sürprizleri olabilir. Örneğin, kendi ofis IP’ni veya yönetim ekibinin sabit IP’lerini izinli listeye almak huzur verir. Otomasyon araçları, mobil uygulamalar veya ödeme sistemleriyle konuşan özel uç noktalar varsa, istisna tanımlamak faydalı olur. Bir müşterimde POS entegrasyonu, yoğun saatlerde kısa süreli patlamalar yapıyordu; kaba bir kural satışları düşürür, ince ayar ise sistemi korurken kasayı güvende tutar.

Adım Adım Pratik: WordPress İçin Sıcacık Bir Kural Seti

1) wp-login.php’yi Sakinleştir

Önce şu kapıyı bir düzenleyelim. WAF özel kuralı oluştururken koşulu basit düşün: “İstek wp-login.php’ye gidiyorsa ve kısa sürede çok tekrar ediyorsa, challenge veya block uygula.” Ben başlangıçta Managed Challenge tercih ederim. Böylece hatalı bir eşleşme olursa kullanıcı bir doğrulamadan geçer ve yoluna devam eder. Aşırı ısrar olursa bloklamak daha sağlıklı. Hatta, yönetici paneline sadece belirli ülkelerden erişiyorsan, diğer ülkeler için challenge koymak ayrıca işe yarar.

2) xmlrpc.php’yi İyice Kontrol Et

Eğer xmlrpc’ye ihtiyacın yoksa, en kolayı tamamen engellemek. İhtiyacın varsa bile oran sınırlama şart. “Bir dakika içinde art arda birçok POST isteği” paternini en yakın arkadaşın gibi gör. Bu dosya saldırıların ve yük patlamalarının sık sebebi. Küçük bir not: Güvendiğin sistemlerin IP’lerini izinli listeye eklemek, kendi otomasyonunun etkilenmemesini sağlar.

3) Arama, Yorum ve Formlar: Kibar Ama Kararlı

Arama sonuçlarında kısa sürede aşırı istek geliyorsa, bunu da yumuşak bir şekilde düzenle. Önce challenge ile dene. Gerçek kullanıcı çoğu zaman bu aşamayı tak diye geçer, botlar ise genelde başka kapı arar. Yorum ve kayıt formlarında ise, peş peşe denemeleri sevmezsin; hem moderasyon yükün artar hem de sunucu yorulur. Oran sınırlamayla ritmi sakinleştirmek, bu alanlarda temiz bir nefes sağlar.

4) Statik Dosyalar ve Önbellek: Yanlış Hedefe Kurşun Sıkma

Botlar her zaman dinamik sayfalara yüklenmez; bazen görsel ya da CSS gibi statik dosyalara saldırarak bant genişliğini sömürür. Burada WAF tek başına yetmeyebilir; CDN önbelleği doğru ayarlanırsa, talepler edge’te karşılanır, sunucuna neredeyse hiç yük binmez. Güvenlik ve performansı aynı hikâyenin iki karakteri gibi düşün. Birini iyi yazınca, diğeri de güzelleşir. Statik içerik politikanı güçlendirirken, HTTP güvenlik başlıklarını doğru ayarlamak da hem tarayıcı tarafında hem de genel güvenlik duruşunda işine yarar.

5) Bot Davranışını İzle: Deseni Gör, Kuralı İncel

İşin sırrı izlemek. Cloudflare etkinlik günlüklerinde “hangi uç noktaya, hangi saat aralığında, hangi ülke ve kullanıcı aracından” yoğunluk geldiğini gör. Kuralını önce log veya simulate modunda gözlemleyip, sonra challenge ve en son block aşamasına geçir. “Hemen kılıcı çekmek” bazen gerçek kullanıcıyı da yaralar. Panikte değil, planla ilerle.

Şüpheli Trafiği Ayırt Etmenin İnce Yolları

İnsan Gibi Görünen Botlar

Bazı botlar kibar davranır, robots.txt’ye bakar, sınırlarını bilir. Bazıları ise kılık değiştirir. Kullanıcı ajanını (User-Agent) “Chrome” gibi gösterip at koşturanları görürsün. Burada davranış ipucu verir: Aynı IP’den çok hızlı dolaşım, form sonrasında hemen tekrar deneme, tek bir sayfaya aşırı düşkünlük gibi işaretleri topla. WAF kurallarında bu ipuçlarını küçük koşullara çevir. Düşün ki, her kural bir “hikâye filtresi” gibi; gerçek kullanıcı akışının ritmine uymayanları kenara alır.

Ülkeler, ASN’ler ve Bilinen Kötü Komşular

Ülke bazlı kısıtlama bazen çok etkili olur. Ama aşırıya kaçarsan gerçek ziyaretçiyi de kırarsın. Mesele, sitenin doğası. Lokal bir hizmet veriyorsan, belirli ülkelere challenge koymak mantıklı. Küresel bir yayın yapıyorsan, ASN (internet servis sağlayıcı grupları) üzerinden filtrelemek daha nazik olabilir. Ne yaparsan yap, önce izle, sonra küçük küçük uygula, etkisini gör ve öyle ilerle.

OWASP Top 10’u Aklında Tut

WAF kuralları sadece botları durdurmak için değil; sıradan uygulama açıklarını da hafifletmek için var. OWASP Top 10’daki kategoriler gibi, giriş denemeleri dışında yerele özel zafiyetleri düşünürken işine yarar. Panoda ilgili kural setlerini aktif etmek, uygulama katmanındaki tatsız sürprizleri azaltır.

Gerçek Bir Senaryo: WooCommerce Mağazasında Sakinlik Nasıl Geri Geldi?

Önce Gözlem, Sonra Akıllı Kurallar

Başta bahsettiğim WooCommerce mağazasında önce sadece izledik. Hangi saatlerde yoğunluk, hangi sayfalarda yığılma? Grafikte iki tepe netti: Gece yarısından sonra wp-login.php ve sabaha karşı xmlrpc.php. İlk iş, wp-login.php için “1 dakikada 5 deneme üstü challenge, 10 üstü block” kuralını koyduk. “Ofis IP’lerini izinli listeye” almayı da ihmal etmedik. İkinci iş, xmlrpc’yi tamamen kapatmak oldu; gerekli otomasyon içinse güvenilir IP’den bypass tanımladık.

Ardından arama ve sepet uçlarında kısa süreli yükselişleri yumuşatan minik oran sınırlama kuralları ekledik. Yük dağılımı daha dengeli hale geldi. En önemlisi, bu değişiklikleri önce log modunda denedik. Kimseyi üzmeden, sistemin ritmini toparlamak hedefimizdi. Sonuç? Sunucu yükü belirgin düştü, sayfalar akıcı hissettirdi ve müşteri destek masası sakinleşti.

Uygularken Dikkat: Hız, Önbellek ve Güvenlik Aynı Hikâyenin Parçası

Cache Yan Etkileri

CDN önbelleği kapıda büyük kazanım sağlar, ama kuralların üstüne bindirmemesi için dikkatli ol. Mesela wp-login.php gibi hiçbir zaman önbelleğe alınmaması gereken uç noktaları ayrı tut. Aksi halde tatlı bir karmaşa yaşarsın. Dinamik sayfalarda, giriş ve ödeme adımlarında da aynı hassasiyet geçerli. Güvenlik ve hız birlikte düşünülmeli, biri diğerini gölgelememeli.

Doğrulama Akışı

Challenge uygularken kullanıcı deneyimini unutma. Bazı doğrulama adımları mobilde daha hassas olabilir. Bu yüzden önce düşük eşikli, yumuşak kurallarla başla. Gerekirse kademeli olarak sertleştir. Ödeme adımı gibi kritik noktaları bu doğrulamalardan mümkün olduğunca uzak tut, orada oran sınırlama “usulca” işini yapar.

Küçük Bir Yol Haritası: İlk Günden İtibaren Uygulanabilir Adımlar

1) Yönetilen Kuralları Aç

Security > WAF ekranından yönetilen kural setlerini etkinleştir. Bu, bir “taban savunma” sağlar. Özellikle WordPress’e özgü bilinen paternler için kapıyı önceden aralık bırakma.

2) wp-login.php ve xmlrpc.php’yi Hedefe Koy

İki dosya, iki net strateji: wp-login.php için challenge + kademeli block, xmlrpc için kapat veya sıkı oran sınırı. Kendi adresin ve güvendiğin IP’ler için bypass hatırlatmasını yapayım.

3) Formlar ve Arama İçin Kibar Sınırlar

Arama, yorum, kayıt ve sepet eylemlerinde kısa süreli tekrarı yumuşatan küçük kurallar ekle. Bot davranışını nazikçe soğut, gerçek kullanıcıyı üzme.

4) Logla, İncele, İyileştir

Kuralları önce log modunda çalıştır, etkisini gör, gerekirse eşikleri ayarla. Usağa yakın davran, abartma. Her sitenin ritmi farklıdır; eşik de öyle.

5) Güvenlik Başlıkları ve Önbellek Ayarlarını Tamamla

WAF tek başına kahraman değil, ekiple çalışır. Güvenlik başlıkları, TLS, cookie ayarları ve CDN önbelleğiyle birlikte düşün. Küçük iyileştirmeler toplamda büyük fark yaratır.

Sık Karşılaşılan Tuzaklar ve Nazik Çözümler

“Çok Sert Başladım, Kullanıcılar Giremiyor”

Hemen eşikleri yumuşat. Önce challenge, sonra block. Bir de kendi IP’lerini ve ekibin IP’lerini izinli listeden geçirmeyi unutma. Özellikle ofis ağları zaman zaman IP değiştirebiliyor; bunu da göz önünde tut.

“Botlar İçeri Girmiyor Ama Trafik Hâlâ Yüksek”

Statik içerik tarafına bak. CDN önbelleği düzgün çalışıyor mu? Görseller doğru varyantlarla dağıtılıyor mu? Edge tarafında çözülmeyen istekler sunucuna yığılır. Önbellek kurallarını gözden geçir, özellikle HTML dışındaki içeriklerde daha agresif olmayı düşün.

“Bir Entegrasyon Bozuldu”

Ödeme, kargo, ERP gibi dış servislerle konuşan uç noktaları tespit edip WAF’de istisna tanımla. Gerekirse ASN veya IP aralığını izinli listeye al. Değişikliğin etkisini gözlemle ve logları birkaç gün dikkatle izle.

Gözün Üstünde Olsun: İzleme, Alarmlar ve Süreklilik

Alarmlar: Kâğıda Yazılmış Küçük Hatırlatmalar Gibi

Cloudflare’da belirli eşikler aşıldığında alarm kur. Akşam saatlerinde veya kampanya zamanlarında bu alarmlar erken uyarı sağlar. “Fark ettim ama geç kaldım” duygusunu azaltır.

Haftalık Rutin: Küçük Dokunuşlar

Haftada bir, etkinlik günlüklerine kısa bir göz at. Hangi ülkelerden trafik arttı? Hangi kullanıcı ajanları şüpheli? Yeni kural eklemekten çok, mevcut kuralın eşiklerini küçük oynamak çoğu zaman yeter. Büyük değişikliklerde önce düşük trafikli zamanları seç, sonra yayına al.

Dokümantasyon: Yarınki Sen İçin Not Bırak

Hangi kural neden eklendi, hangi tarihte hangi eşik değiştirildi, küçük bir not düş. Bir sorun olduğunda o notlar, dününü bugüne bağlayıp işini kolaylaştırır.

Kapanış: Güvenli, Hızlı ve Sakin Bir WordPress Mümkün

Son Bir Nefes, Son Bir Özet

WordPress’i botlardan korumak bir defalık bir hamle değil; nazik bir süreç. Cloudflare WAF kuralları, yönetilen korumayla temel savunmayı kurar; özelleştirilmiş kurallar ve oran sınırlama ise tam senin sitenin ritmine uygun bir kalkan örer. wp-login.php ve xmlrpc.php gibi kapıları iyi yönetir, formları ve aramayı kibarca sınırlarsan, sunucu sakinleşir, kullanıcı deneyimi de düzene girer.

Pratik bir tavsiye seti: Önce izleyerek başla, küçük kurallar dene, eşikleri yavaşça ayarla, alarmlarını kur ve haftalık mini bir kontrol listesi oluştur. Gerekirse Cloudflare’ın dokümanlarına kısa uğrayıp geri dön; WAF kuralları ve oran sınırlama örnekleri anlaşılır referanslar sunuyor. Güvenliğin yanında, hız ve tarayıcı tarafı ayarlarını da unutma; bunun için HTTP başlıklarını doğru kullanmak sana güzel bir kaldıraç verir.

Umarım bu yazı, kalabalık bot trafiği karşısında yalnız hissettiğin anlarda elini güçlendirir. Küçük ayarlar büyük fark yaratır. Soruların olursa bana her zaman yazabilirsin; bir sonraki yazıda başka bir “ah işte buymuş” anını birlikte çözmek dileğiyle.

Sıkça Sorulan Sorular

Genelde düşükten başlamak iyi: 1 dakikada 5 deneme üstünde challenge, 10 üstünde block gibi. Önce log modunda izleyip, sitenin ritmine göre ince ayar yap.

İhtiyacın yoksa kapatmak işleri çok kolaylaştırır. Otomasyon veya entegrasyon kullanıyorsan güvenilir IP’lere istisna tanımlayıp kalan trafiği sınırlandır.

Önce yumuşak başla: challenge kullan, eşikleri düşük tutma. Loglarla izle, sorun görmezsen kademeli sertleştir. Kendi IP’lerini izinli listeden geçirmeyi unutma.