SHET24

۸ روش جلوگیری از حملات Brute Force در وردپرس

۸ روش جلوگیری از حملات Brute Force در وردپرس

در حمله Brute Force، یک ربات تعداد زیادی نام کاربری و رمز عبور رو پشت سر هم امتحان می‌کنه تا بالاخره وارد یکی از حساب‌های سایت بشه. حتی اگه این تلاش‌ها به نتیجه نرسن، باز هم می‌تونن منابع هاستتون رو درگیر کنن و سرعت صفحه ورود رو پایین بیارن. اگه حمله موفق باشه، مهاجم می‌تونه با دسترسی همون حساب، تغییرهای مخرب بیشتری توی سایت انجام بده.

برای جلوگیری از حملات Brute Force در وردپرس، فقط عوض‌کردن آدرس ورود کافی نیست. بهتره چند لایه دفاعی رو کنار هم بچینید: رمز قوی، محدودیت تلاش ورود، احراز هویت دومرحله‌ای، فایروال، تنظیم درست XML-RPC و یک بکاپ سالم. توی این آموزش، همه این کارها رو با امکانات خود وردپرس و افزونه‌های رایگان جلو می‌بریم.

حمله Brute Force چیست؟

در این نوع حمله، نرم‌افزارهای خودکار بارها فرم ورود وردپرس رو امتحان می‌کنن. بعضی ربات‌ها سراغ نام‌های کاربری رایجی مثل admin می‌رن. بعضی‌های دیگه هم رمزهایی رو آزمایش می‌کنن که قبلاً از سایت‌های دیگه لو رفتن. هدف اصلی این حمله، پیداکردن اطلاعات ورود معتبره. نصب بدافزار یا حذف مطالب بخشی از خود حمله Brute Force نیست، ولی بعد از تصاحب موفق حساب می‌تونه اتفاق بیفته.

اگه همراه این تلاش‌ها، ترافیک خیلی سنگینی هم به سایت فرستاده بشه، ماجرا می‌تونه به حمله محروم‌سازی از سرویس نزدیک بشه. برای آشنایی با تفاوت این حمله‌ها و راه‌های مقابله با اون‌ها، آموزش جلوگیری از حملات DDoS در وردپرس رو هم ببینید.

از کجا بفهمیم سایت زیر حمله‌ست؟

ورودهای ناموفق زیاد، درخواست‌های پشت سر هم به wp-login.php یا xmlrpc.php، کندشدن ناگهانی سایت و قفل‌شدن مداوم حساب‌ها از نشونه‌های رایج این حمله هستن. البته هر کندی‌ای به معنی Brute Force نیست. برای اینکه تصویر دقیق‌تری داشته باشید، گزارش افزونه امنیتی، لاگ سرور و اطلاعات پنل شرکت هاست رو کنار هم بررسی کنید.

وردپرس، قالب‌ها و افزونه‌ها رو به‌روز کنید

به‌روزرسانی، تعداد حدس‌های رمز رو مستقیماً کم نمی‌کنه، ولی آسیب‌پذیری‌های شناخته‌شده وردپرس، قالب‌ها و افزونه‌ها رو می‌بنده. در نتیجه، مهاجم نمی‌تونه بعد از پیداکردن یک نقطه‌ضعف، به‌سادگی وارد سایت بشه یا سطح دسترسی خودش رو بالاتر ببره.

از پیشخوان وردپرس به «پیشخوان ← به‌روزرسانی‌ها» برید. اول یک بکاپ از سایت بگیرید و بعد وردپرس، افزونه‌ها و قالب‌های فعال رو به‌روز کنید. خود وردپرس امکان به‌روزرسانی خودکار نسخه‌های امنیتی و نگهداری هسته رو داره. برای افزونه‌ها و قالب‌ها هم می‌تونید به‌روزرسانی خودکار رو از صفحه مربوط به هرکدوم فعال کنید.

صفحه به‌روزرسانی وردپرس، افزونه‌ها و قالب‌ها در پیشخوان فارسی
صفحه به‌روزرسانی وردپرس، افزونه‌ها و قالب‌ها در پیشخوان فارسی

رمز عبور قوی و نام کاربری مناسب انتخاب کنید

