SHET24

جلوگیری از دسترسی IP خاص به سایت شما با دو روش ساده

جلوگیری از دسترسی IP خاص به سایت شما با دو روش ساده

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

در هر سه حالت، اولین فکری که به ذهن می‌رسه اینه: «آی‌پی این رو ببندم تا راحت بشم.» و راستش خیلی وقت‌ها همین کار جواب می‌ده و در دو دقیقه انجام می‌شه.

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

در این مقاله هم روش‌های عملی مسدودسازی رو می‌بینیم، هم اینکه کِی این کار جواب می‌ده و کِی وقت تلف کردنه، و مهم‌تر از همه چه اشتباهاتی هست که نباید مرتکبشون بشید.

آدرس IP دقیقاً چیست؟

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

دو نوع آدرس امروز رایجه. نوع قدیمی‌تر و آشناتر که چهار عدد جدا از هم با نقطه داره (مثل 203.0.113.45) و نوع جدیدتر که طولانی‌تره و از حروف و اعداد ساخته شده (مثل 2001:0db8:85a3::8a2e:0370:7334). این دومی مهمه، چون اگه فقط نسخه‌ی قدیمی آدرس یه مزاحم رو ببندید و اون از نسخه‌ی جدید استفاده کنه، بلاک شما بی‌اثر می‌مونه.

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

پس این کار کِی واقعاً به درد می‌خورد؟

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

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

و در این موقعیت‌ها جواب نمی‌ده: وقتی مزاحم یه کاربر خانگی با آی‌پی متغیره، وقتی طرف از VPN یا پروکسی استفاده می‌کنه (که تغییر دادنش یه کلیکه)، وقتی حمله از یه بات‌نت با هزاران آی‌پی مختلف انجام می‌شه، و وقتی مشکل اصلی اسپم دیدگاه‌هاست که راه‌حل‌های به‌مراتب بهتری داره.

خلاصه‌ که مسدودسازی آی‌پی یه ابزار موقت و موضعیه، نه یه استراتژی امنیتی. مثل بستن یه پنجره‌ی خاص می‌مونه، نه نصب سیستم امنیتی خونه.

قبل از هر کاری، آی‌پی درست را پیدا کنید

بستن یه آی‌پی اشتباه، بدترین حالت ممکنه؛ چون هم مزاحم سر جاشه و هم یه کاربر بی‌گناه رو از سایت بیرون کردید. پس اول مطمئن بشید آدرس درست رو دارید.

اگه مشکل از دیدگاه‌های اسپمه، ساده‌ترین راه اینه که در پیشخوان وردپرس به بخش دیدگاه‌ها برید. زیر نام هر دیدگاه‌گذار، آی‌پی‌ش نوشته شده.

پیدا کردن آی‌پی‌
پیدا کردن آی‌پی‌

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

افزونه‌های امنیتی Wordfence
افزونه‌های امنیتی Wordfence

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

روش اول: از پنل هاست (ساده‌ترین راه)

در ایران بیشتر هاست‌های اشتراکی از دایرکت‌ادمین استفاده می‌کنن، پس از همین شروع کنیم. وارد پنل دایرکت‌ادمین بشید و بسته به پوسته‌ای که هاستتون استفاده می‌کنه، در منوی Advanced Features یا Extra Features دنبال گزینه‌ای به اسم IP Blocker یا IP Manager بگردید. اگه پنل شما این ابزار رو داشت، کار تمومه: آدرس موردنظر رو در فیلد مربوطه وارد کنید و ثبت کنید. برای برداشتن بلاک هم از همون صفحه می‌تونید حذفش کنید.

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

راه اول: از همون دایرکت‌ادمین وارد File Manager بشید، به پوشه‌ی public_html برید و فایل .htaccess رو ویرایش کنید. روش کارش رو در بخش بعدی کامل توضیح دادم و برای کاربران دایرکت‌ادمین معمولاً همین مسیر اصلیه.

