جلوگیری از حملات XML-RPC در سرورهای cPanel با CSF

جلوگیری از حملات 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 ساده می‌تونن یه سرور رو زمین بزنن.
خوشبختانه ما هم ابزارهای خودمون رو داریم 😄🛠️