وردپرس موقع ساختن یا ویرایش یک کاربر، رمز عبور قوی و تصادفی پیشنهاد می‌ده؛ پس برای این کار به افزونه نیازی ندارید. رمز هر حساب باید مخصوص همون حساب باشه. یعنی رمزی رو که برای وردپرس انتخاب کردید، برای ایمیل، هاست یا سایت‌های دیگه استفاده نکنید. یک مدیر رمز عبور معتبر هم ساختن و نگهداری رمزهای طولانی رو براتون خیلی ساده‌تر می‌کنه.

۸ روش جلوگیری از حملات Brute Force در وردپرس

برای عوض‌کردن رمز خودتون، وارد «کاربران ← شناسنامه» بشید و در بخش مدیریت حساب، گزینه ساخت رمز تازه رو بزنید. اگه نام کاربری مدیر سایت admin هست، یک مدیر تازه با نام کاربری غیرقابل‌حدس بسازید. بعد با حساب تازه وارد بشید و حساب قبلی رو حذف کنید. موقع حذف حساب قبلی، یادتون نره نوشته‌های اون رو به کاربر تازه نسبت بدید.

وردپرس به‌صورت پیش‌فرض اجازه نمی‌ده نام کاربری یک حساب موجود رو مستقیم تغییر بدید. اگه نمی‌خواید حساب تازه‌ای بسازید، روش تغییر نام کاربری در وردپرس با افزونه رایگان رو ببینید.

تعداد تلاش‌های ورود رو محدود کنید

وردپرس در حالت عادی برای تعداد تلاش‌های ناموفق ورود محدودیتی نمی‌ذاره. برای اضافه‌کردن این قابلیت می‌تونید از نسخه رایگان افزونه Limit Login Attempts Reloaded استفاده کنید. این افزونه بعد از چند تلاش ناموفق، ورود از اون منبع رو برای مدت مشخصی قفل می‌کنه.

به «افزونه‌ها ← افزودن افزونه تازه» برید و عبارت Limit Login Attempts Reloaded رو جست‌وجو کنید. افزونه‌ای رو که دقیقاً همین نام رو داره نصب و فعال کنید.

افزونه Limit Login Attempts Reloaded
افزونه Limit Login Attempts Reloaded

بعد از فعال‌سازی، وارد «تنظیمات ← Limit Login Attempts» بشید. در بخش تنظیمات قفل، تعداد تلاش‌های مجاز و مدت قفل رو تعیین کنید. اگه عدد خیلی کمی انتخاب کنید، ممکنه کاربران واقعی هم ناخواسته قفل بشن. بهتره کار رو با تنظیم پیش‌فرض افزونه شروع کنید و بعد براساس گزارش ورودهای سایت، اون رو تغییر بدید.

تنظیم تعداد تلاش‌های ورود و مدت قفل در افزونه
تنظیم تعداد تلاش‌های ورود و مدت قفل در افزونه

اگه سایتتون پشت CDN یا پراکسی معکوسه، تشخیص درست IP خیلی مهمه. یک تنظیم اشتباه ممکنه باعث بشه همه بازدیدکننده‌ها با یک IP دیده بشن. قبل از دست‌زدن به گزینه‌های مربوط به IP، حتماً مستندات شرکت هاست یا CDN خودتون رو بررسی کنید.

احراز هویت دومرحله‌ای رو فعال کنید

احراز هویت دومرحله‌ای یا 2FA یعنی برای ورود، علاوه بر رمز عبور به یک کد موقت هم نیاز دارید. به این ترتیب، حتی اگه رمزتون لو بره، مهاجم بدون عامل دوم نمی‌تونه به‌راحتی وارد حساب بشه. وردپرس در نصب عادی خودش هنوز تنظیم داخلی برای فعال‌کردن 2FA نداره؛ پس در این مرحله باید از افزونه کمک بگیرید.

افزونه رایگان و متن‌باز Two-Factor این امکان رو به صفحه شناسنامه کاربران اضافه می‌کنه. از «افزونه‌ها ← افزودن افزونه تازه»، نام Two-Factor رو جست‌وجو کنید و بعد افزونه رو نصب و فعال کنید.

نصب افزونه رایگان Two-Factor
نصب افزونه رایگان Two-Factor