راه دوم که در واقع بهترین گزینه‌ست: یه تیکت به پشتیبانی هاست بزنید و بخواید اون آی‌پی رو در سطح فایروال سرور (معمولاً CSF) مسدود کنن. مزیتش اینه که درخواست مزاحم اصلاً به وب‌سرور نمی‌رسه و منابع هاست شما مصرف نمی‌شه؛ ضمناً این بلاک روی همه‌ی سرویس‌ها اعمال می‌شه، نه فقط وب. اگه با یه حمله‌ی فعال یا رباتی که داره سرور رو خفه می‌کنه طرفید، این سریع‌ترین و مؤثرترین کاریه که می‌تونید بکنید.

و اگه هاستتون سی‌پنل داره، کار ساده‌تره: در بخش Security گزینه‌ی IP Blocker (در بعضی نسخه‌ها با نام IP Deny Manager) وجود داره که آدرس رو وارد و ثبت می‌کنید. مزیت همه‌ی این روش‌ها اینه که به هیچ فایلی دست نمی‌زنید و ریسک خراب کردن سایت صفره.

روش دوم: با فایل ‎.htaccess

این روش انعطاف بیشتری می‌ده اما دو تا شرط داره که باید قبلش بدونید.

شرط اول: وب‌سرور سایتتون باید آپاچی یا لایت‌اسپید باشه. اگه سایت روی Nginx اجرا می‌شه، فایل .htaccess اصلاً خونده نمی‌شه و هر چی داخلش بنویسید بی‌اثره. برای فهمیدنش می‌تونید از پشتیبانی هاست بپرسید یا در بخش «ابزارها ← سلامت سایت ← اطلاعات» وردپرس، نوع سرور وب رو ببینید.

اطلاعات سرور وب
اطلاعات سرور وب

شرط دوم: قبل از ویرایش، حتماً یه کپی از فایل بگیرید. یه اشتباه کوچیک در این فایل، کل سایت رو با خطای ۵۰۰ از دسترس خارج می‌کنه.

کد درست چیست؟

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

Order Deny,Allow
Deny from 203.0.113.45

این نحو مربوط به آپاچی نسخه‌ی ۲.۲ است که سال‌هاست منسوخ شده. روی سرورهای امروزی که نسخه‌ی ۲.۴ رو اجرا می‌کنن، این کد فقط زمانی کار می‌کنه که ماژول سازگاری قدیمی فعال باشه؛ در غیر این صورت یا نادیده گرفته می‌شه یا سایت خطای ۵۰۰ می‌ده.

نحو درست و امروزی اینه:

<RequireAll>
    Require all granted
    Require not ip 203.0.113.45
</RequireAll>

خط اول می‌گه همه اجازه‌ی دسترسی دارن و خط دوم استثنا رو مشخص می‌کنه. برای بستن چند آدرس، کافیه خط Require not ip رو تکرار کنید.

