Büyük bir devlet hastanesinin acil servis binasının güvenliğini planladığınızı düşünün. Ana giriş kapısına kurşun geçirmez çelik kapılar takıyorsunuz, x-ray cihazları yerleştiriyorsunuz, kapıya 4 tane zırhlı güvenlik görevlisi dikiyorsunuz. Dışarıdan bakan biri hastaneyi geçilmez bir kale zannediyor.
Fakat binanın arka bahçesinde, kazan dairesine inen ve ta 1980'lerden kalma eski bir havalandırma kapağının menteşeleri kırıktır ve kapak ardına kadar açıktır! Şehirdeki organize hırsız çeteleri bunu keşfeder. Ana kapıdaki bekçilere hiç görünmeden, o arka bodrum kapağından içeriye her gece çuvallarla girerler. Hastanenin jeneratör kablolarını keserler, tıbbi cihazların çiplerini sökerler ve içeriyi harabeye çevirirler. Sabah nöbete gelen hekim hastanenin elektriksiz kaldığını, monitörlerin çalışmadığını görür; ama kapıdaki bekçiler "Hocam ana kapıdan içeri tek bir şüpheli bile girmedi" diye yemin eder. İçeriyi yıkan şey ana kapı değil, arkada unutulan o köhne menfezdir.
WordPress ekosisteminde ve web altyapılarında her gün yüz binlerce web sitesinin sunucu işlemcisini eriten ve sistemi felç eden o meşhur köhne menfezin adı bellidir: xmlrpc.php.
Görünmeyen Kuşatma: "Sitem Sebepsizce Yavaşladı!"
Perşembe öğleden sonra bir haber sitesi veya kurumsal firma sahibi destek masasına öfkeyle bilet açar:
"Sizin sunucunuzda kesin bir problem var! Sitem dünden beri açılmıyor, tıklıyorum 15 saniyede dönüyor, bazen 504 Gateway Timeout veriyor. Google Analytics'e bakıyorum sitede sadece 30 kişi var! 30 kişiyle bir sunucu nasıl kilitlenir? Hani sizin sunucularınız son modeldi?"
Müşteri haklı gibi görünmektedir. Sitede insan trafiği yoktur, reklam kampanyası çıkılmamıştır.
Sistem yöneticisi SSH ile sunucuya girer ve htop komutunu çalıştırır. Karşılaştığı tablo bir felakettir:
- 16 çekirdekli sunucunun CPU kullanımı: %99.8!
- Load Average: 42.0!
- Sunucunun tüm PHP-FPM havuzları ve Apache worker'ları tıka basa dolmuştur.
Mühendis hemen canlı web sunucusu erişim loglarını (access_log) izlemeye (tail -f) alır. Ve ekranda saniyede yüzlerce satır boyunca tek bir hedefe vuran devasa bir mermi yağmuru akar:
198.51.100.12 - - [27/Feb/2026:14:12:01 +0300] "POST /xmlrpc.php HTTP/1.1" 200 4821 "-" "Mozilla/5.0..."
203.0.113.45 - - [27/Feb/2026:14:12:01 +0300] "POST /xmlrpc.php HTTP/1.1" 200 4821 "-" "Mozilla/5.0..."
192.0.2.88 - - [27/Feb/2026:14:12:01 +0300] "POST /xmlrpc.php HTTP/1.1" 200 4821 "-" "Mozilla/5.0..."Sitenin ana sayfasına kimse girmiyordur; fakat dünyanın dört bir yanındaki binlerce zombi bilgisayardan (botnet) sitenin xmlrpc.php dosyasına saniyede 300 adet HTTP POST isteği fırlatılmaktadır!
2005 Yılından Kalan Fosilleşmiş Protokol
Peki nedir bu xmlrpc.php ve neden tüm dünya bu dosyaya saldırmaktadır?
WordPress 2000'li yılların başında ilk tasarlandığında, akıllı telefonlar henüz yoktu. İnsanlar bilgisayarlarındaki masaüstü programlarından veya harici platformlardan WordPress'e uzaktan yazı gönderebilsin diye XML-RPC (XML Uzaktan Yordam Çağrısı) protokolü çekirdeğe entegre edildi.
Ancak günümüzde artık modern, güvenli ve şifreli WordPress REST API (/wp-json/) vardır. XML-RPC neredeyse tamamen işlevini yitirmiş, müzelik bir fosildir.
Fakat korsanlar için XML-RPC bir altın madenidir! Çünkü XML-RPC'nin içinde system.multicall adında korkunç bir fonksiyon barınır.
Normalde bir korsan sitenin giriş kapısına (/wp-login.php) geldiğinde tek bir şifre dener ve güvenlik eklentisi (Wordfence, iThemes) veya WAF onu 3 denemeden sonra banlar.
Oysa korsan xmlrpc.php dosyasına tek bir XML paketi göndererek der ki:
"Al sana tek bir HTTP isteği içinde 1.000 farklı kullanıcı adı ve şifre kombinasyonu! Bunların hepsini sırayla dene ve sonucu bana tek seferde dön!"
<methodCall>
<methodName>system.multicall</methodName>
<params>
<value><array><data>
<value><struct>
<member><name>methodName</name><value><string>wp.getUsersBlogs</string></value></member>
<member><name>params</name><value><array><data>
<value><string>admin</string></value>
<value><string>pass123456</string></value>
</data></array></value></member>
</struct></value>
<!-- Ve bunun gibi 1000 farklı şifre denemesi! -->
</data></array></value>
</params>
</methodCall>Sunucu o tek istek karşısında şoka girer. İşlemci çekirdeği veritabanına bağlanır, 1.000 kez MD5/bcrypt şifre çözme algoritmasını çalıştırır. Saniyede 300 istek gelmesi demek, sunucunun saniyede 300.000 şifre denemesiyle boğulması demektir! İşlemci alev alır, bellek tükenir ve meşru müşterilerin isteklerine yanıt verecek tek bir kaynak bile kalmaz.
Arka Menfezi Kaynakla Mühürlemek
Bu kabustan kurtulmanın çözümü, antibiyotik almak kadar kesin ve nettir: xmlrpc.php dosyasını kökünden mühürlemek!
Eğer Jetpack eklentisi veya eski bir masaüstü bloglama aracı kullanmıyorsanız, bu dosyanın sitenizde açık kalmasının hiçbir mantıklı gerekçesi yoktur:
- Nginx Seviyesinde Tam Engelleme (En Hızlı Yöntem):
Nginx sunucu bloklarınızın içine şu satırı ekleyin:location = /xmlrpc.php { deny all; access_log off; log_not_found off; return 444; # Bağlantıyı yanıt vermeden anında kapat! } - Apache
.htaccessile Kapıyı Kilitlemek:
.htaccessdosyanızın en tepesine şu kuralları yazın:# XML-RPC erişimini herkese kapat <Files xmlrpc.php> order deny,allow deny from all </Files> - Cloudflare WAF Kuralı (Trafiği Sunucuya Uğratmamak):
En mükemmel savunma, bu bot trafiğini daha veri merkezinize gelmeden Cloudflare'in kenar sunucularında durdurmaktır. Cloudflare paneline girin, bir WAF Kuralı (Custom Rule) oluşturun:- Field: URI Path
- Operator: contains
- Value:
/xmlrpc.php - Action: Block
Mühendis bu WAF kuralını devreye aldığı saniyede, sunucuya gelen mermi yağmuru kesilir. Cloudflare kapıda saniyede binlerce isteği hiç acımadan çöpe atar. Kök sunucunun CPU kullanımı %99'dan anında %2'ye düşer.
Müşteri sitesine tıklar; sayfa 0.3 saniyede açılır. Ve destek masasına mahcup bir teşekkür yazar: "Hocam ne yaptıysanız elinize sağlık, site uçuyor!"
Ön kapıya çelik zırh dikip arka pencereyi açık bırakmak güvenlik değil, cehalettir. Kullanmadığınız her eski protokol, sisteminizde unutulmuş bir arka kapıdır. O kapıları kaynakla mühürlemezseniz, korsanların bot orduları sunucunuzu eninde sonunda kendi maden ocağına çevirir.