Z E Y M E D Y A

Loading...

Zeymedya; İstanbul merkezli reklam ajansı. SEO, Google Ads, Google Maps ve sosyal medya yönetimiyle ölçülebilir büyüme sağlarız.

Blog
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.

2FA Etkisi
~%99 brute force engeli
WAF Azaltımı
~%90 kötü niyetli istek
RPO Hedefi
<24s yedek

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)
            

Not: WAF’i “log only” ile başlatıp 24–48 saat izleyin; false-positive’leri temizledikten sonra “block”a alın.

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

            

Lockout
15–30 dk
Deneme
≤5
2FA
Tüm admin

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.

Not: Tablo ön eki (prefix) değiştirmek tek başına güvenlik sağlamaz; asıl koruma 2FA, WAF ve güncellemedir.

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/.htaccess

  Deny from all

            

NGINX (uploads’ta PHP kapatma)

location ~* /wp-content/uploads/.*\.php$ { deny all; }
            

Config İzni
400
Dosya/Dizin
644/755
PHP Uploads
0 çalıştırma

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

            

Not: Bazı eklentiler XML-RPC kullanır; kapatmadan önce ihtiyacı kontrol edin.

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;
  # ...
}
            

Deneme
≤5
Kilit
30 dk
2FA Kapsam
%100 admin/editor

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
            

İpucu: Editörlere gereksiz “eklenti kurma” yetkisi vermeyin; staging’de test edin.

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"
  }
}
            

Staging
Zorunlu
Güncelleme Penc.
7 günde 1
Artık Eklenti
0 hedef

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
            

RTO
<2 sa.
RPO
<24 sa.
Test
90 günde 1

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
            

İpucu: /uploads içine .php, .phtml dosyaları sızmışsa hızlıca kaldırın ve yükleme formlarını doğrulayın.

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
            

MTTD
<60 dk
MTTR
<120 dk
Tatbikat
/yıl 2+

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"

            

Uyarı: CSP çok hassastır; öncelikle Report-Only moduyla test edin.

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
            

TLS
1.3
HSTS
≥ 31536000
DNSSEC
Aktif

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
            

İpucu: Yönetim panelini belirli IP’lerle sınırlandırmak saldırı yüzeyini dramatik düşürür.

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(); }
            

Spam
-%90
Yanlış Pozitif
<%2
Yorum Onayı
%100 manuel

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.

LCP
<2.5s
INP
<200ms
TTFB
<0.8s

18) 30-60-90 Gün Güvenlik Planı

Gün 0–30

Temel Sertleştirme

  • WAF kurulumu, 2FA, rate limit
  • wp-config, izinler, XML-RPC/REST ayarları
  • Güvenlik başlıkları + TLS/HSTS

Gün 31–60

Gözlem & Otomasyon

  • Audit log + alarm, malware tarama planı
  • Otomatik yedek + offsite senkron
  • Staging güncelleme rutini

Gün 61–90

Felaket Tatbikatı & İnce Ayar

  • RTO/RPO testleri, kurtarma tatbikatı
  • WAF kural optimizasyonu, ülke/IP kısıtları
  • Güvenlik–performans dengelemesi

19) Yaygın Hatalar & Çözümler

Sadece Eklentiye Güvenmek

Eklenti tek başına yeterli değildir.

Çözüm: WAF + sunucu + süreç tabanlı yaklaşım.

Yedeksiz Güncelleme

Hata/kesinti döngüsü.

Çözüm: Önce staging, sonra canlı.

Uploads’ta PHP

Arka kapı için en kolay yol.

Çözüm: PHP yürütmeyi kapat, taramayı otomatikleştir.

2FA Eksikliği

Brute force’u davet eder.

Çözüm: Tüm yönetici/ed. rolleri için zorunlu.

20) Sık Sorulan Sorular


Hayır. Güvenlik tarafından desteklenmeyen “security by obscurity” yaklaşımıdır; 2FA, WAF ve rate limit şarttır.


Değiştirmek tek başına güvenlik sağlamaz; asıl kazanımlar 2FA, WAF, güncellemeler ve izin politikalarıdır.


İçerik/düzen değişim sıklığına göre; çoğu site için günlük dosya+DB, yüksek trafik için saatlik DB önerilir.



Leave A Comment