حالا به «کاربران ← شناسنامه» برید و بخش تنظیمات Two-Factor رو پیدا کنید. روش کد یک‌بارمصرف زمان‌دار رو فعال کنید، کد QR رو با برنامه رمزساز اسکن کنید و همین گزینه رو به‌عنوان روش اصلی قرار بدید. قبل از اینکه از حساب خارج بشید، کد ورود رو یک بار آزمایش کنید. یک راه بازیابی امن هم برای زمانی که به گوشی دسترسی ندارید نگه دارید.

تنظیم روش احراز هویت دومرحله‌ای در شناسنامه کاربر
تنظیم روش احراز هویت دومرحله‌ای در شناسنامه کاربر

جلوی درخواست‌های مخرب رو با فایروال بگیرید

فایروال برنامه وب یا WAF ابزاریه که درخواست‌های مشکوک رو بررسی و مسدود می‌کنه. فایروالی که روی CDN یا لبه شبکه کار می‌کنه، درخواست رو قبل از رسیدن به هاست فیلتر می‌کنه. افزونه امنیتی داخل وردپرس کمی دیرتر وارد عمل می‌شه و ممکنه بخشی از منابع PHP و سرور رو مصرف کنه.

اگه هاستتون WAF یا محافظت مخصوص صفحه ورود داره، اول همون رو بررسی کنید. برای مدیریت امنیت از داخل پیشخوان هم می‌تونید سراغ نسخه رایگان افزونه All-In-One Security برید. تنظیمات این افزونه زیاده، پس قبل از فعال‌کردن هر قانون از سایت بکاپ بگیرید و آموزش افزونه All In One WP Security & Firewall رو قدم‌به‌قدم دنبال کنید.

عوض‌کردن آدرس صفحه ورود می‌تونه جلوی بعضی ربات‌های ساده رو بگیره، ولی جای محدودیت ورود، 2FA یا فایروال رو نمی‌گیره. اگه می‌خواید این روش رو هم انجام بدید، اول یک راه بازیابی مطمئن آماده کنید و بعد سراغ افزونه‌های تغییر صفحه لاگین وردپرس برید.

دسترسی به XML-RPC رو بررسی کنید

xmlrpc.php یک رابط قدیمی‌تره که برنامه‌ها و سرویس‌های بیرونی با کمک اون با وردپرس ارتباط برقرار می‌کنن. بعضی مهاجم‌ها از همین مسیر برای فرستادن تلاش‌های ورود استفاده می‌کنن. اگه برنامه موبایل وردپرس، Jetpack یا سرویس بیرونی وابسته به XML-RPC دارید، مسدودکردن کامل این فایل ممکنه اتصال اون سرویس رو به هم بزنه.

وردپرس داخل پیشخوان گزینه‌ای برای خاموش‌کردن کامل XML-RPC نداره. اول از شرکت هاست بپرسید که آیا فایروال سرور امکان محدودکردن درخواست‌های xmlrpc.php رو داره یا نه. اگه به این فایل نیازی ندارید، بهتره مسدودسازی روی WAF یا وب‌سرور انجام بشه تا درخواست پیش از اجرای وردپرس متوقف بشه. دستورهای Apache، Nginx و LiteSpeed یکسان نیستن؛ پس کد مخصوص یک وب‌سرور رو بدون بررسی روی هاستتون قرار ندید.

۷. پوشه‌های حساس وردپرس رو ایمن کنید

محافظت اضافه از پوشه wp-admin

بعضی پنل‌های هاست مثل cPanel گزینه‌ای به نام Directory Privacy دارن. این گزینه قبل از نمایش صفحه ورود وردپرس، یک نام کاربری و رمز جدا از شما می‌خواد. برای فعال‌کردنش، وارد بخش Files در cPanel بشید و Directory Privacy رو باز کنید. بعد پوشه wp-admin رو انتخاب کنید، محافظت رو فعال کنید و یک کاربر مجاز بسازید.

۸ روش جلوگیری از حملات Brute Force در وردپرس

