پرش به مطلب اصلی

جلوگیری از حملات DDoS

قابلیت محافظت در برابر حملات منع سرویس توزیع‌شده در CDN آبالون، با ارائه چهار سطح مختلف دفاعی، به شما کمک می‌کند تا از وب‌سایت خود در برابر انواع حملات DDoS محافظت کنید. برای فعال‌سازی این قابلیت، کافی است وارد پنل کاربری آبالون شوید، به بخش CDN و سپس «امنیت» بروید و گزینه‌ «جلوگیری از حملات DDoS» را انتخاب کنید.

محافظت در برابر حملات لایه ۳ و ۴

Alt text

در حالت پایه، حملات مربوط به لایه‌های ۳ و ۴ شبکه (Network & Transport Layers) شناسایی و دفع می‌شوند. این حملات شامل ترافیک‌هایی با حجم بالا نظیر SYN Flood ،UDP Flood و سایر حملات مشابه هستند که مستقیماً زیرساخت شبکه را هدف قرار می‌دهند.

نکته

این سطح از محافظت، تنها برای لایه‌های زیرین شبکه فعال است و حملات لایه ۷ (Application Layer) را پوشش نمی‌دهد.

محافظت از حملات DDoS لایه ۷

Alt text

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

چالش‌های امنیتی مقابله با DDoS

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

با فعال‌سازی این چالش، آبالون در اولین درخواست کاربر، یک پاسخ با کد وضعیت HTTP 307 ارسال می‌کند و از کاربر می‌خواهد یک کوکی مشخص را در مرورگر ذخیره کرده و همراه درخواست‌های بعدی ارسال کند. این کوکی در ادامه بررسی می‌شود و در صورت اعتبار، به کاربر اجازه‌ دسترسی داده می‌شود. در صورتی که این ریدایرکت موجب اختلال در عملکرد APIهای شما شود، می‌توانید از طریق بخش «قوانین خاص»، این چالش را برای مسیرهای مورد نظر غیرفعال کنید. این روش برای شناسایی و مسدودسازی بات‌های ساده بسیار مؤثر است.

چالش JavaScript (JS)

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

چالش Captcha

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

مدت زمان اعتبار چالش‌ها

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

غیرفعال‌سازی محافظت DDoS برای یک مسیر خاص

اگر چالش DDoS برای مسیری از دامنه‌ شما باعث اختلال شده است (مانند سرویس API)، باید آن مسیر را در آبالون به‌صورت Glob وارد کنید تا چالش DDoS روی آن اعمال نشود.

Alt text

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

نکات مرتبط با استفاده از fetch ،XHR و Ajax هنگام فعال بودن چالش امنیتی

اگر در دامنه‌ اصلی شما (مثلاً example.com) اسکریپتی وجود دارد که به زیردامنه‌ای مانند sub.example.com درخواست ارسال می‌کند، هنگام فعال بودن چالش‌های امنیتی آبالون رعایت نکات زیر ضروری است:

در صورت استفاده از fetch:

برای اطمینان از عبور موفق درخواست، باید گزینه‌ credentials را روی 'include' تنظیم کنید:

fetch("https://sub.example.com", { credentials: 'include' });

در صورت استفاده از XMLHttpRequest (XHR):

مقدار withCredentials باید برابر با true تنظیم شود تا کوکی‌ها و اطلاعات احراز هویت به درستی ارسال شوند:

let xhttp = new XMLHttpRequest();
xhttp.open("GET", "https://sub.example.com", true);
xhttp.withCredentials = true;
xhttp.send();

در صورت استفاده از Ajax کتابخانه jQuery:

گزینه‌ xhrFields.withCredentials باید به صورت زیر تنظیم شود:

$.ajax("https://sub.example.com", { xhrFields: { withCredentials: true } });

درخواست‌های Preflight و مدیریت CORS:

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

در صورت عدم نیاز به پاسخ (opaque request):

اگر پاسخ سمت سرور برایتان اهمیتی ندارد، می‌توانید از حالت no-cors استفاده کنید:

fetch("https://sub.example.com", { mode: 'no-cors', credentials: 'include' });