Teknoloji

WAF ve Bot Koruması: Cloudflare, ModSecurity ve Fail2ban’ı Aynı Masada Barıştırmanın Sıcacık Hikâyesi

Ofiste Bir Gündü: Botlar Kapıyı Çalınca Ne Yaparsın?

Hiç gece yarısı sitede gariplikler oldu mu? Trafik dalga dalga yükselir, Analytics’te ülkeler değişir, sepete atmalar artar ama kasa sessizdir. O akşam ofiste kahvemi bitirirken, monitörde dans eden istekleri izledim ve bir an düşündüm: Bu akışı kenarda süzen, içeride inceleyen ve en sonda kapıyı kilitleyen bir düzen kurmadan rahat yok. O an başladı bu yazının tohumu.

Bu satırlarda WAF ve bot korumasını sadece adıyla değil, dokunup hissettiğin bir düzen gibi anlatmak istiyorum. Kenarda Cloudflare, sunucu tarafında ModSecurity ve sistem seviyesinde Fail2ban. Üçü bir araya gelince ortaya, saçakları rüzgârda savrulmayan, çatısı sağlam bir ev çıkıyor. Mesela şöyle düşün: Sokak girişinde bir güvenlik görevlisi, kapıda bir ikinci kontrol, içeride ise devriye gezen biri. İşte o gece öğrendiğim, ayarların ve kuralların ötesinde bir şeydi: Katmanları konuşturmak.

Yazının devamında önce neyi neden yaptığımızı konuşacağız, sonra Cloudflare’ın kenarda yaptığı süzgeç işini, ModSecurity’nin içerideki gözünü ve Fail2ban’in pratik bileğini tek tek ele alacağız. En sonunda da üçünü birleştiren sıcak bir yol haritası çıkaracağız. Kuru tarifler yerine, sahadan küçük hikâyelerle.

WAF ve Bot Koruması Ne İşe Yarar, Ne Zaman Yeterli Gelmez?

WAF’i bir kilit gibi değil de, kapının önündeki akıllı paspas gibi düşün. Üzerinde iz kalır, gelenin ayak izini görür, nereye bastığını sezersin. WAF, tehlikeli desenleri, tuhaf sorgu parametrelerini, kaba kuvvet denemelerini fark eder ve daha uygulamaya ulaşmadan durdurur. Bot koruması da aynı havadan, ama ritme bakar. Çok hızlı, çok ısrarlı, çok anlamsız bir hareket gördüğünde, “Bir sakin ol” der ve kapıda küçük bir soruya yönlendirir.

Yine de her kilidin bir anahtarı bulunur. Bu yüzden tek bir araca yaslanmak bazen hayal kırıklığı yaratır. Kenarda WAF kötü niyetli akışı yakalarken, içeride beklenmedik bir uygulama hatası yeni bir kapı aralayabilir. Bazen iyi niyetli bir entegrasyon, garip bir payload ile WAF’i kızdırır. Bu noktalarda sorunun çözümü, tek aracı güçlendirmek yerine, katmanlı bir düzen kurmak oluyor. Kenarda filtre, orta katta inceleme, en altta ise hızla kapatma ve kara listeye alma.

Bir de şu var: Bot koruması sadece saldırganları değil, sabırsız tarayıcıları, yanlış yapılandırılmış izleme araçlarını, hatta iyi niyetli ama ağır çalışan entegrasyonları da terletebilir. O yüzden kurarken “herkese şüphe” yerine, “kritik yolları koru, geri kalanları nazikçe izle” yaklaşımı iş görüyor. Login, arama ve ödeme gibi dar boğazları önceliklendirmek, gürültüyü azaltıyor.

Cloudflare Kenarda: Süzgeci İnce Ayarla, Ritmi Dinle

Cloudflare’ı sevdiğim tarafı şu: Kenarda, uygulamaya daha dokunmadan, akışı yumuşatır. WAF kuralları ile bilinen riskleri otomatik frenleyebilir, özel yazdığın kurallarla da sitenin ritmine göre filtreyi sıkıp gevşetebilirsin. Mesela arama uç noktasına peş peşe istek atan adreslere ufak bir mola verdirirsin; admin girişine tanıdık olmayan bir ülkeden gelen kullanıcıya küçük bir doğrulama çıkarırsın. Böylece hem performans korunur hem de gereksiz yük uygulamaya inmez.