این قابلیت به شرکت هاست و نوع پنل بستگی داره و ممکنه روی هاست شما فعال نباشه. ضمن اینکه فقط دسترسی وب به پوشه رو محدود می‌کنه و جای امنیت حساب هاست، SFTP یا SSH رو نمی‌گیره. اگه بعد از فعال‌سازی با خطای 401 یا مشکل Ajax روبه‌رو شدید، تنظیم رو غیرفعال کنید و از پشتیبانی هاست کمک بگیرید.

بستن فهرست پوشه‌ها

اگه وب‌سرورتون Apache هست، می‌تونید با دستور زیر نمایش فهرست فایل‌های پوشه رو ببندید. این کد باید داخل فایل .htaccess ریشه وردپرس قرار بگیره، نه پوشه قالب. قبل از ویرایش، یک نسخه از فایل برای خودتون نگه دارید. این دستور فقط وقتی کار می‌کنه که شرکت هاست اجازه استفاده از گزینه Indexes رو داده باشه.

Options -Indexes

روی Nginx، فایل .htaccess اجرا نمی‌شه و این تغییر باید از تنظیمات سرور یا با کمک پشتیبانی هاست انجام بشه. LiteSpeed معمولاً با قواعد سازگار با Apache کار می‌کنه، ولی بهتره قبل از هر تغییری این موضوع رو با پشتیبانی هاست چک کنید.

جلوگیری از اجرای PHP در پوشه uploads

فایل‌های آپلودی وردپرس داخل پوشه wp-content/uploads قرار می‌گیرن و این پوشه معمولاً نیازی به اجرای فایل PHP نداره. روی Apache 2.4 می‌تونید یک فایل .htaccess جدا داخل همین پوشه بسازید و قانون زیر رو توی اون قرار بدید:

<FilesMatch "\.php$">
    Require all denied
</FilesMatch>

دستور قدیمی deny from all به ماژول سازگاری Apache وابسته‌ست و برای Apache 2.4 بهتره از Require all denied استفاده کنید. این کد برای Nginx مناسب نیست. اگه نوع وب‌سرورتون رو نمی‌دونید یا به فایل‌ها دسترسی ندارید، کد رو حدسی اضافه نکنید. از پشتیبانی هاست بخواید اجرای PHP داخل پوشه uploads رو ببنده.

۸. ورودهای مشکوک رو بررسی کنید و بکاپ داشته باشید

بعد از راه‌اندازی محدودیت ورود، گزارش تلاش‌های ناموفق رو هرچند وقت یک بار بررسی کنید. زیادشدن ناگهانی درخواست‌ها، حمله از چند IP مختلف یا تلاش برای ورود با نام‌های کاربری ناشناخته می‌تونه نشونه ادامه حمله باشه. اگه حمله به‌صورت توزیع‌شده انجام می‌شه، مسدودکردن دستی چند IP کافی نیست و بهتره از WAF یا کمک شرکت هاست استفاده کنید.

بکاپ جلوی Brute Force رو نمی‌گیره، ولی اگه حسابی تصاحب بشه یا فایل‌ها تغییر کنن، یک مسیر امن برای بازیابی سایت بهتون می‌ده. نسخه پشتیبان رو بیرون از همون هاست نگه دارید، از فایل‌ها و پایگاه داده با هم بکاپ بگیرید و هرازگاهی بازیابی اون رو آزمایش کنید. بکاپی که هیچ‌وقت امتحان نشده، ممکنه درست زمانی که بهش نیاز دارید قابل استفاده نباشه.

بعد از دیدن یک ورود مشکوک، فقط رمز مدیر رو عوض نکنید. رمز حساب‌های مدیر، ایمیل و هاست رو تغییر بدید، نشست‌های فعال رو ببندید و کاربران مدیر ناشناس رو بررسی کنید. فایل‌ها و افزونه‌های تازه رو هم زیر نظر بگیرید. برای پیداکردن خطاها و بررسی وضعیت فنی سایت، آموزش عیب‌یابی وردپرس با ابزار سلامت سایت هم به کارتون میاد.

ترتیب پیشنهادی برای شروع

  1. از سایت یک بکاپ کامل بگیرید.
  2. وردپرس، قالب‌ها و افزونه‌ها رو به‌روز کنید.
  3. برای همه مدیرها رمز قوی و منحصربه‌فرد بسازید.
  4. تلاش‌های ورود رو با افزونه رایگان Limit Login Attempts Reloaded محدود کنید.
  5. برای حساب‌های مدیر، افزونه رایگان Two-Factor رو راه‌اندازی کنید.
  6. از شرکت هاست درباره WAF و محدودسازی XML-RPC سؤال کنید.
  7. گزارش ورودهای ناموفق و سلامت بکاپ‌ها رو مرتب بررسی کنید.

