محدود کردن دسترسی به پوشه خاص در وب سرور OpenLiteSpeed

محدود کردن دسترسی به پوشه خاص در وب سرور OpenLiteSpeed

در وب‌سرور آپاچی می‌تونیم با استفاده از Allow from all یا Deny from all دسترسی کاربران به پوشه‌های مختلف رو محدود کنیم یا باز نگه داریم. اجازه بدید یه مثال عملی بزنیم.

افزونه EDD رو که حتماً می‌شناسید! در این افزونه یه سری فایل آپلود می‌کنیم که در پوشه uploads/edd قرار می‌گیره و کاربر نباید دسترسی مستقیم به این فایل‌ها داشته باشه؛ چون اگر دسترسی مستقیم به فایل‌های شما داشته باشن، لینک‌ها و فایل‌های باارزشی که می‌فروشید در دسترس عموم قرار می‌گیره.

در ادامه می‌خوایم مهم‌ترین روش‌های قفل کردن این پوشه رو بررسی کنیم.

معرفی افزونه EDD
معرفی افزونه EDD

اگر از وب‌سرور آپاچی استفاده کنید، خب موقع نصب EDD به‌صورت خودکار با تغییر فایل htaccess دسترسی کاربر به پوشه wp-content/uploads/edd مسدود می‌شه؛ آن هم با استفاده از یه کد بسیار ساده deny from all! پس نیاز به انجام کار خاصی نیست. اما وقتی وب‌سرور شما به لایت‌اسپید تغییر کرد، خب باز هم مشکلی نیست؛ چون لایت‌اسپید با دستورات htaccess apache سازگاری کامل داره.

اما مسئله اینجاست که اگر از openlitespeed استفاده می‌کنید (استفاده می‌کنیم، چون رایگان هست و هزینه‌های لایت‌اسپید در ایران سر به فلک می‌کشه!)، دیگه از این خبرها نیست! دستورات deny from all اصلاً توسط وب‌سرور شما تشخیص داده نمیشه. برای حل این مشکل چه کار کنیم؟

آنچه در این مقاله می‌خوانید

محدود کردن دسترسی به پوشه در وب سرور OpenLiteSpeed

برای مسدود کردن دسترسی به پوشه آپلود EDD در وب‌سرور OpenLiteSpeed، کافیه از فایل vhost conf تغییرات رو اعمال کنیم. ابتدا باید دنبال این فایل در سرور خودتون بگردید. مثلاً اگر از دایرکت‌ادمین استفاده می‌کنید، باید با دسترسی مدیر کل وارد بشید؛ سپس وارد بخش Server Manager و در نهایت Custom HTTPD Configurations بشید.

Custom HTTPD Configurations
Custom HTTPD Configurations

حالا دامنه سایت خودتون رو انتخاب کنید و جلوی نام دامنه روی openlitespeed.conf کلیک کنید. از بالای صفحه سمت راست روی گزینه Customize کلیک کنید و تب آخر یعنی The very last entry رو انتخاب کنید.

The very last entry.
The very last entry.

این کد رو به این قسمت اضافه کنید و در نهایت روی ذخیره کلیک کنید. اگر ارور دریافت کردید زیاد نگران نباشید! تغییرات در ۹۸ درصد مواقع ذخیره می‌شن:

  context /wp-content/uploads/edd {
  type                    NULL
  location                /home/username/domains/reza.com/public_html/wp-content/uploads/edd
  accessControl {
     deny 0.0.0.0/0
  }
}

به جای reza.com آدرس دامنه خودتون رو وارد کنید. به جای username هم نام کاربری هاست رو وارد کنید. اصلاً اگر مسیر /home صحیح نیست تنظیمش کنید و در نهایت روی ذخیره کلیک کنید. حالا آدرس مستقیم یکی از فایل‌های پوشه EDD رو مشاهده کنید؛ باید با خطای ۴۰۳ یا عدم سطح دسترسی مواجه بشید.

ضرورت ری‌استارت کردن وب‌سرور برای اعمال قوانین جدید در OpenLiteSpeed

