WordPress WP-Login Güvenliği Nasıl Sağlanır?

WordPress WP-Login güvenliği; güçlü parola ve iki faktörlü doğrulama, giriş denemelerini sınırlama, xmlrpc.php'yi kapatma, wp-login.php'yi IP ile kısıtlama ve hatalı girişlerden anında haberdar olmakla sağlanır. En sağlam yol ise giriş sayfasını dış isteklere tamamen kapatmaktır. Bu rehberde her adımı uygulanabilir örneklerle anlatıyoruz.

Son güncelleme: Yazar: Birtıkta 8 dk okuma
Birtıkta WordPress yönetim paneli ana ekranı: siteler, yedekler, güncellemeler ve güvenlik taraması tek ekranda
Birtıkta paneli: tüm WordPress sitelerinizin güvenliği tek ekranda.
İçindekiler

wp-login.php neden bu kadar çok saldırı alıyor?

Her WordPress sitesinin giriş adresi aynıdır: /wp-login.php ve /wp-admin/. Botların sitenizi tanımasına gerek yoktur; adres listesini alıp dünyanın her yerinden aynı anda parola denerler. Buna kaba kuvvet (brute force) saldırısı denir.

  • Kullanıcı adı tahmini kolaydır. "admin" hâlâ en çok denenen addır. Yazar arşivi (/?author=1) de çoğu sitede kullanıcı adını ele verir.
  • xmlrpc.php tek istekte yüzlerce parola denemeye izin verir. system.multicall yöntemi, giriş sınırlama eklentilerinin saydığı istek sayısını bire indirir.
  • Her deneme sunucuyu yorar. Başarısız olsa bile her istek PHP'yi ve veritabanını çalıştırır. Yoğun bir saldırı siteyi yavaşlatabilir, hatta çökertebilir.

Saldırının başarılı olması için tek bir zayıf parola yeter. Bu yüzden wp-login güvenliği tek bir eklentiyle değil, birbirini tamamlayan katmanlarla sağlanır.

Temsili brute force saldırısı: WordPress giriş ekranı ve dakikalar içinde yüzlerce farklı IP'den gelen wp-login.php ve xmlrpc.php istekleri.

WordPress giriş sayfası güvenliği: hızlı kontrol listesi

Aşağıdaki on adım, küçük bir blogdan çok siteli bir ajansa kadar her WordPress kurulumuna uyar. Ayrıntıları sonraki bölümlerde bulacaksınız.

  1. Her yönetici hesabına uzun ve benzersiz bir parola verin.
  2. "admin" kullanıcı adını kaldırın.
  3. Yönetici ve editör hesaplarında iki faktörlü doğrulamayı açın.
  4. Giriş sayfasını yalnızca HTTPS üzerinden sunun.
  5. Giriş denemelerini sınırlayın ya da captcha ekleyin.
  6. Kullanmıyorsanız xmlrpc.php'yi kapatın.
  7. wp-login.php'yi IP ile kısıtlayın ya da dışarıya tamamen kapatın.
  8. Hatalı giriş denemeleri için anlık bildirim kurun.
  9. Israrla saldıran IP adreslerini engelleyin.
  10. Çekirdeği, eklentileri ve temaları güncel tutun, siteyi düzenli tarayın.
WordPress giriş güvenliği önlemleri karşılaştırması
ÖnlemNeye karşı korurZorlukBirtıkta'da
Güçlü parola ve 2FAParola tahmini, sızan parolalarKolay—
Giriş sınırlama, captchaOtomatik denemelerKolay—
Giriş adresini değiştirmeBot gürültüsüOrta—
xmlrpc.php'yi kapatmaToplu parola denemesiKolay✓ Tek tıkla
wp-login.php'yi kapatmaTüm dış giriş denemeleriOrta✓ Tek tıkla
Hatalı giriş bildirimiFark edilmeyen saldırılarOrta✓ Mobil, e-posta, Slack, WhatsApp
IP engellemeIsrarcı saldırganlarOrta✓ Tek tıkla
"admin" ve SSL kontrolüRiskli yapılandırmaKolay✓ Güvenlik taraması