سؤالات متداول

آیا خود وردپرس جلوی حملات Brute Force رو می‌گیره؟

وردپرس رمز قوی پیشنهاد می‌ده و از به‌روزرسانی‌های امنیتی هسته پشتیبانی می‌کنه، ولی در نصب عادی تعداد تلاش‌های ورود رو محدود نمی‌کنه و احراز هویت دومرحله‌ای داخلی هم نداره. برای این دو قابلیت می‌تونید از افزونه‌های رایگانی استفاده کنید که توی همین آموزش معرفی کردیم.

آیا تغییر آدرس ورود برای جلوگیری از Brute Force کافیه؟

نه. تغییر آدرس ورود فقط ممکنه تعداد بعضی ربات‌های ساده رو کمتر کنه. رمز قوی، محدودیت تلاش ورود، احراز هویت دومرحله‌ای و فایروال، دفاع‌های اصلی‌تری هستن.

آیا باید XML-RPC رو کامل غیرفعال کنیم؟

اگه هیچ برنامه یا سرویس بیرونی به XML-RPC وابسته نیست، محدودکردن اون می‌تونه سطح حمله رو کمتر کنه. ولی قبل از مسدودسازی مطمئن بشید که برنامه موبایل وردپرس، Jetpack یا سرویس دیگه‌ای از اون استفاده نمی‌کنه.

آیا بکاپ جلوی حمله Brute Force رو می‌گیره؟

نه. بکاپ حمله رو متوقف نمی‌کنه و فقط برای بازیابی بعد از خرابی یا نفوذ به کار میاد. نسخه پشتیبان رو بیرون از هاست اصلی نگه دارید و بازیابی اون رو هم آزمایش کنید.

نظر شما در این مورد چیه؟

  1. کاربر مهمان۱۱ مهر ۱۳۹۷

    سلام،
    ممنون از اطلاعات کامل و مفیدتون
    کارتون حرف نداره
    متشکرم

  2. U5826۱ مهر ۱۳۹۷

    با سلام
    من برای توضیحات بخش جلوگیری از هک شدن طبق مسیر شما وارد پنل هاست خود شدم اما گزینه wp-admin درون اون نیست
    (اکنون پنل کاربری هاست خود شوید و در قسمت Files روی آیکون Directory Privacy کلیک کنید. دز این قسمت پوشه wp-admin را یافته و روی آن کلیک کنید.)
    در آنجا گزینه های
    / (Current Folder)
    New directory
    access-logs
    نام دیتا بیس من
    etc
    logs
    mail
    public_ftp
    public_html
    ssl
    tmp
    www
    هست . در کدام بخش میتوانم اون دستورات را وارد کنم
    با تشکر

    • رضا راد۱ مهر ۱۳۹۷

      ابتدا وارد public_html شوید سپس طبق موارد پیش برید

  3. کاربر مهمان۱ مهر ۱۳۹۷

    سلام
    یه سوال فنی
    پسوورد گذاشتن روی wp-admin. باعث میشه تموم پلاگینایی که از ajax استفاده میکنن همشون با اختلال مواجه بشن و تو هر مرحله پسورد بگیرن ، که چون کاربر پرسوورد نداره عملا از کار میوفتن

    راهکاری دارین براش؟

    • رضا راد۱ مهر ۱۳۹۷

      سلام از روش تغییر مسیر wp-admin استفاده کنید اگر این افزونه ها روی سایتتون هست

پشتیبانپشتیبانپشتیبانپشتیبانپشتیبان
تیم میهن وردپرس
پشتیبانپشتیبانپشتیبانپشتیبانپشتیبان
تیم میهن وردپرسدر حال حاضر آفلاین هستیم. لطفاً پیام بگذارید تا در اولین فرصت پاسخ دهیم.آفلاین

در حال بارگذاری...

هر سوالی دارید بپرسید.پاسخگوی شما هستیم.