WordPress Güvenlik
2025
WordPress Güvenlik 2025: WAF, Brute Force Koruma ve Yedekleme (Tam Rehber)
2025’te WordPress güvenliği; WAF (Web Application Firewall) katmanı,
brute force girişimlerine karşı çok katmanlı savunma (2FA, rate limit, IP/ülke engeli),
yedekleme & felaket kurtarma (3-2-1 stratejisi) ve sertleştirme (hardening)
politikalarının birleşimidir. Bu rehber; wp-config sertleştirmeden, XML-RPC/REST kontrollerine,
dosya izinlerinden güvenlik başlıklarına, malware tarama ve
olay kayıtları (audit log)na kadar uçtan uca bir kitapçık sunar.
- Sıfırdan Kalkan: 30-60-90 gün güvenlik planı ile ölçülebilir iyileştirme.
- Katmanlı Savunma: WAF + 2FA + rate limit + IP/ülke kuralı + güvenlik başlıkları.
- Geri Dönüş Garantisi: 3-2-1 yedekleme ve felaket kurtarma tatbikatı.
1) Tehdit Modeli & Öncelikler (2025)
Tipik WordPress saldırı yüzeyi; giriş denemeleri, eklenti/tema zafiyetleri, yanlış izinler, zayıf yedekleme ve sunucu yanlış yapılandırmalarıdır.
- En Yüksek Risk: Zafiyet barındıran eklentiler + zayıf parolalar.
- İş Etkisi Yüksek: Yedekleme eksikliği → veri kaybı, kesinti.
- Engellemesi Kolay: 2FA, rate limit, dosya izni ve güncelleme disiplini.
2) WAF Mimarisi: Edge + Uygulama Katmanı
Edge WAF (CDN katmanı) ve uygulama içi WAF (WordPress/uygulama eklentisi) birlikte çalışmalıdır.
Kural Grubu | Örnek | Not |
---|---|---|
IP/Ülke | Belirli ülke engeli | Risk profiline göre |
Rate Limit | /wp-login.php → 5/dak | Brute force’u kırar |
Bot İmzaları | Bilinen tarayıcı dışı | False-positive’lere dikkat |
SQLi/XSS | OWASP kural seti | Kayıt + engelle |
Örnek Edge WAF Oranı (psödo)
/wp-login.php: limit 5 requests / minute / IP → 15 dk blok /xmlrpc.php: block all (veya yalnızca whitelisted IP)
3) Brute Force Koruma: 2FA, Rate Limit, IP/Ülke Kuralları
Önerilen Katmanlar
- 2FA: TOTP tabanlı (ör. Authenticator uygulamaları).
- Rate Limit: /wp-login.php ve /xmlrpc.php için.
- reCAPTCHA/Turnstile: Form ve login koruması.
- IP/Ülke: Gereksiz coğrafyaları engelleyin/score’a alın.
- Lockout: 5 hatalı denemede 15–30 dk kilit.
.htaccess ile Basit Lockdown (Apache)
Require all denied Require ip 1.2.3.4 # Ofis IP
4) wp-config Sertleştirme
Kritik Sabitler
define('DISALLOW_FILE_EDIT', true); define('WP_POST_REVISIONS', 10); define('AUTOSAVE_INTERVAL', 120); define('FORCE_SSL_ADMIN', true); define('WP_MEMORY_LIMIT', '256M'); // performans/güvenlik stabilitesi // Salt & Keys: https://api.wordpress.org/secret-key/1.1/salt/
Veritabanı
- Güçlü parola + ayrı DB kullanıcı yetkisi.
- Yedeklemeler şifreli ve erişim kısıtlı depoda.
5) Dosya İzinleri, PHP Yürütme Kontrolü
wp-config.php
: 400/440- Dosyalar: 644 • Dizinler: 755
/wp-content/uploads
içinde PHP yürütmeyi kapatın.
Apache (uploads’ta PHP kapatma)
# /wp-content/uploads/.htaccessDeny from all
NGINX (uploads’ta PHP kapatma)
location ~* /wp-content/uploads/.*\.php$ { deny all; }
6) XML-RPC & REST API Güvenliği
Öneriler
- XML-RPC’yi kapatın veya IP’ye göre sınırlandırın.
- REST API’den users uç noktasını anonim listelemeye kapatın.
- API anahtarlarını .env veya wp-config dışında tutmayın; sürüme sokmayın.
Apache’de XML-RPC Kapatma
Require all denied
7) Giriş Sayfası Güvenliği (URL, Captcha, Lockout)
- Giriş URL’sini değiştirmek tek başına yeterli değildir; 2FA + WAF şarttır.
- reCAPTCHA/Turnstile ekleyin; bot trafiğini azaltır.
- Lockout politikası: 5 deneme → 15–30 dk kilit.
Nginx ile Basit Rate Limit (örnek)
limit_req_zone $binary_remote_addr zone=logins:10m rate=5r/m; location = /wp-login.php { limit_req zone=logins burst=10 nodelay; include fastcgi_params; # ... }
8) Roller, Ayrıcalıklar ve Parola Hijyeni
İlkeler
- En az ayrıcalık: Herkese gerekli en düşük rol.
- Parola politikası: 12+ karakter; yöneticiler için 2FA zorunlu.
- Hesap yaşam döngüsü: Çalışan ayrılışında derhal iptal.
- API anahtarları: Dönüşümlü ve kayıtlı (audit).
WP-CLI Hızlı Kontrol
wp user list --role=administrator wp plugin update --all wp core update
9) Güncellemeler: Çekirdek, Eklenti, Tema
- Önce staging → yedek → güncelle → smoke test → canlıya al.
- Kritik güvenlik güncellemelerini otomatikleştirin.
- Artık kullanılmayan eklentileri kaldırın (deaktif etmek yetmez).
composer.json (örnek, headless/modern projeler)
{ "require": { "php": "^8.2", "wpackagist-plugin/secure-plugin": "^1.0" } }
10) Yedekleme: 3-2-1 Stratejisi & Felaket Kurtarma
3-2-1 Kuralı
- 3 kopya (canlı + yerel + bulut)
- 2 farklı ortam/medya
- 1 offsite ve erişim kısıtlı
WP-CLI ile Hızlı Yedek (örnek)
wp db export /backups/db-$(date +%F).sql tar -czf /backups/wp-$(date +%F).tar.gz /var/www/html
Kurtarma Tatbikatı Kontrol Listesi
[ ] Yedek şifreli mi? [ ] Erişim rolleri kısıtlı mı? [ ] Yedekten staging ayağa kalkıyor mu? [ ] RTO: < 2 saat RPO: < 24 saat
11) Malware Taraması & Dosya Bütünlüğü
- Çekirdek dosya bütünlüğü: wp-admin/wp-includes hash kontrolü.
- Şüpheli imzalar: eval(base64_decode), gzinflate, str_rot13 vb.
- Planlı taramalar + uyarı mekanizması (e-posta/Slack).
WP-CLI ile Çekirdek Doğrulama
wp core verify-checksums
12) Audit Log & Olay Yanıtı
Kaydedilecek Olaylar
- Giriş denemeleri, rol değişimleri, eklenti/tema değişiklikleri.
- Dosya/dizin oluşturma-silme, ayar değişiklikleri.
- API anahtar üretimi/kullanımı.
Olay Yanıtı Playbook
1) İzolasyon → 2) Log & kanıt → 3) Kök neden → 4) Temiz kurulum 5) Şifre/anahtar döndürme → 6) Yama → 7) Rapor
13) Güvenlik Başlıkları: HSTS, CSP, X-Frame-Options
NGINX (örnek)
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always; add_header X-Content-Type-Options "nosniff" always; add_header X-Frame-Options "SAMEORIGIN" always; add_header Referrer-Policy "strict-origin-when-cross-origin" always; # CSP (whitelist'i sitenize göre özelleştirin) add_header Content-Security-Policy "default-src 'self' https: data: 'unsafe-inline' 'unsafe-eval'" always;
Apache (örnek)
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" Header always set X-Content-Type-Options "nosniff" Header always set X-Frame-Options "SAMEORIGIN" Header always set Referrer-Policy "strict-origin-when-cross-origin"
14) TLS, HSTS Preload & DNS Güvenliği
Öneriler
- TLS 1.2+ (tercihen 1.3) zorunlu.
- HSTS preload için kök alan adı gerekliliklerini sağlayın.
- DNSSEC + CAA kayıtlarıyla sahtekarlığı azaltın.
OpenSSL (test)
openssl s_client -connect site.com:443 -tls1_3
15) Sunucu Sertleştirme: NGINX/Apache, PHP, DB
- PHP 8.2/8.3, yalnızca gerekli modüller.
- disable_functions: exec, shell_exec, system, passthru (uygulama ihtiyacına göre).
- DB erişimi private ağ üzerinden; harici erişim kapalı.
- Fail2ban (veya eşdeğer) ile SSH/WP login denemelerini sınırlayın.
Fail2ban Filtresi (örnek)
[wordpress] enabled = true port = http,https filter = wordpress-auth logpath = /var/log/nginx/access.log maxretry = 5
16) Spam & Bot Azaltma (Form/Spam, Comments)
Taktikler
- Modern Captcha (Turnstile/reCAPTCHA v3) + gizli alan + zaman damgası.
- Yorumlar: manuel onay, link sayısı limiti, eski yazılarda yorum kapatma.
- Form endpoint’lerine rate limit.
reCAPTCHA (psödo kod)
if (recaptcha_score < 0.5) { block(); } else { proceed(); }
17) Güvenlik x Performans: CWV Etkisi
- WAF → caching ile doğru kurgulanırsa TTFB düşer.
- Captcha ve scriptler → deferred/asenkron yüklenmeli.
- Audit log ve taramalar → düşük yoğunluklu cron zamanlarına alın.
18) 30-60-90 Gün Güvenlik Planı
- WAF kurulumu, 2FA, rate limit
- wp-config, izinler, XML-RPC/REST ayarları
- Güvenlik başlıkları + TLS/HSTS
- Audit log + alarm, malware tarama planı
- Otomatik yedek + offsite senkron
- Staging güncelleme rutini
- RTO/RPO testleri, kurtarma tatbikatı
- WAF kural optimizasyonu, ülke/IP kısıtları
- Güvenlik–performans dengelemesi
19) Yaygın Hatalar & Çözümler
Eklenti tek başına yeterli değildir.
Hata/kesinti döngüsü.
Arka kapı için en kolay yol.
Brute force’u davet eder.
20) Sık Sorulan Sorular