WordPress Brute Force Saldırıları için Cloudflare Kuralları
WordPress siteleri, açık kaynak kodlu bir alt yapıya sahip olduğu için kötü niyetli kişilerin dosyaların tamamını indirip kontrol ederek buldukları açıklarla yayında olan sitelere sürekli olarak saldırı yapması nedeniyle iyi korunması gerekir. Bir kalenin korunması kapısından başlar. Eğer kapının kilidini açık bırakırsanız ya da onu hemen paspasın altına koyup saklarsanız o kale artık sizin için güvenli değildir.
Brute Force saldırıları, kötü niyetli kişilerin sürekli olarak WordPress yönetici sayfası yani “wp-admin” bölümüne erişmek için admin kullanıcı adı ve şifresi ile deneme yaparak şifreyi kırmak üzerine modellenmiş programlar ile gerçekleşir. Bu saldırılardan korunmak için farklı bir admin kullanıcı adı ve şifresi kullanmalıyız. Yani anlayacağınız üzere bu saldırıların önüne geçmenin ilk adımı yine bizde bitiyor. Örneğin admin kullanıcı adı kullanan bir websitesi bu saldırılara maruz kaldığında, farklı bir kullanıcı adına sahip websitesine oranla daha güvensiz oluyor. Çünkü giriş biletinin yarısını zaten kötü niyetli kişiye vermiş oluyoruz.
Günümüz şartlarında artık kısa ve anlamlı bir kullanıcı adı oluşturmak bu saldırılara davetiye göndermekle eşdeğer. Brute Force saldırıları wp-login.php ve xml-rpc.php dosyaları üzerinden gerçekleşir. Bu dosyalara uzak bilgisayarlardan rastgele kombinasyonlarla şifreler ve kullanıcı adları göndererek (post ederek) içeriye sızmaya odaklanır. Burdan anlayacağınız üzere milyonlarca kombinasyon üretilecek ve hepsi teker teker denenecektir. Yani kısa süreli bir saldırı taktiği değildir.
Amaç, admin panelini ele geçirip websitesine sahip olmak, ona zararlı reklam virüsleri gömmek ve hacklink basmaktır. İşte ne kadar önlem alırsanız alın, günün birinde devrilmemek adına aşağıdaki kuralları kullanarak Cloudflare üzerinden Brute Force saldırılarına karşı sitenizi koruyun.
http.request.uri.path contains "/xmlrpc.php"
Cloudflare > Security > Security rules bölümünden Create Rules > Custom Rules bölümünden Expression Builder’e Edit diyerek yukardaki kuralı girin.

Resimde görüldüğü gibi bir Rule Name verin. Aksiyon olarak “Block” seçiyoruzki hiçbir şekilde erişilemesin. Mutlaka diğer kuralların üzerinde olsun yani Select order bölümünden “First” seçiyoruz. Eğer farklı kurallarda da üstte gözükmesi gerekiyorsa, sıralamayı bu kuralı üste alacak şekilde değiştirebiliriz.
Şimdi diğer kuralımızı ekleyelim. Bu kural ise wp-login.php ve wp-admin klasörünün erişimini diğer ülkelere kısıtlıyoruz.
(
http.request.uri.path contains "/wp-login.php"
or http.request.uri.path contains "/wp-admin"
)
and not ip.geoip.country in {"TR"}
Yukardaki gibi Create Rules > Custom Rules dedikten sonra açılan ekranda Builder’i edit yaparak bu kodu yapıştırabilirsiniz. Bir Rule Name verin, Aksiyon olarak Managed Challenge, Select order olarakta XMLRPC kuralımızın hemen altında olacak şekilde sıralandırabilirsiniz.
Eğer bir sabit ip kullanıyorsanız, bu kuralı biraz değiştirebiliriz. Sabit ip kullanmak, güvenlik katmanının en üst seviyelerinden biridir, nirvanasıdır.
(
http.request.uri.path contains "/wp-login.php"
or http.request.uri.path contains "/wp-admin"
)
and not ip.src eq 0.0.0.0
WordPress sitemize sadece bizim belirlediğimiz 0.0.0.0 ip adresinden wp-login.php ve wp-admin dizinine giriş yapılabileceğini bu kural sağlayacak. Genelde statik yani sabit iplerde bir sorun olmasa da aynı ip adresi farklı ülkelerde de kullanılabilir. Değişen bir internet ekosistemi var ve bu oldukça normaldir. Bu sistem oluşturulduğunda karasal bir bağlantı vardı, ama artık uygular, mobil baz istasyonları derken bağlantı çeşitleri çoğaldı, bu durumda ip istismar edilmemesi için biraz daha katılaştırabiliriz kuralı.
(
http.request.uri.path contains "/wp-login.php"
or http.request.uri.path contains "/wp-admin"
)
and not (
ip.geoip.country in {"TR"}
or ip.src eq 0.0.0.0
)
Şimdi hem ip adresi verdik, hem de ülke verdik. Yani 0.0.0.0 ip adresi ve Türkiye’den gelen ziyareti kabul et, diğerlerine Managed Challenged göster. Doğrulamayı geçen yine gelsin. Eğer sabit ipniz varsa Aksiyonu Block bile yapabilirsiniz. Böylece bu sayfaya gitmek isteyenler bloklanacak ve aşağıdaki bir hata sayfası ile karşılaşacaklardır.

Birden fazla ip adresi vermek mümkün müdür? tabi ki. Yani ev ve iş yeri intenetinizde sabit bir ip adresiniz var bu adresleri Cloudflare kuralı olarak girdiğinizde sadece bu iki adresten gelen ziyaretçiler geçebilir, kalan filtrelemeye takılacaktır.
(
http.request.uri.path contains "/wp-login.php"
or http.request.uri.path contains "/wp-admin"
)
and not ip.src in {0.0.0.0 1.1.1.1}
Yukardaki kural, 0.0.0.0 ve 1.1.1.1 ip adreslerine geçiş izni verir. Bir önceki kuralımızı buna da uygulayalım. Hem bu ip adresleri hem de Türkiye’den girişe izin versin.
(
http.request.uri.path contains "/wp-login.php"
or http.request.uri.path contains "/wp-admin"
)
and ip.geoip.country in {"TR"}
and not ip.src in {0.0.0.0 1.1.1.1}
Bu kod isteğimizi oldukça kolay bir şekilde yerine getirecek. Hatta şöyle biraz daha esnetelim diyelim ki hem Türkiye’de hem de İngiltere’de giriş serbest olsun. Editörümüz İngiltere’de yaşıyor ve ip adresi 1.1.1.1, biz ise Türkiye’deyiz ve ip adresimiz 0.0.0.0;
(
http.request.uri.path contains "/wp-login.php"
or http.request.uri.path contains "/wp-admin"
)
and ip.geoip.country in {"TR" "GB"}
and not ip.src in {0.0.0.0 1.1.1.1}
Umarım anlaşılmıştır. Admin şifrenizi ve kullanıcı adınızı değiştirip, Cloudflare kullanıyorsanız bu iki kuralı girdiğinizde kale kapısını ve duvarları oldukça sağlama almış olursunuz.
Not: Bu iki kuralda ücretsiz Cloudflare için sorunsuz çalışır.