WordPress siteleri, popülerlikleri nedeniyle çeşitli güvenlik tehditleriyle karşı karşıya kalır.
WordPress siteleri, popülerlikleri nedeniyle çeşitli güvenlik tehditleriyle karşı karşıya kalır. Bunların başında XML-RPC protokolü üzerinden gerçekleştirilen saldırılar gelir. XML-RPC, WordPress’in uzaktan yayınlama ve mobil uygulamalarla entegrasyon için kullandığı bir arayüzdür. Ancak, xmlrpc.php dosyasının sürekli erişilebilir olması, brute force ve DDoS saldırılarına kapı aralar. Bu saldırılar, sunucunuzun kaynaklarını tüketerek site performansını düşürür ve hatta tamamen erişilemez hale getirebilir. Sunucu seviyesinde engelleme, eklenti bağımlılığını ortadan kaldırarak en etkili ve performanslı çözümdür. Bu makalede, Apache ve Nginx sunucularda adım adım uygulanabilir yöntemleri inceleyeceğiz.
XML-RPC saldırıları genellikle pingback özelliği üzerinden tetiklenir. Saldırganlar, xmlrpc.php’ye binlerce istek göndererek sisteminizi zorlar. Bu istekler, wp_xmlrpc.php dosyasının sistem.xmlrpc.pingback.ping metodunu sömürür ve sahte pingback’ler oluşturur. Sonuçta, sunucunuzun CPU ve bellek kullanımı zirve yapar, veritabanı bağlantıları tükenir. Gerçek hayatta, dakikada on binlerce istek alan siteler dakikalar içinde yavaşlar veya çöker.
Bu tehditleri anlamak, doğru önlemi almanızı sağlar. Örneğin, bir saldırı sırasında log dosyalarınızda şu gibi girişler görürsünüz: POST /xmlrpc.php HTTP/1.1 ile tekrarlanan istekler. Sunucu seviyesinde bloklama, bu trafiği kaynağında keser ve WordPress çekirdeğine yük bindirmez. Bu yaklaşım, sitenizin hızını korurken güvenlik katmanını güçlendirir. Pratik olarak, önce erişim loglarınızı inceleyin ve XML-RPC trafiğini filtreleyin.
Apache tabanlı sunucularda en pratik yöntem, .htaccess dosyasını kullanmaktır. WordPress kök dizininizdeki .htaccess dosyasına aşağıdaki kuralları ekleyin. Bu, xmlrpc.php’ye tüm POST isteklerini reddeder ve yalnızca GET isteklerini (nadiren gerekli) geçirir.
# XML-RPC engelleme <Files xmlrpc.php> Order Allow,Deny Deny from all </Files>
Bu kod bloğu, dosyayı tamamen erişilemez kılar. Daha esnek bir yaklaşım için RewriteEngine kullanın:
RewriteEngine On RewriteRule ^xmlrpc\.php$ - [F,L]
Bu kural, xmlrpc.php’ye erişimi 403 Forbidden ile engeller. Uygulamadan sonra, sunucu yeniden başlatmaya gerek kalmadan değişiklikler aktif olur. Test etmek için tarayıcınızdan xmlrpc.php’ye erişin; hata almalısınız. Bu yöntem, paylaşımlı hostinglerde bile çalışır ve sunucu kaynaklarını %20-30 oranında korur. Eğer Jetpack gibi XML-RPC kullanan eklentileriniz varsa, önce alternatiflerini değerlendirin.
Apache’te ModSecurity kuruluysa, XML-RPC saldırılarını otomatik tespit edin. OWASP Core Rule Set’ini etkinleştirin ve özel kural ekleyin: SecRule REQUEST_URI “@streq xmlrpc.php” “id:1000,phase:1,block,msg:’XML-RPC Blocked'”. Bu, istekleri inceleyerek anormal trafiği keser. Kurulum sonrası, modsecurity.log’u izleyin. Pratik fayda: Brute force girişimlerini saniyeler içinde bloke eder, manuel müdahaleyi önler. Her ay logları analiz ederek kuralları güncelleyin.
Nginx kullanıcıları için, sunucu blokuna location direktifi ekleyin. Varsayılan site yapılandırma dosyanızda (genellikle /etc/nginx/sites-available/default) şu bloğu ekleyin:
location = /xmlrpc.php {
deny all;
access_log off;
log_not_found off;
}
Değişiklikleri kaydedin, nginx -t ile sintaksı kontrol edin ve nginx -s reload ile yeniden yükleyin. Bu, xmlrpc.php’yi tamamen yasaklar. Daha gelişmiş koruma için, rate limiting ekleyin: limit_req_zone $binary_remote_addr zone=xmlrpc:10m rate=1r/m; ve location bloğuna limit_req zone=xmlrpc burst=5; dahil edin. Bu, IP başına dakikada bir istekle sınırlar, DDoS’u önler.
Uygulamada, bu ayarlar yüksek trafikli sitelerde belirgindir. Örneğin, bir e-ticaret sitesinde XML-RPC trafiği %40 azalır, yanıt süreleri kısalır. Logları /var/log/nginx/access.log’da filtreleyerek etkinliği doğrulayın. Nginx’in hafif yapısı sayesinde performans kaybı minimumdur.
Sunucu seviyesinde iptables kullanarak XML-RPC port 80/443 trafiğini filtreleyin. Komut: iptables -A INPUT -p tcp –dport 80 -m string –string “xmlrpc” –algo bm -j DROP. Bu, XML-RPC içeren paketleri düşürür. Kalıcı hale getirmek için iptables-persistent yükleyin ve kuralları kaydedin: netfilter-persistent save. Saldırı sonrası, iptables -L -n ile listeyi kontrol edin. Bu yöntem, 10 Gbps+ saldırılarda bile etkilidir ve kernel seviyesinde çalışır.
XML-RPC bloklamasını Fail2Ban ile güçlendirin. Fail2Ban, logları tarar ve tekrarlanan saldırgan IP’leri banlar. /etc/fail2ban/jail.local’da [wordpress-xmlrpc] sekmesini etkinleştirin ve filter.d/wordpress-xmlrpc.conf’a regex ekleyin: ^<HOST> .*POST.*xmlrpc\.php. Jail’i yeniden başlatın: systemctl restart fail2ban. Bu, otomatik banlama sağlar; varsayılan 10 dakika ban süresi uygundur.
Ayrıca, sunucu firewall’unuzu (UFW veya firewalld) yapılandırın ve yalnızca gerekli portları açın. Düzenli log analizi yapın: Logwatch veya GoAccess kullanın. Bu katmanlar, sıfır güven modelini benimser ve çoklu savunma sağlar. Sonuçta, siteniz saldırılardan etkilenmeden çalışır.
Sunumcu seviyesinde XML-RPC engelleme, WordPress güvenliğinizi temelinden güçlendirir. Yukarıdaki adımları uygulayarak, kaynak israfını önleyin ve performansınızı optimize edin. Düzenli güncellemeler ve izleme ile sitenizi proaktif koruyun; bu, uzun vadeli bir güvenlik stratejisidir.