جلوگیری از حملات XML-RPC در سرورهای cPanel با CSF
اگر با وردپرس سر و کار داشته باشی، احتمالاً اسم XML-RPC به گوشت خورده.
یه پروتکل قدیمی ولی هنوز پرکاربرد که با XML روی HTTP کار میکنه و اومده بود زندگی رو سادهتر کنه:
پست گذاشتن با کلاینتهای وبلاگ، اتصال به اپهای مختلف، تعامل با سرویسهای جانبی و از این چیزها.
مشکل از جایی شروع میشه که همین قابلیت «راحت ارتباط گرفتن» میتونه تبدیل بشه به یه نقطه جذاب برای اتک 😐
داستان از کجا شروع شد؟
توی چندوقت گذشته، روی سرورهای سیپنلی دیدم که:
- لود سرور بیدلیل میره بالا و پیک میزنه
- LiteSpeed / Apache / PHP-FPM داره زوزه میکشه
- لاگها پر از request به
xmlrpc.phpوwp-login.phpهستن
یه نگاه دقیقتر که انداختیم، دیدم با یه brute force طرفیم.
خیلی حجم اتک بالایی نبود ولی به مقداری بود که منابع سرور رو درگیر کنه و باعث افت کیفیت بشه.
XML-RPC دقیقاً چرا خطرناکه؟
بهصورت خلاصه:
xmlrpc.phpبه صورت پیشفرض روی اکثر وردپرسها فعاله- احراز هویت رو هندل میکنه
- و مهمتر از همه: اجازه میده با یه request چندتا لاگین تست بشه همین باعث میشه برای brute force خیلی وسوسهکننده باشه.
راهحل من چی بود؟ CSF بهجای پلاگین های وردپرسی
میتونستم برم سراغ پلاگینهای وردپرسی، ولی تجربه بهم ثابت کرده:
هرچی کمتر از داخل خود وردپرس جلوی اتک رو بگیری، بهتر.
اینجا بود که رفتم سراغ CSF (ConfigServer Firewall)
یه فایروال دوستداشتنی برای سرورهای لینوکسی که با LFD لاگها رو میخونه و واکنش نشون میده.
ایده کلی چیه؟
خیلی ساده:
- لاگهای Apache یا LiteSpeed رو میخونیم
- اگر یه IP بیشتر از حد مجاز به
wp-login.phpیاxmlrpc.phpدرخواست داد - CSF خودکار بلاکش میکنه 🚫
قدم اول: تنظیم لاگها
به CSF میگیم لاگهای Apache رو بررسی کنه:
nano /etc/csf/csf.confاین خط رو پیدا میکنیم:
vCUSTOM1_LOG = "/var/log/customlog"و به این تغییرش میدیم:
vCUSTOM1_LOG = "/usr/local/apache/domlogs/*/*"قدم دوم: نوشتن regex برای تشخیص اتک
حالا میریم سراغ مغز ماجرا:
nano /usr/local/csf/bin/regex.custom.pmبلاک کردن حمله به wp-login
# Block if more than 15 requests in 3600s
if (($globlogs{CUSTOM1_LOG}{$lgfile}) and ($line =~ /(\S+).*] "\w*(?:GET|POST) \/wp-login\.php.*" /)) {
return ("WP Login Attack",$1,"WPLOGIN","15","80,443","1");
}بلاک کردن حمله به XML-RPC
Block if more than 15 requests in 3600s
if (($globlogs{CUSTOM1_LOG}{$lgfile}) and ($line =~ /(\S+).*] "\w*(?:GET|POST) \/xmlrpc\.php.*" /)) {
return ("WP XMLPRC Attack",$1,"XMLRPC","15","80,443","1");
}قدم آخر: ریستارت و تمام 🔄
csf -r
service lfd restartاز اینجا به بعد:
- CSF لاگها رو مانیتور میکنه
- IPهای مخرب رو شناسایی میکنه
- و بدون دخالت بلاکشون میکنه
نتیجه چی شد؟

- لود سرور به طرز محسوسی پایین اومد
- لاگها تمیزتر شدن
- و مهمتر از همه:
بدون حتی دست زدن به وردپرس، امنیت بهتر شد
جمعبندی دوستانه
اگر وردپرس داری و:
- XML-RPC واقعاً به کارت نمیاد
- یا ازش فقط دردسر دیدی
- حداقل مانیتورش کن، یا محدودش کن.
دنیا جای عجیبیه، مخصوصاً وقتی چندتا request ساده میتونن یه سرور رو زمین بزنن.
خوشبختانه ما هم ابزارهای خودمون رو داریم 😄🛠️