Kendi pratiğimde, önceliği giriş ve sepet süreçlerine veriyorum. Admin tarafını sadece belirli bir IP aralığına açmak, mümkünse ekstra bir doğrulama eklemek işe yarıyor. Bir de oran sınırlama kuralı, özellikle arama ve API uçlarında mucize gibi. Hızlı tıklayan iyi niyetli kullanıcıyı boğmadan, “fazla ısrarlı” olanları nazikçe yavaşlatıyor. Bu konuyu bir adım daha derin görmek istersen, Cloudflare WAF kuralları ve oran sınırlama ile WordPress’i botlardan korumaya dair bu rehberdeki pratik ayarlar güzel bir ilham veriyor.

Cloudflare’ın bir başka tatlı yanı, challenge akışı. Tam engellemek yerine, bir ufak doğrulama ile niyeti yoklarsın. Kötü niyetli otomasyon şu anlarda ayağına dolanır, gerçek kullanıcı ise saniyeler içinde yoluna devam eder. Özellikle belli saatlerde artan spam form gönderimlerinde bu yaklaşım işleri çok rahatlatıyor. Bir yandan da logları izleyip hangi kuralların en çok çalıştığını görünce, gereksiz katılığı yumuşatma veya açık kalan boşluğu kapatma şansın oluyor.

Daha detaya girmek istersen, Cloudflare WAF belgeleri sade anlatımıyla fena değil. Yöntem hep aynı: Önce görün, sonra karar verin, en sonda engelleyin. Kenarda gerçek zamanlı bir not defteri gibi tutulan veriler, içeride yapacağın ince ayara ışık tutuyor.

ModSecurity İçeride: İnce Göz, İyi Niyetli İstisnaları Anlamak

Sunucu tarafında ModSecurity devreye girince, iş biraz mikroskopa dönüşüyor. Kenarın kaçırdığı ya da uygulamaya özgü desenler burada daha net seçiliyor. Özellikle OWASP Core Rule Set etkinleştiğinde, sıradan enjeksiyon denemeleri, şüpheli parametre kombinasyonları ve garip içerik tipleri daha içeride fark ediliyor. Avantajı büyük, ama her mikroskop gibi hassas; yanlış alarmı azaltmak için küçük dokunuşlar şart.

Benim izlediğim rota şöyle: Önce kuralları izleme modunda açarım. Günlüklerde en çok öten, ama kullanıcı deneyimini bozduğu anlaşılan kuralı nazikçe törpülerim. Mesela bir ödeme servisinin geri dönüş URL’si bazı parametrelerde hassassa, o uç nokta için esneklik tanırım. Bazen sadece belirli bir kural kimliği devre dışı bırakılır, bazen de ilgili yol için istisna tanımlanır. Ne kadar nokta atışı, o kadar huzur.

İpuçlarını bir arada görmek istersen, OWASP ModSecurity Core Rule Set dokümantasyonu pratik açıklamalar barındırıyor. Oradaki fikirleri birebir kopyalamak yerine, sitenin akışına göre uyarlamak en sağlıklısı. Unutma, amaç herkesi durdurmak değil; gerçek kullanıcıyı incitmeden kötü niyeti ayıklamak.

Fail2ban: Hızlı Refleks, Sessiz Güç

Fail2ban sahneye girdiğinde, sistem düzeyinde pratik bir refleks kazanıyorsun. Logları dinler, şüpheli tekrarları seçer, belirlediğin eşiği aşanları geçici olarak dışarı alır. SSH’a art arda yanlış giriş yapan, Nginx’te arka arkaya 40x hatası üreten ya da panel girişini taciz eden adresler, kısa süre kapıda bekletilir. Bu, buzlu bir içecek gibi; aşırı ısınmış sunucu nefes alır.