یکی از تفاوت‌های بزرگ اِپن‌لایت‌استپید با آپاچی اینه که تغییرات فایل‌های کانفیگ به‌صورت آنی و خودکار روی سایت اعمال نمی‌شن. در وب‌سرور آپاچی کافیه فایل .htaccess رو ذخیره کنید تا همه‌چیز اکی بشه؛ اما در OpenLiteSpeed بعد از اینکه کد بالا رو در فایل vhost قرار دادید و ذخیره کردید، حتماً باید وب‌سرور رو یک‌بار ری‌استارت (Graceful Restart) کنید. اگر دسترسی به سرور لینوکس دارید، می‌تونید این کار رو از طریق پنل مدیریت خودِ لایت‌اسپید روی پورت ۷۰۸۰ یا با یه دستور ساده در ترمینال انجام بدید تا قوانین امنیتی جدید فعال بشن و دسترسی هکرها بسته بشه.

دلایل نمایش خطای ۵۰۰ یا از کار افتادن کل سایت پس از ذخیره کدهای vhost

اگر بعد از اضافه کردن کد مپینگ و دایرکتوری به فایل تنظیمات، به جای خطای ۴۰۳ روی فایل‌های لایسنس، کل سایتتون بالا نیومد و با ارور ۵۰۰ مواجه شدید، اصلاً دستپاچه نشید! این مشکل معمولاً به خاطر یه غلط املایی ساده در مسیردهی هاست شماست. اگر مسیر /home/username/... رو دقیقاً بر اساس نام کاربری دایرکت‌ادمین یا سی‌پنل خودتون ست نکرده باشید یا یه اسلش (/) رو جابه‌جا گذاشته باشید، وب‌سرور گیج می‌شه و برای حفظ امنیت کل پروسه رو متوقف می‌کنه. کافیه مسیر رو دوباره با دقت چک کنید تا همه‌چیز مثل روز اولش کار کنه.

ارور ۴۰۳
ارور ۴۰۳

محافظت همزمان از فایل‌های زیپ و پی‌دی‌اف فروشی با قابلیت Context

گاهی اوقات ممکنه نخواید کل یه پوشه رو مسدود کنید و فقط قصد دارید فرمت‌های خاصی مثل فایل‌های zip یا pdf که محصولات سایتتون هستن رو از دسترسی مستقیم نجات بدید. در وب‌سرور اپن‌لایت‌اسپید شما می‌تونید به جای مسدود کردن یه دایرکتوری خاص، نوع کانتکست رو تغییر بدید یا از عبارات منظم (Regex) استفاده کنید تا وب‌سرور به‌صورت هوشمند فقط فایل‌های نصبی یا دانلودی رو قفل کنه و اجازه نده کسی با حدس زدن نام فایل، اون‌ها رو رایگان دانلود کنه.

کد زیر رو باید دقیقاً مثل روش قبلی، به انتهای فایل openlitespeed.conf دامنه خودتون (در دایرکت‌ادمین یا سی‌پنل) اضافه کنید:

context exp:^/wp-content/uploads/edd/.*\.(zip|pdf)$ {
  type                    NULL
  location                /home/username/domains/reza.com/public_html/wp-content/uploads/edd/
  accessControl {
     deny 0.0.0.0/0
  }
}

تفاوت‌های عملکردی وب‌سرور OpenLiteSpeed با نسخه تجاری در پردازش کدهای امنیت

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

محدود کردن دسترسی به پوشه کدهای اصلی در wp-includes

به جز پوشه محصولات EDD، دایرکتوری‌های دیگه‌ای هم در وردپرس هستن که کاربر اصلاً نباید بهشون سرک بکشه؛ مثل پوشه wp-includes که قلب تپنده هسته وردپرسه و پر از فایل‌های پی‌اچ‌پی حساسه. شما می‌تونید دقیقاً لنگه همین کدی که بالاتر براتون توضیح دادم رو برای پوشه اینکلودز هم بنویسید. با این کار، اگر یه هکر بتونه از یه حفره امنیتی استفاده کنه و شل یا فایل مخربی رو اونجا آپلود کنه، به خاطر قانون deny 0.0.0.0/0 وب‌سرور بهش اجازه اجرا شدن نمیده و عملاً هکر نمی‌تونه کاری کنه.

روش تست زنده و اطمینان از مسدود شدن دسترسی با ابزار Inspect مرورگر