این کد رو در بالای فایل .htaccess و بیرون از بخشی که وردپرس خودش ساخته (بلوکی که با # BEGIN WordPress شروع می‌شه) قرار بدید. دلیلش اینه که وردپرس و بعضی افزونه‌ها اون بلوک رو گاهی بازنویسی می‌کنن و کدهای شما پاک می‌شن.

همین نکته درباره‌ی افزونه‌های کش هم صدق می‌کنه. مثلاً رخش قوانین وب‌سرور رو به‌صورت خودکار تولید و در همین فایل درج می‌کنه؛ پس قوانین دستی خودتون رو خارج از بلوک نشان‌دار افزونه بنویسید تا با هر بار به‌روزرسانی تنظیمات از بین نرن.

مسدود کردن یک محدوده

گاهی مزاحمت از یه شبکه‌ی مشخص میاد نه یه آدرس. در این حالت می‌تونید کل محدوده رو ببندید:

Require not ip 203.0.113

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

یک کاربرد واقعاً مفید: محدود کردن پیشخوان

به‌جای بستن مزاحم‌ها یکی‌یکی، می‌تونید برعکسش رو انجام بدید و بگید فقط آی‌پی خودتون به بخش مدیریت دسترسی داشته باشه. برای این کار یه فایل .htaccess جداگانه داخل پوشه‌ی wp-admin بسازید:

<RequireAny>
    Require ip 203.0.113.45
</RequireAny>

این روش تقریباً تمام حملات حدس رمز رو بی‌اثر می‌کنه. اما دو تا هشدار جدی داره.

اول اینکه اگه آی‌پی شما ثابت نیست (که برای اینترنت خانگی معمولاً نیست)، فردا خودتون پشت در می‌مونید. پس فقط وقتی این کار رو بکنید که آی‌پی ثابت دارید یا به فایل‌منیجر هاست دسترسی دارید تا بتونید تغییرش بدید.

دوم اینکه فایل admin-ajax.php داخل همین پوشه‌ست و خیلی از قابلیت‌های سمت کاربر (مثل فیلتر محصولات یا افزودن به سبد خرید) ازش استفاده می‌کنن. اگه کل پوشه رو ببندید، ممکنه بخش‌هایی از سایت برای بازدیدکننده‌ها از کار بیفته. برای همین باید این فایل رو استثنا کنید. اگه سایت فروشگاهی دارید، این روش رو حتماً اول روی نسخه‌ی آزمایشی تست کنید.

اگر از کلادفلر یا CDN ایرانی استفاده می‌کنید، بخوانید

این بخش برای خیلی‌ها مهم‌ترین قسمت مقاله‌ست و تقریباً هیچ‌جا بهش اشاره نمی‌شه.

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

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

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

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

روش‌هایی که معمولاً بهتر از بلاک IP هستند

حالا که تصویر کامل رو دارید، بذارید چند راه‌حل بگم که در بیشتر موارد نتیجه‌ی بهتری می‌دن.

اگه مشکلتون اسپم دیدگاهه، خود وردپرس در «تنظیمات ← گفتگو» بخشی داره که می‌تونید کلمات، آدرس‌ها، ایمیل‌ها یا آی‌پی‌های خاصی رو در فهرست ناروا قرار بدید تا دیدگاه‌هاشون خودکار رد بشه. کنارش افزونه‌های ضد اسپم و کپچا هم به‌مراتب مؤثرترن، چون رفتار رو تشخیص می‌دن نه آدرس رو.

تنظیمات دیدگاه
تنظیمات دیدگاه

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

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

چند اشتباه که نباید مرتکب شوید

  • آی‌پی خودتان را نبندید. بامزه به نظر می‌رسه اما بارها اتفاق می‌افته. قبل از هر بلاکی، آدرس فعلی خودتون رو (با جستجوی «what is my ip» در گوگل) ببینید و مطمئن بشید در لیست نیست.
  • ربات‌های موتور جستجو را نبندید. اگه در لاگ سرور ببینید یه آدرس داره هزاران صفحه رو پشت سر هم می‌خونه، ممکنه فکر کنید مزاحمه؛ در حالی که ربات گوگله. بستنش یعنی حذف تدریجی سایت شما از نتایج جستجو. قبل از بستن هر آدرس پرترافیکی، بررسی کنید متعلق به کدوم سرویسه.
  • لیست بلاک را بی‌نهایت بلند نکنید. هر قانون در .htaccess باید برای هر درخواست بررسی بشه. فهرستی با صدها آدرس، خودش سایت رو کند می‌کنه. اگه به این نقطه رسیدید، یعنی به یه فایروال درست‌وحسابی نیاز دارید نه لیست دستی.
  • بلاک‌های موقت را همیشگی نکنید. چون آی‌پی‌ها بین کاربران دست به دست می‌شن، آدرسی که پارسال مال یه مزاحم بوده، امسال ممکنه مال یه مشتری بالقوه باشه. هر چند وقت یه بار لیست رو مرور و پاکسازی کنید.

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

مسدود کردن IP جلوی هک شدن سایت را می‌گیرد؟

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

چطور بفهمم آی‌پی مزاحم چیست؟

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

کد را در ‎.htaccess گذاشتم اما اثری نداشت، چرا؟

سه احتمال رایج داره: وب‌سرور شما Nginx است و این فایل رو نمی‌خونه، سایت پشت CDN قرار داره و آی‌پی واقعی به سرور نمی‌رسه، یا نحو کدی که استفاده کردید مربوط به نسخه‌ی قدیمی آپاچیه.

بعد از ویرایش ‎.htaccess سایتم خطای ۵۰۰ داد، چه کنم؟

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

می‌شود یک کشور را کامل مسدود کرد؟

بله، اما نه با .htaccess. برای این کار باید از قوانین فایروال CDN یا افزونه‌های امنیتی که پایگاه داده‌ی جغرافیایی دارن استفاده کنید. فقط توجه داشته باشید که این کار کاربران واقعی اون کشور و همین‌طور کسانی که از VPN استفاده می‌کنن رو هم تحت تأثیر قرار می‌ده.

چند آی‌پی را می‌توانم مسدود کنم؟

محدودیت فنی سختی وجود نداره، اما از نظر عملی هرچه لیست بلندتر بشه، بررسی هر درخواست کندتر می‌شه. اگه لیستتون داره به ده‌ها مورد می‌رسه، بهتره سراغ فایروال یا CDN برید.

جمع‌بندی

مسدود کردن یه آدرس آی‌پی کار سختی نیست؛ از پنل هاست دو کلیکه و با .htaccess هم چند خط کد. چیزی که مهم‌تره اینه که بدونید این ابزار چه مشکلی رو حل می‌کنه و چه مشکلی رو نه.

برای بستن یه مزاحم مشخص با آدرس ثابت، برای جلوگیری موقت از یه حمله‌ی در حال انجام، یا برای محدود کردن دسترسی به بخش مدیریت، انتخاب خوبیه. اما اگه انتظار دارید امنیت سایتتون رو تأمین کنه، انتظار اشتباهیه. مزاحم واقعی معمولاً در عرض چند دقیقه با آدرس دیگه‌ای برمی‌گرده.

و اگه فقط یه چیز از این مقاله یادتون بمونه، این باشه: قبل از هر بلاکی، مطمئن بشید سایتتون پشت CDN نیست و آدرسی که دارید می‌بندید، نه مال خودتونه و نه مال ربات گوگل. این دو تا بررسی سی ثانیه وقت می‌گیرن و جلوی دردسرهای خیلی بزرگ‌تری رو می‌گیرن. موفق و پیروز باشید. 🙂

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

  1. U346136۱۸ خرداد ۱۴۰۳

    سلام و خداقوت
    سایت من از طرق گوشی باز میشه اما از طریق لب تاپ ( نحوه اتصال لب تاپ به اینترنت هات اسپات گوشی ) خطای افلاین بودن و عدم دسترسی به اینترنت میده
    همه سایتها باز میشه به جز سایت خودم و هیچ دسترسی به سایت ندارم
    این کار با خطوط دیگه از طریق لب تاپ امتحان کردم همه چی درسته فقط از طریق اینترنت گوشی شخصیم ( هات اسپات ) با لب تاپ این مشکل ایجاد میشه

  2. U34792۱۷ اسفند ۱۴۰۰

    با سلام
    چجوری میشه کلا ipهای ی کشور خاص رو بلاک کنیم ؟

    • رضا راد۱۸ اسفند ۱۴۰۰

      سلام با فایروال سرور باید رنج‌های آی پی اون کشور رو ببندید.

  3. U30329۲۹ خرداد ۱۴۰۰

    ممنون از مقاله خوبتون.
    من یک سایت وردپرسی فروش دوره دارم.آیا این امکان وجود داره که کاربر به طور مثال با دو تا دستگاه بیشتر نتونه وارد سایت بشه؟ما میخوایم از این که کاربر اکانتش رو در اختیار کس دیگه ای قرار بده جلوگیری کنیم.پلاگینی هست معرفی کنید؟

    • تیم پشتیبانیتیم پشتیبانی۲۹ خرداد ۱۴۰۰

      درود
      خیر باید این مورد رو باکدنویسی به سایتتون اضافه کنید

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

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

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