Temel önlemler: parola, kullanıcı adı, 2FA ve HTTPS

Güçlü ve benzersiz parola

En az 14 karakterlik, başka hiçbir yerde kullanmadığınız bir parola seçin ve bir parola yöneticisinde saklayın. Sızan parola listeleri saldırganların ilk baktığı yerdir. Başka bir sitede kullandığınız parola, WordPress'iniz için de açık kapıdır.

"admin" kullanıcı adını kullanmayın

Kullanıcılar ekranından yeni bir yönetici oluşturun, onunla giriş yapın ve eski "admin" hesabını silerken içeriği yeni hesaba aktarın. Profildeki "Herkese açık görünen ad" alanını kullanıcı adından farklı seçin; böylece yazıların altında kullanıcı adınız görünmez. Birtıkta Güvenlik Taraması "admin" adlı kullanıcıyı ve SSL eksikliğini riskli yapılandırma olarak işaretler.

İki faktörlü doğrulama (2FA)

WordPress çekirdeğinde 2FA yoktur. Two Factor gibi bir eklentiyle yönetici hesaplarında, Google Authenticator benzeri bir uygulamanın ürettiği tek kullanımlık kodu zorunlu tutun. Yedek kodları parolanızdan ayrı bir yerde saklayın. Parolanız ele geçse bile ikinci adım olmadan giriş yapılamaz.

Girişi HTTPS üzerinden yapın

Giriş formu HTTPS olmadan çalışıyorsa parola ağda açık metin olarak gider. SSL sertifikasını kurduktan sonra wp-config.php dosyasına şu satırı ekleyerek yönetim panelini HTTPS'e zorlayın:

define( 'FORCE_SSL_ADMIN', true );

Sertifikanın süresi dolarsa ziyaretçiler tarayıcı uyarısı görür. Birtıkta Uptime Monitör SSL bitiş tarihini önceden haber verir.

wp-login.php gizleme, giriş sınırlama ve XML-RPC

Giriş adresini değiştirmek yeterli mi?

WPS Hide Login gibi eklentiler giriş sayfasını /wp-login.php yerine sizin seçtiğiniz bir adrese taşır ve otomatik bot trafiğini belirgin şekilde azaltır. Ancak bu bir gizlemedir, kilit değildir. Adres bir e-postada ya da tarayıcı geçmişinde ortaya çıkabilir; eklenti devre dışı kalırsa eski adres geri gelir. WordPress'in resmi el kitabı da bunun tek başına savunma olmaması gerektiğini vurgular.

Giriş denemelerini sınırlama ve captcha

Giriş sınırlama eklentileri belirli sayıda hatalı denemeden sonra IP adresini bir süre bekletir. Cloudflare Turnstile ya da reCAPTCHA gibi doğrulamalar da botları ayıklar. İkisi de PHP katmanında çalıştığı için çok yoğun bir saldırıda sunucu yine yorulur. Mümkünse sınırlamayı WAF ya da CDN gibi kenar katmanda yapın.

xmlrpc.php'yi kapatma

XML-RPC, WordPress'e uzaktan yazı göndermek için kullanılan eski bir arayüzdür; bugün bu işi çoğunlukla REST API yapar. Kullanmıyorsanız Apache 2.4 sunucuda kök dizindeki .htaccess dosyasına şu bloğu ekleyin:

# xmlrpc.php'ye dışarıdan tüm erişimi kapat (Apache 2.4)
<Files "xmlrpc.php">
    Require all denied
</Files>

Nginx kullanıyorsanız sunucu bloğuna eklenen location = /xmlrpc.php { deny all; } satırı aynı işi görür.

Dikkat: Jetpack'in bazı özellikleri ve eski mobil yayın uygulamaları xmlrpc.php'ye ihtiyaç duyar. Bunlardan birini kullanıyorsanız kapatmadan önce test edin.