بعد از اینکه کارهای سخت رو انجام دادید و سرور رو ری‌استارت کردید، نوبت به شیرین‌ترین بخش کار یعنی تست کردن می‌رسه. برای اینکه مطمئن بشید لینک‌های دانلود کاملاً امن شده‌ان، آدرس مستقیم یکی از فایل‌های رسانه یا داکیومنت‌های داخل اون پوشه رو کپی کنید و در یه تب جدید مرورگر (ترجیحاً حالت ناشناس یا Incognito) اینتر بزنید. اگر صفحه سفید شد و با فونت درشت سیاه خطای 403 Forbidden رو دیدید، یعنی دمتون گرم، امنیت سایتتون رو تضمین کردید و دیگه هیچ‌کس بدون اجازه و پرداخت پول نمی‌تونه به محصولات باارزش شما دسترسی داشته باشه!

چطور فایل openlitespeed.conf رو در سی‌پنل پیدا و ویرایش کنیم؟

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

در قدم بعدی از منوی سمت چپ عبارت OpenLiteSpeed رو سرچ کنید یا به بخش پورت ۷۰۸۰ (کنسول مدیریتی لایت‌اسپید) برید تا لیست دامنه‌ها رو ببینید.

در قدم سوم روی دامنه مورد نظر کلیک کنید و وارد بخش Virtual Host Configuration بشید تا بتونید تب تنظیمات کانتکست رو باز کنید و کدهایی که بالاتر گفتیم رو دقیقاً در همین بخش پیست و ذخیره کنید.

فشرده‌سازی و بهینه‌سازی کدهای کانتکست برای بالا نگه‌داشتن سرعت سرور

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

در قدم اول برای جلوگیری از این مشکل، به جای اینکه برای هر پوشه یک کانتکست جداگانه بنویسید، از کدهای ترکیبی و عبارات منظم (Regex) استفاده کنید تا چند پوشه مشابه با یک بلاک کد مدیریت بشن.

در قدم بعدی مطمئن بشید که مقدار type رو حتماً روی حالت NULL یا Static گذاشته‌اید، چون اگر اشتباهاً روی حالت‌های پردازشی قرار بگیره، وب‌سرور به ازای هر کلیک کاربر منابع زیادی از سی‌پنل یا دایرکت‌ادمین رو مصرف میکنه.

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

چطور با ابزار FileZilla به پوشه قرنطینه EDD دسترسی گرافیکی داشته باشیم؟

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

در قدم بعدی اطلاعات اتصال FTP یا SFTP سرور (شامل آی‌پی، نام کاربری، رمز عبور و پورت اتصال) رو وارد کنید تا دایرکتوری‌های سرور به صورت گرافیکی براتون لود بشه.

در قدم سوم مستقیماً به مسیر public_html/wp-content/uploads/edd برید؛ حالا می‌بینید که به عنوان مدیر سایت به راحتی و با کشیدن و رها کردن (Drag & Drop) می‌تونید فایل‌ها رو آپلود، دانلود یا مدیریت کنید، در حالی که دسترسی کاربران از بیرون کاملاً بسته هست.

چطور از پوشه wp-content/uploads/edd در برابر حملات دکترینال اسکنرها محافظت کنیم؟

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

در قدم اول وارد تنظیمات فایروال سرور خودتون (مثل CSF یا ابزار امنیتی دایرکت‌ادمین) بشید.

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

در قدم سوم این فایروال رو جوری تنظیم کنید که آی‌پي شناسایی شده رو به صورت خودکار و دائم در لیست سیاه (Deny List) قرار بده تا کلاً دسترسی‌اش به سایت شما قطع بشه.

آموزش ساخت یک کانتکست اختصاصی برای مسدود کردن دسترسی به فایل‌های دیتابیس (SQL)

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

در قدم اول برای بستن این حفره، فایل openlitespeed.conf دامنه رو باز کنید.

در قدم بعدی یک کانتکست جدید با فرمت عبارات منظم بنویسید که هر فایلی با پسوند sql رو در کل مسیرهای سایت شکار کنه؛ کدی شبیه به این:

context exp:\.sql$ {
  type                    NULL
  accessControl {
     deny 0.0.0.0/0
  }
}

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

چطور بدون ری‌استارت کامل و با روش Graceful، تنظیمات جدید OpenLiteSpeed رو فعال کنیم؟

بزرگ‌ترین مشکل ری‌استارت کردن معمولی سرور اینه که کاربران آنلاین سایت در همان لحظه با قطعی مواجه می‌شن، اما اپن‌لایت‌اسپید قابلیتی به نام Graceful Restart داره که بدون قطعی سایت، کدهای جدید رو اعمال میکنه.