Fail2ban’in güzelliği, günlüğe göre aksiyon alması. Yani torbaya her şeyi atmaz, senin yazdığın kurallara bakar. Bir site için 10 dakikada 5 başarısız giriş yeterli eşik olabilir, başka bir sitede 20 dakikada 10’u beklemek daha doğrudur. Elbette beyaz listeye ekip IP’lerini almak, yedek bağlantıları korumak ve mobil kullanıcıların değişken IP’sine tolerans tanımak gerekir. İncelik burada.

Daha fazla kurcalamak istersen, Fail2ban resmi dokümantasyonu sade örnekler sunuyor. Sevdiğim bir numara da şu: Fail2ban’i sadece engellemekle bırakmayıp, bazı durumlarda Cloudflare API’sini çağırarak kenarda da listeye eklemek. Böylece saldırgan hem kapıdan hem sokak başından uzaklaştırılmış oluyor. Ne kadar erken, o kadar hafif yük.

Üçlü Entegrasyon: Katmanlar Konuşunca Gürültü Azalıyor

Gelelim kilit noktaya: Cloudflare + ModSecurity + Fail2ban üçlüsü birlikte nasıl ritim tutar? Ben bunu bir orkestraya benzetiyorum. Birinci enstrüman kenarda tempo tutar, ikincisi melodiyi berraklaştırır, üçüncüsü uyumsuz notaları nazikçe susturur. Sırlar, bu enstrümanlara doğru sırayı ve alanı vermekte.

Önce kenarda genel akışı yumuşatmak en temiz başlangıç. Saldırgan desenleri, abartılı hızları ve bilinen şüpheli imzaları burada tutup filtrelediğinde, sunucuya ulaşan trafik zaten daha kaliteli olur. Ardından ModSecurity ile uygulamaya özel hassasiyetleri devreye alırsın. Webhook’lar, ödeme dönüşleri, özel API uçları… Hepsi için ince ayar. En sonda Fail2ban, tekrarlayan ve ısrarlı davranışları loglardan yakalayıp geçici olarak dışarı alır; kimi durumlarda kenardaki kara listeye de haber verir.

Bir kez bu döngüyü kurunca, tıkanma anlarında elin hızlanıyor. Mesela olağanüstü bir dalga gördün; önce Cloudflare tarafında anlık bir challenge yükseltmesi ve oran sınırı, eş zamanlı ModSecurity’de ilgili uç için geçici bir esneklik veya tersine sıkılaştırma, Fail2ban’de eşiklerin bir tık aşağı çekilmesi. Sonra sakinlik dönünce hepsini eski ayarlarına alırsın. Bu kadar.

Gerçek Bir Senaryo: Bot Fırtınası, Küçük Dokunuşlar ve Sükûnet

Bir akşam, bir WooCommerce mağazasında sular yükseldi. Arama uçları yoğun, ürün sayfaları sürekli yenileniyor, sepetler şişiyor ama ödeme gelmiyor. İlk hareketim kenarda oldu: Arama ve ürün detay isteklerine düşük yoğunlukta bir rate limit ekledim, şüpheli ülkeler için yumuşak bir doğrulama açtım. Akış toparlandı; en azından dalga biraz yumuşadı.

İkinci adımda ModSecurity loglarına baktım. Bazı isteklerde tuhaf parametre kombinasyonları vardı, ama iyi niyetli kullanıcıların da nadiren benzer yol izlediğini gördüm. İlgili kuralı tamamen kapatmak yerine sadece o uç noktada esnettim. Böylece sahte isteklerin yüzde çoğunu ayıklarken, gerçek kullanıcının nadir davranışını cezalandırmamış oldum. İnce iş, ama karşılığı büyük.

Üçüncü hamlede Fail2ban’i devreye aldım. Kısa süre içinde aynı IP’den çok sayıda 404 ve 403 üreten adresleri 15 dakikalık beklemeye aldık. Biri geri döner ve denemeye devam ederse süre uzuyor. Bu kombinasyon, yükü normal seviyesine indirdi. Hatta bu süreçte konsolda spike’lara bakarken aklıma geldi; benzer anları o gece CPU’ya ne olduğunu sorguladığım küçük hikâyede de yaşamıştım. Yazboz gibi değil, şefkatli ayarla sorun çözülüyor.

