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

Satış ortaklığı bildirimi v3.1
Satış ortaklığı bildirimi v3.2 (yalnızca mobil)

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.

WordPress girişinin iki kapısı
Tarayıcıyla erişim
/wp-admin/
Oturum kapalıysa giriş ekranına yönlendirme (302)
wp-login.php
Giriş ekranı · kullanıcı adı ve şifre girilir
Uygulamalar · otomatik istekler
xmlrpc.php
Giriş ekranı olmadan kullanıcı adı ve şifre POST isteğiyle gönderilir
Giriş ekranından geçmez
system.multicall ile tek istekte birden çok şifre denenir · giriş adresini değiştirseniz de bu adres aynı kalır
Aynı kullanıcı adı ve şifre kontrolü
İki kapı da hesabı WordPress'in aynı kimlik doğrulama işleviyle kontrol eder
Kaba kuvvet saldırıları iki kapıdan hangisi açıksa oradan girer. Giriş adresini değiştirmek yalnızca üstteki kapıya uygulanır; bu yüzden xmlrpc.php'yi ayrıca kapatır ya da istek sayısını sınırlarsınız.

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.

🧭 WordPress giriş kapıları
Açıklama diyagramı
⬜ Eklenti yok
🛡️ Hide My WP
🚪 Giriş kapısı
/wp-login.php · /wp-admin/Her WordPress'te aynı adres
Giriş ekranı404
/newloginDeğiştirilen adres · yalnızca yöneticiler bilir
Giriş ekranı
POST /xmlrpc.phpGiriş ekranı olmadan şifreyi kontrol eder
Şifre kontrolüne yanıt verirDevre dışı 405
Test sitesinde ölçüldü · oturum kapalıyken istekler
→
🤖 Otomatik saldırılar
Bilinen bir adreste şifre denenebilen kapılar
2
1
Yok
Eklenti yoksa şifreler iki yerde denenebilir: her WordPress sitesinde aynı olan [wp-login.php] ve giriş ekranı olmadan şifreyi kontrol eden [xmlrpc.php].
Giriş adresini değiştirince [wp-login.php] ve /wp-admin/ 404 döndürür, ancak [xmlrpc.php] kullanıcı adı ve şifrenin doğru olup olmadığını yanıtlamaya devam eder.
XML-RPC'yi de kapatırsanız [xmlrpc.php]'ye gelen giriş istekleri XML-RPC hizmetinin devre dışı olduğu yanıtıyla biter ve bilinen bir adreste şifre denenemez.

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ş denemelerini sınırlama ve iki faktörlü kimlik doğrulama
Açıklama diyagramı
⬜ Eklenti yok
🛡️ Güvenlik eklentisi
🔑 Aynı IP'den giriş
1.Yanlış şifre
Yine giriş ekranı3 hak kaldı
2.Yanlış şifre
Yine giriş ekranı2 hak kaldı
3.Yanlış şifre
Yine giriş ekranı1 hak kaldı
4.Yanlış şifre
Yine giriş ekranı20 dk engellendi
5.Engelleme sürüyorYanlış şifreGiriş · XML-RPC istekleri
Yine giriş ekranıxmlrpc.php de 403
Şifre girişiDoğru şifre
Kod giriş ekranı
Authentication CodeDoğrulama uygulamasından 6 hane · 30 saniyede bir değişir
Yönetim paneli
Yalnızca şifreyi ele geçiren saldırganKodu bilmiyor
Kod ekranında takılır
Test sitesinde ölçüldü · aynı IP'den art arda istekler
→
🤖 Otomatik saldırılar
Şifre denemeye devam edilebilir mi?
Sınır yok
4. denemede engellenir
Kodda takılır
Eklenti yoksa aynı IP'den altı kez yanlış şifre girseniz bile her seferinde aynı giriş ekranı yeniden açılır.
Giriş denemesi sınırını açtığınızda her yanlışta kalan hak sayısı gösterilir ve 4. yanlışta o IP 20 dakika boyunca giriş yapamaz. Engelleme sürerken xmlrpc.php istekleri de 403 ile biter.
İki faktörlü kimlik doğrulamayı açtığınızda şifre doğru olsa bile yönetim paneli, doğrulama uygulamasının 30 saniyede bir yeniden ürettiği 6 haneli [Authentication Code] girilmeden açılmaz.

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.

ℹ️ 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.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

İnsan olduğunuzu kanıtlayın: 3   +   7   =