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

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

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

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

محافظت از حملات DDoS لایه ۳ و ۴

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

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

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

این محافظت در لایه‌ی اپلیکیشن و در سه سطح انجام می‌شود.

با فعال‌سازی چالش Cookie، در این حالت آروان در اولین درخواست هر کاربر یک پاسخ با کد وضعیت 307 ارسال می‌کند و از کاربر می‌خواهد که یک کوکی مشخص را در پاسخ اعمال و با همه‌ی درخواست‌های بعدی ارسال کند. در ادامه آروان این کوکی را بررسی می‌کند و در حالتی که معتبر باشد اجازه‌ی دسترسی به سایت را می‌دهد. (چنان‌چه این Redirect موجب اختلال در APIهای شما می‌شود، می‌توانید با ساخت قانونی در بخش «قوانین خاص» برای API مورد نظر این قابلیت را غیرفعال کنید). با اعمال این چالش، بیش‌تر بات‌های ساده را می‌توان شناسایی و مسدود کرد.

IPهای گوگل و موتورهای جست‌وجو از تمامی موارد اعمالی حفاظت از DDoS مستثنا هستند.

فعال سازی از طریق API

curl --location --request PATCH 'https://napi.arvancloud.ir/cdn/4.0/domains/example.com/ddos' \

--header 'authority: napi.arvancloud.ir' \

--header 'accept: application/json, text/plain, */*' \

--header 'accept-language: fa' \

--header 'authorization: APIKEY 1 2 3 4' \

--header 'cache-control: no-cache' \

--header 'content-type: application/json;charset=UTF-8' \

--header 'pragma: no-cache' \

--data-raw '{"protection_mode":"cookie"}'

چالش JS

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

فعال سازی از طریق API

curl --location --request PATCH 'https://napi.arvancloud.ir/cdn/4.0/domains/example.com/ddos' \

--header 'authority: napi.arvancloud.ir' \

--header 'accept: application/json, text/plain, */*' \

--header 'accept-language: fa' \

--header 'authorization: APIKEY 1 2 3 4' \

--header 'cache-control: no-cache' \

--header 'content-type: application/json;charset=UTF-8' \

--header 'pragma: no-cache' \

--data-raw '{"protection_mode":" javascript"}'

چالش Captcha

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

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

برای فعال‌سازی چالش Captcha، بسته‌ی سرویس CDN شما باید حرفه‌ای یا سازمانی باشد.

فعال سازی از طریق API

curl --location --request PATCH 'https://napi.arvancloud.ir/cdn/4.0/domains/example.com/ddos' \

--header 'authority: napi.arvancloud.ir' \

--header 'accept: application/json, text/plain, */*' \

--header 'accept-language: fa' \

--header 'authorization: APIKEY 1 2 3 4' \

--header 'cache-control: no-cache' \

--header 'content-type: application/json;charset=UTF-8' \

--header 'pragma: no-cache' \

--data-raw '{"protection_mode":"recaptcha"}

تغییر نوع کپچا با استفاده از API

curl --location --request PATCH 'https://napi.arvancloud.ir/cdn/4.0/domains/example.com/ddos' \
--header 'authority: napi.arvancloud.ir' \
--header 'accept: application/json, text/plain, */*' \
--header 'authorization: API KEY 1 2 3 4' \
--header 'cache-control: no-cache' \
--header 'content-type: application/json' \
--data-raw '{"protection_mode":"captcha","captcha_service":"hcaptcha","ttl":0}'

پارامتر captcha_service می‌تواند سه ورودی hCaptcha ،arCaptcha و reCAPTCHA داشته باشد که بسته به نوع سرویس انتخابی باید در درخواست API فرستاده شود.

در هر یک از چالش‌های مقابله با DDoS می‌توانید مدت زمان اعتبار چالش را به‌ازای هر کاربر تعیین کنید، به این معنا که به‌ازای تایید صلاحیت یک کاربر تا چه مدت زمانی کاربر مورد نظر نیازی به تایید مجدد نداشته باشد.

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

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

برای این کار در قسمت قوانین سفارشی روی افزودن قانون کلیک کنید.

حال می‌توانید مسیر مورد نظر خود را همراه با لیست IPها و یا همه‌ی IPها وارد و مشخص کنید که آیا چالش برای آن‌ها اعمال شود یا خیر.

نکات استفاده از fetch یا xhr هنگام فعال بودن چالش

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

استفاده از fetch

اگر از fetch برای درخواست زدن استفاده می‌کنید، باید داخل options مقدار credentials را include قرار دهید. مثال:

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

استفاده از xhr

اگر از xhr استفاده می‌کنید، باید مقدار withCredentials کلاینت را برابر با true تنظیم کنید. مثال:

let xhttp = new XMLHttpRequest();

xhttp.open("GET", "https://sub.example.com", true);

xhttp.withCredentials = true;

xhttp.send();

استفاده از ajax

اگر از ajax استفاده می‌کنید، باید آپشن xhrFields.withCredentials را برابر true قرار دهید. مثال:

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

مدیریت درخواست Preflight یا CORS

برای ارسال درخواست به یک زیردامنه حتمن باید Headerهای Preflight به گونه‌ای (برای مثال با استفاده از قوانین صفحه) مدیریت شده باشند.

اگر نیازی به پاسخ درخواست ارسالی ندارید (درخواست opaque است) می‌توانید mode را روی no-cors تنظیم کنید. مثال:

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