wp-login.php'yi IP ile kısıtlama

Siteye her zaman aynı ofisten ya da sabit bir IP adresinden giriyorsanız giriş sayfasını yalnızca o adreslere açabilirsiniz:

# wp-login.php'ye yalnızca listelenen IP'lerden izin ver (Apache 2.4)
<Files "wp-login.php">
    Require ip 203.0.113.15
    Require ip 198.51.100.0/24
</Files>

Dikkat: IP'si değişen bağlantılarda (ev interneti, mobil hat) kendinizi dışarıda bırakırsınız. Site Cloudflare gibi bir proxy arkasındaysa sunucu ziyaretçinin değil proxy'nin IP'sini görür; mod_remoteip ayarlanmadan bu kural doğru çalışmaz. Değişiklikten önce .htaccess dosyasının yedeğini alın ve dosya yöneticisi ya da FTP erişiminizin açık olduğundan emin olun.

cPanel'de "Dizin Gizliliği" ile wp-admin klasörüne sunucu düzeyinde ikinci bir parola da ekleyebilirsiniz. Bu durumda ön yüzün kullandığı admin-ajax.php dosyasını kuralın dışında bırakın.

Daha basit yol: giriş sayfasını tamamen kapatmak

Yukarıdaki yöntemlerin ortak sorunu, saldırı isteklerinin hâlâ giriş formuna ulaşmasıdır. Sınırlama, captcha ve adres gizleme denemeleri yalnızca zorlaştırır. Daha güçlü yaklaşım kapıyı dışarıya tamamen kapatmak ve siteye başka, güvenli bir yoldan girmektir.

Bu yaklaşımda wp-login.php ve xmlrpc.php'ye gelen her dış istek 403 ile reddedilir. Apache'de engel .htaccess kuralıyla WordPress yüklenmeden uygulanır, böylece saldırı sunucuyu da yormaz. Çıkış yapma, oturum yenileme ve parolalı yazı formu çalışmaya devam eder.

Giriş sayfası kapalıyken wp-login.php ve xmlrpc.php istekleri 403 ile reddedilir; çıkış isteği ve panelden tek tıkla giriş geçer.

Hatalı giriş denemelerini anında telefonunuza bildirin

Kontrol listesindeki adımların çoğu önleyicidir; kimin, ne zaman denediğini ise ancak izleyerek öğrenirsiniz. Erken fark edilen bir saldırı, parola sızıntısı gibi daha büyük bir sorunun ilk işareti olabilir. Güvenlik eklentilerinin çoğu hatalı girişleri kaydeder, ancak bildirimleri genellikle e-postayla ve toplu gönderir.

İyi bir bildirimde en azından kullanıcı adı, IP adresi ve ülke yer almalıdır. Var olmayan kullanıcı adlarıyla gelen denemeler çoğunlukla bot taramasıdır. Gerçek bir yönetici adıyla gelen denemeler ise o hesabın hedeflendiğini gösterir.

Şüpheli IP adreslerini engelleyin

Aynı adresten ısrarla gelen denemeleri sunucu düzeyinde engellemek, o IP'nin sitenize ulaşmasını tamamen keser. Apache 2.4'te .htaccess dosyasına şu bloğu ekleyebilirsiniz:

# Belirli IP'leri sitenin tamamından engelle (Apache 2.4)
<RequireAll>
    Require all granted
    Require not ip 203.0.113.24
    Require not ip 198.51.100.7
</RequireAll>

Saldırılar çoğunlukla binlerce farklı IP'den gelir ve liste bir süre sonra yönetilemez hale gelir. Bu yüzden IP engellemeyi tek başına değil, giriş sayfasını kapatmanın tamamlayıcısı olarak düşünün.

Giriş sayfası kapalıyken siteye nasıl girilir?

