WP güvenliği: wp-admin güvenliği | Giriş adresini değiştirme, giriş sınırlama, XML-RPC

wp-admin güvenliği, WordPress yönetim paneline ve giriş ekranına gelen kaba kuvvet saldırılarını engelleyen ayarlardır. Birden fazla WordPress sitesi çalıştıran Nginx + Apache yapısındaki bir sunucunun erişim günlüklerini incelediğimde, giriş adresini değiştirdikten sonra da xmlrpc.php'ye otomatik istekler gelmeye devam ediyordu; bu yüzden sunucu düzeyinde hız sınırlamayı da devreye aldım.
1️⃣ wp-admin ve wp-login.php neden saldırıya uğrar
WordPress yönetim adresinin herkesçe bilinmesi bir zayıflıktır, ancak güvenliği güçlendirerek bunu telafi edebilirsiniz. Her WordPress sitesi aynı /wp-admin/ ve [wp-login.php] adreslerini kullanır; oturumunuz kapalıyken /wp-admin/ adresini açarsanız [wp-login.php] giriş ekranına yönlendirilirsiniz.
Saldırılar, bu giriş ekranına kullanıcı adı ve şifreyi tekrar tekrar deneyen kaba kuvvet yöntemiyle gelir. Bu yüzden wp-admin güvenliğinde adresi gizlemekten önce giriş denemelerini durdurmak gelir.
2️⃣ Giriş adresini değiştirmenin etkisi ve sınırları
Giriş adresini bir güvenlik eklentisiyle değiştirdiğinizde varsayılan [wp-login.php] 404 hatası döndürür; böylece varsayılan adresi zorlayan otomatik saldırılar giriş ekranına bile ulaşamaz. Yeni adresi yönetici hesabı olan herkese ayrıca bildirmeniz gerekir.
Bu yöntem az emek ister, ancak yeni adresi unutursanız yönetim paneline giremezsiniz ve eklentiyi devre dışı bırakmak için FTP ya da dosya yöneticisinden eklenti klasörünün adını değiştirmeniz gerekir. Siteyi birkaç kişi yönetiyorsa adresi tek bir yerde kayıt altında tutmak doğru olur.
3️⃣ Giriş denemelerini sınırlama ve iki faktörlü kimlik doğrulama
Giriş adresini değiştirseniz bile yeni adres öğrenilirse şifreyi tahmin etme denemeleri sürer. WordPress çekirdeğinde başarısız giriş sayısı için bir sınır yoktur; yanlış şifreyi kaç kez girerseniz girin aynı giriş ekranı yeniden açılır.
Giriş denemesi sınırlama eklentisi belirlenen sayıyı aşan IP'yi bir süre engeller; iki faktörlü kimlik doğrulama ise şifre doğru olsa bile telefondaki doğrulama uygulamasından bir kod daha ister. İki faktörlü doğrulamayı açarken telefonunuzu kaybetmeniz hâlinde kullanacağınız yedek kodları da saklayın.
4️⃣ xmlrpc.php'yi kapatma
[xmlrpc.php], giriş ekranından geçmeden kullanıcı adı ve şifre alan ikinci bir kapıdır; [system.multicall] yöntemiyle tek bir istekte birden fazla şifre denenebilir.
Birden fazla WordPress sitesi çalıştıran Nginx + Apache yapısındaki bir sunucunun erişim günlüklerinde, 13 Ekim'de 00:00 ile 09:50 arasında [xmlrpc.php]'ye 2.250 POST isteği geldi. İstekler 22 IP adresinden geliyordu ve User-Agent değerleri Jetpack ile WordPress.com'u taklit ediyordu.
WordPress mobil uygulamasını ya da Jetpack'i kullanmıyorsanız Nginx ayarlarında [xmlrpc.php] isteklerini engelleyin veya güvenlik eklentisinin XML-RPC'yi kapatma ayarını kullanın.
# server bloğu içinde — xmlrpc.php isteklerini reddet
location = /xmlrpc.php {
deny all;
}Bu ayarı eklediğinizde [xmlrpc.php]'ye gelen GET ve POST isteklerinin tamamı PHP'ye ulaşmadan 403 ile biter. Güvenlik eklentisinin XML-RPC'yi kapatma ayarı yalnızca giriş gerektiren istekleri reddeder ve dosya yanıt vermeyi sürdürür; PHP çalıştırmalarını da azaltmak istiyorsanız Nginx'te engellemek daha doğrudur.
5️⃣ Sunucuda engelleme: yönetici erişimini IP ile sınırlama ve hız sınırlama
Siteyi yalnızca sabit bir IP'den yönetiyorsanız en kesin yöntem, Nginx'te [wp-login.php] ve /wp-admin/ erişimine yalnızca o IP'ye izin vermektir. Ev ya da ofis IP'sinin sık değiştiği ortamlara uygun değildir.
/wp-admin/ klasörünün tamamını kapatmak yeterli gibi görünse de ziyaretçi tarafındaki arama ya da sepet gibi özellikler çoğu zaman [admin-ajax.php]'ye istek gönderdiği için bu dosyayı açık bırakmanız gerekir.
# server bloğu içinde — PHP işleyen location bloğunun üstüne
location = /wp-login.php {
allow 203.0.113.10; # Yönetim için kullandığınız sabit IP
deny all;
# Bunun altına PHP işleyen location ayarlarını aynen taşıyın
}[wp-login.php] belirtilen IP dışındaki bir yerden açıldığında 403 döner, belirtilen IP'den ise giriş ekranı açılır. Giriş ekranının normal çalışması için location içine sitenin PHP işleme ayarlarını (fastcgi_pass vb.) aynen taşımanız gerekir.
IP'nizi sabitleyemiyorsanız oturum açmamış ziyaretçilerin PHP isteklerine hız sınırı koyabilirsiniz; otomatik isteklerin sunucu kaynaklarını kaplamaması için sınırı dakikada 30 istek olarak ayarladığım süreç, php-fpm max_children uyarısı yazısında anlatılıyor.
# http bloğu — yalnızca giriş çerezi olmayan istekleri IP başına say
map $http_cookie $php_anon_key {
default $binary_remote_addr;
"~*wordpress_logged_in" "";
}
limit_req_zone $php_anon_key zone=php_anon:10m rate=30r/m;
# PHP işleyen location içinde
limit_req zone=php_anon burst=60 nodelay;
limit_req_status 429;Oturum açmamış tek bir IP art arda PHP isteği gönderdiğinde 61. isteğe kadar işlenir, sonrasında 429 döner; giriş çerezi olan istekler sayılmaz. Sayfa önbelleği PHP'den geçmeden yanıt veren bir yapıdaysa sıradan ziyaretçilerin sayfa gezintisi bu sınıra takılmaz.
Güvenlik eklentisi
En iyi 5 WordPress güvenlik eklentisi
Öne çıkan beş güvenlik eklentisi bir karşılaştırma tablosunda.
Giriş
Unutulan yönetici şifresini sıfırlama
Profilden şifre değiştirme ve unuttuğunuzda sıfırlama yöntemleri.
Araçlar
Rastgele şifre oluşturucu
Büyük harf, küçük harf, rakam ve özel karakterleri birleştirerek 6–30 karakterlik şifre üreten bir araç.
ℹ️ Satış ortaklığı bildirimi
Bu sitenin içeriklerinde satış ortaklığı bağlantıları bulunur. Bir ziyaretçi bu bağlantılar üzerinden ürün veya hizmet satın alırsa bu site satıcıdan komisyon alır. Bu süreçte alıcının ödediği tutar (kampanya indirimlerinde tutar düşer↓) artmaz. Yayımlanan fiyat, indirim ve stok bilgileri yazının yazıldığı zamana aittir ve gerçek durumdan farklı olabilir; bu yüzden satın almadan önce son bilgiyi satıcıdan kontrol etmenizi rica ederiz. Ürünler kendi ölçütlerimize göre seçilir ve değerlendirilir; komisyon alınıp alınmaması tanıtım sırasını veya değerlendirme içeriğini etkilemez.