در قدم اول اگر از کنسول وب لایت‌اسپید روی پورت ۷۰۸۰ استفاده می‌کنید، از منوی بالا روی دکمه سبز رنگ هوشمند ری‌استارت کلیک کنید تا سرور به صورت نرم کدهای جدید رو جایگزین کنه.

در قدم بعدی اگر از طریق SSH به سرور وصل هستید، به جای کدهای ری‌استارت معمولی، دستور زیر رو وارد کنید تا نشست‌های کاربران فعال قطع نشه:

/usr/local/lsws/bin/lswsctrl graceful

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

چطور برای پوشه افزونه‌های دیگر مثل ووکامرس کانتکست مشابه بسازیم؟

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

در قدم اول به مدیریت فایل هاست خودتون برید و مسیر دقیق پوشه دانلودهای ووکامرس رو پیدا کنید (که معمولاً در مسیر wp-content/uploads/woocommerce_uploads قرار داره).

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

در قدم سوم تنظیمات رو ذخیره کنید و با روش Graceful سرور رو آپدیت کنید تا محصولات ووکامرسی شما هم از شر دانلودهای غیرمجاز در امان بمونن.

ابزارهای آنلاین تست امنیت و بررسی باز بودن لینک‌های مستقیم سایت

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

در قدم اول آدرس مستقیم یکی از محصولات گران‌قیمت یا حساس سایتتون رو کپی کنید.

در قدم بعدی به سایت‌های آنلاین تست هدر و امنیت مثل HTTPStatus.io یا ابزارهای آنلاین اسکنر امنیت سایت برید.

در قدم سوم لینک فایل رو در این ابزارها وارد کنید و دکمه تست رو بزنید؛ اگر در بخش نتیجه، کد وضعیت رو 403 Forbidden دیدید، یعنی کار شما بی‌نقص بوده، اما اگر کد وضعیت 200 OK بود، یعنی کدهای کانتکست شما هنوز فعال نشدن و باید دوباره مسیرهای هاست رو چک کنید.

چطور برای کاربران لاگین شده استثنا قائل بشیم تا فایل رو مستقیم ببینن؟

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

در قدم بعدی در بخش تنظیمات کانتکست مورد نظر، از کدهای شرطی یا Rewrite Rules استفاده کنید تا وب‌سرور ابتدا مرورگر کاربر رو چک کنه و ببینه آیا کوکیِ wordpress_logged_in_... روی مرورگرش فعال هست یا نه.

در قدم سوم شرط رو جوری بنویسید که اگر این کوکی وجود داشت، قانون deny 0.0.0.0/0 نادیده گرفته بشه و کاربر مستقیم به فایل برسه؛ این ترفند پیشرفته می‌تونه سرعت دانلود رو برای اعضای سایتت فوق‌العاده بالاتر ببره.

جمع‌بندی

در نهایت باید بگیم که وب‌سرور OpenLiteSpeed با وجود تمام مزایا و سرعت فوق‌العاده‌ای که به سایت‌های وردپرسی میده، در بحث امنیت و پردازش کدهای فایل .htaccess قلق‌های خاص خودش رو داره. قفل کردن پوشه‌های حساسی مثل محصولات EDD، ووکامرس یا حتی پوشه هسته وردپرس (wp-includes) با استفاده از قابلیت کانتکست، یکی از واجب‌ترین کارهایی هست که امنیت محصولات و اطلاعات سایت شما رو تضمین می‌کنه.

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

شاد و سربلند باشید.🙂

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

  1. U11600 ۱ اسفند ۱۳۹۸

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

    • تیم پشتیبانی تیم پشتیبانی ۱ اسفند ۱۳۹۸

      با سلام
      لطفا این آموزش را مشاهده بفرمایید: https://mihanwp.com/restrict-content/

      • U11600 ۱ اسفند ۱۳۹۸

        یک دنیا سپاس. دقیقا همین قسمت بود
        با تشکر از پاسخگویی سریع

        • تیم پشتیبانی تیم پشتیبانی ۱ اسفند ۱۳۹۸

          خواهش میکنم. پیروز باشید

گفتگو با تیم فروش سلام! دنبال پاسخ برای سوالات خود هستید؟ ما اینجا آماده کمک به شما هستیم...

در حال بارگذاری مقالات...

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

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

سوالی درباره محصولات سایت دارید؟ از ما بپرسید.