Bakım, Gözlem ve Küçük İpuçları

WAF ve bot ayarları kuruldu diye defteri kapatmıyoruz. Küçük düzenli kontrollerle büyük fırtınaları başlamadan kısarsın. Ayda bir kurallara bakıp en çok tetiklenenleri gözden geçirmek, istisnaları taze tutmak ve logların gerçekten anlamlı şeyler yazdığından emin olmak yetiyor. Bir de “staging” ortamında değişiklikleri denemek, canlıyı korkutmadan öğrenme lüksü sunuyor.

Bu yolculukta yedeklerin değeri büyük. Güvenlik, her zaman tek başına yeterli değil; hata payı hep var. O yüzden sağlam bir kopya planı kurmak içe su serpiyor. İstersen burada 3-2-1 yedekleme stratejisinin neden işe yaradığını ve otomatik yedekleri nasıl kuracağını adım adım anlatan rehbere göz at. Ayrıca altyapı tarafında süreklilik konuşacaksak, Anycast DNS ve otomatik failover ile yayında kalmayı anlattığım yazı da katmanlı güvenlik vizyonuna güzel oturuyor.

Kapanışa Doğru: Sakin, Katmanlı, Anlaşılır

Şunu fark ettim: WAF ve bot koruması, düğmeleri sonuna kadar çevirmek değil. Sakin bir ritim tutturmak, gerçek kullanıcıyı üzmeden gürültüyü azaltmak. Cloudflare kenarda nefes aldırır, ModSecurity içeride gerçeği ayıklar, Fail2ban kötü niyetli ısrarı kapının önünde bekletir. Üçü birlikteyken, saldırıların çoğu daha uygulamaya ulaşmadan yumuşar.

Eğer bu yolculuğa başlayacaksan, önce kritik yolları seç: login, arama, ödeme, API. Kenarda yumuşak doğrulama ve oran sınırı, içeride kural ayarı, en altta loga göre refleks. Bu düzeni bir kez kurunca gerisi bakım ve küçük dokunuşlar. İhtiyaç duyarsan, ufak bir perspektif için siber güvenlik tehditlerinin neden arttığına dair bu samimi notları da bir ara oku; kafadaki bulutları dağıtıyor. Ve merak edenler için, Cloudflare tarafında teknik ayrıntılara dalmak üzere kısa bir referans daha bırakayım: Cloudflare WAF belgeleri pratik örneklerle destekli.

Umarım bu yazı, kafandaki düğümleri biraz gevşetmiştir. Ayarlarla boğuşurken “bunu nasıl insan gibi anlatırım” diye dertleniyorum; umarım doğru yeri bulmuştur. Sormak, danışmak ya da “şurada takıldım” demek istersen, kapı açık. Bir dahaki yazıda görüşmek üzere, güvenli ve sakin akışlar dilerim.

Sıkça Sorulan Sorular

Tek araç her durumu yakalayamaz. Kenarda Cloudflare trafiği yumuşatır, içeride ModSecurity ince detayları görür, Fail2ban ise loglara bakarak ısrarlı denemeleri hızla dışarı alır. Üçü birlikteyken hem yanlış alarm azalır hem de sunucunun yükü hafifler.

Önce izleme modunda başla ve logları oku. En çok tetiklenen kuralı körlemesine kapatma; ilgili uç noktada nazik bir istisna tanımla. Login, arama ve ödeme gibi kritik yolları önceliklendir, diğer yerlerde daha esnek ol. Gerekirse doğrulamayı engelleme yerine kısa bir challenge ile uygula.

Önce kritik uç noktaları seç: giriş, arama, ödeme, API. Cloudflare’da oran sınırı ve temel WAF kurallarını aç, admin tarafını korumaya al. Sonra ModSecurity’yi izleme modunda başlatıp loglara göre ince ayar yap. En sonda Fail2ban ile tekrarlayan hatalı denemelere geçici engel koy. Sakin ilerle, her adımı test et.