Giriş formunu kapattığınızda akla gelen ilk soru budur. Çözüm, girişi tarayıcıdaki formdan alıp güvendiğiniz bir panele taşımaktır. Panel, siteye kısa ömürlü ve tek kullanımlık bir anahtar ürettirir; anahtar kullanılınca silinir. Parola hiçbir yere yazılmaz, kimseyle paylaşılmaz.

Böylece siteye girmek için parolayı hatırlamanız ya da bir yere not etmeniz gerekmez. Saldırganın deneyebileceği bir giriş formu da kalmaz.

Birden fazla sitede giriş güvenliğini tek ekrandan izleyin

On sitenin her birine ayrı eklenti kurup ayrı ayar yapmak, bir yerde mutlaka bir açık bırakır. Ajanslar ve çok siteli yöneticiler için asıl ihtiyaç, tüm sitelerin giriş denemelerini ve koruma durumunu tek bir listede görmektir.

Güncelleme, WAF ve düzenli tarama

Giriş sayfası ne kadar sağlam olursa olsun, güncel olmayan bir eklentideki açık saldırganı hiç giriş yapmadan içeri alabilir. Çekirdeği, eklentileri ve temaları düzenli güncelleyin; Birtıkta'da bunu tüm siteler için toplu yapabilirsiniz. Cloudflare gibi bir WAF, kötü trafiği sunucuya ulaşmadan durdurur. Haftalık güvenlik taraması da zararlı kodu ve riskli ayarları erken yakalar. Tek bir kapsamlı güvenlik eklentisi yeterlidir; aynı işi yapan iki eklenti birbiriyle çakışabilir.

Sıkça Sorulan Sorular

Hayır. Adresi değiştirmek otomatik bot trafiğini azaltır ama hedefli bir saldırıyı durdurmaz. Güçlü parola, iki faktörlü doğrulama, XML-RPC'yi kapatma ve hatalı giriş takibiyle birlikte kullanılmalıdır. En sağlam yöntem giriş sayfasını dış isteklere tamamen kapatmaktır.

Bir giriş sınırlama eklentisiyle ya da WAF/CDN kurallarıyla, belirli sayıda hatalı denemeden sonra IP adresi geçici olarak bekletilir. Birtıkta ise denemeleri saymak yerine wp-login.php ve xmlrpc.php'yi dış isteklere tamamen kapatır.

Çoğu site için hayır; güncel araçlar REST API kullanır. Jetpack'in bazı özellikleri ve eski uzaktan yayın uygulamaları xmlrpc.php'ye ihtiyaç duyar. Bunlardan birini kullanıyorsanız kapatmadan önce test edin.

Birtıkta Brute Force Koruması açıkken siteye Birtıkta web panelinden ya da mobil uygulamadan, tek kullanımlık ve kısa ömürlü bir anahtarla şifre girmeden girersiniz. Koruma açıkken şifremi unuttum ve kayıt formları da kapalıdır.

Birtıkta alarm sisteminde Hatalı Giriş Denemeleri alarmını açın. Bildirimde kullanıcı adı, IP adresi ve ülke yer alır. E-posta her pakette vardır; Slack, WhatsApp ve mobil uygulama bildirimi ücretli paketlerdedir. Aynı site için saatte en fazla bir alarm gönderilir.

Elle engellemek için Apache 2.4 sunucuda .htaccess dosyasına Require not ip kuralı eklenir. Birtıkta'da WP Login Girişleri ekranında ilgili satırdaki IP Yasakla butonuna basmanız yeterlidir. Yasak siz kaldırana kadar sürer.

WordPress çekirdeğinde iki faktörlü doğrulama yoktur. Two Factor gibi bir eklenti kurup Google Authenticator benzeri bir uygulamayla yönetici hesaplarında tek kullanımlık kodları etkinleştirirsiniz. Yedek kodları güvenli bir yerde saklayın.

WordPress giriş sayfanızı bugün kapatın.

wp-login.php ve xmlrpc.php'yi tek tıkla kapatın, hatalı girişleri telefonunuzdan izleyin.

Ücretsiz Deneme