محدودیت تعداد درخواست
Rate Limiting یا محدودیت نرخ، راهکاری برای کنترل ترافیک ورودی به یک شبکه است. برای نمونه با استفاده از Rate Limit میتوان مشخص کرد که در هر دقیقه کاربر فقط مجاز به ارسال تعداد مشخصی درخواست (Request) باشد و اگر تعداد درخواستها از این میزان بیشتر شد، خطا داده شود. هدف از پیادهسازی Rate limiting عبارت است از:
- مدیریت بهتر جریان ترافیک
- افزایش امنیت با پیشگیری از بروز حملاتی همچون DDoS، حملات Brute Force یا هر نوع حملهی مخرب دیگری در لایهی اپلیکیشن
تنظیمات Rate Limiting ابر آروان
با استفاده از قابلیت Rate Limiting ابر آروان، میتوانید تعداد درخواست بهازای هر IP را بر اساس ثانیه، ساعت یا روز به یک مسیر و یا کل دامنهی خود محدود کنید.
با توجه به اینکه قابلیت Rate Limiting ابر آروان امکان تعریف قوانین مختلف در مسیرهای متفاوت را فراهم کرده است، میتوانید برای هر مسیر سیاست و محدودیت متفاوتی داشته باشید.
تنظیمات Rate Limiting در پنل کاربری
برای اعمال یک قانون محدودیت جدید، در پنل کاربری ابر آروان، بخش CDN و در قسمت «محدودیت تعداد درخواستها»، روی گزینهی افزودن قانون کلیک کنید.
در این بخش میتوانید پارامترهای زیر را برای اعمال محدودیت تنظیم کنید:
- مسیر محدودیت
- توضیحات
- تعداد درخواست
- بازهی زمانی
- متدهای مجاز
- لیست IPهای مجاز
توجه داشته باشید که شیوهی ورود مسیر باید بر اساس الگوی Glob باشد.
در قسمت محدودیت، دو بخش «تعداد درخواست» و «بازهی زمانی» وجود دارند. عدد وارد شده در بخش تعداد درخواست، بیشترین تعداد درخواستهای ارسالی از یک IP در بازهی زمانی که مشخص میکنید را نشان میدهد. اگر تعداد درخواست ارسالی IP در آن بازهی زمانی از این میزان بیشتر شود، با محدودیت مواجه شده و خطای ۴۲۹ دریافت خواهد کرد. از سوی دیگر، بخش «بازهی زمانی» مشخصکنندهی مدت زمانی است که «تعداد درخواست» مشخصشده، از یک IP میتواند ارسال شود. اگر در این بازه تعداد بیشتری درخواست از IP یکسان ارسال شود، کاربر با محدودیت و خطای ۴۲۹ مواجه میشود.
پس از مشخص کردن این دو مقدار، میتوانید تعیین کنید اگر از یک IP بیش از حد مجاز درخواست داشتید، برای یک مدت زمان مشخص، درخواستهای این IP با کد وضعیت ۴۲۹ مسدود شود.
در ادامه، لیست متدها و IP های مجاز قرار دارد که محدودیت تعریف شده در این قانون شامل متدها و IP های وارد شده در آن نخواهد بود. شما میتوانید در این دو بخش مشخص کنید روی چه متدهای HTTP و IPهایی این محدودیت اعمال نشود.
این بخش و بخش توضیحات بخشهایی هستند که ورود اطلاعات در آنها ضروری نیست و میتوانند خالی بمانند.
در انتها پس از ثبت اطلاعات مورد نظر و با انتخاب گزینهی ذخیره، محدودیت اعمال خواهد شد.
تعیین رفتار ماژول محدودیت تعداد درخواست
در ماژول محدودیت تعداد درخواست (Rate Limit) میتوان مشخص کرد اگر نرخ درخواست برای یک مسیر خاص بیشتر از حد تعریف شده باشد ابر آروان باید چه رفتاری از خود در برابر درخواستها نشان دهد. در این حالت میتوان درخواستهای بعدی را مسدود یا با چالش DDoS مواجه کرد. با انتخاب چالش DDoS میتوان سطح محافظت و همچنین مدت زمان اعتبار چالش را هم تعیین کرد.
ایجاد یک قانون با عملگر چالش با استفاده از API:
curl --location --request POST 'https://napi.arvancloud.ir/cdn/4.0/domains/example.com/rate-limit/rules' \
--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' \
--header 'origin: https://panel.arvancloud.ir' \
--header 'pragma: no-cache' \
--data-raw '{"is_enabled":true,"url_pattern":"example.com/**","description":"","exclude_sources":[],"rate":1,"burst":4000000,"block_duration":0,"time_duration":10,"allowed_methods":[],"action":"challenge","action_details":{"mode":1,"ttl":120,"https_only":false}}'
- در ایجاد یک قانون با عملگر چالش از طریق API پارامتر mode میتواند برابر با سه مقدار 1 و 2 و 3 باشد که مقدار یک برابر چالش کوکی، مقدار دو برابر با چالش js و مقدار 3 برابر با چالش کپچا است.
- پارامتر TTL بیانگر مدت زمانی است که چالش DDoS معتبر است و تا زمان انقضای آن کاربر دوباره احراز وضعیت نمیشود.
تنظیمات Rate Limiting بهوسیله API
همهی تنظیمات Rate Limit قابل تعریف در پنل ابر آروان از طریق API این قابلیت مطابق جدول زیر در اختیار شما قرار دارد:
کاربرد | API |
---|---|
دریافت اطلاعات محدودیتهای Rate-Limit دامنه | Get Rate-Limit settings |
تغییر تنظیمات Rate-Limit دامنه | Update domain's Rate-Limit configuration |
تعریف و اضافه کردن قانون جدید Rate-Limit | Store new Rate-Limit rule |
دریافت جزییات یک قانون Rate-Limit | Get Rate-Limit's rule information |
تغییر تنظیمات یک قانون Rate-Limit | Update the Rate-Limit's rule |
حذف یک قانون Rate-Limit | Delete Rate-Limit's rule |
تغییر اولویت یک قانون Rate-Limit | Change priority of Rate-Limit's rules |
مثال: محدودیت دسترسی به یک مسیر به ازای ۲۰ درخواست در ۱ روز
فرض کنید در وبسایت شما یک فرم تماس وجود دارد. برای جلوگیری از حملات DDoS یا Brute Force میتوانید یک محدودیت متناسب با تعداد درخواستهای دریافتی روی api ارسال این فرم تعریف کنید. به عنوان نمونه دسترسی به مسیر www.example.com/api/contact/form را محدود به ۲۰ درخواست در یک روز کنید و اگر از یک IP بیش از این درخواست داشتید آن را به مدت ۲۴ ساعت مسدود کنید. همچنین این محدودیت روی متد GET و از IP مبدا 1.2.3.4 اعمال نشود. شما میتوانید این قانون را بهشکل زیر از طریق پنل و API اعمال کنید.
curl --location --request POST 'https://napi.arvancloud.ir/cdn/4.0/domains/example.com/rate-limit/rules' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <Bearer Token>' \
--data-raw '{
"url_pattern": "example.com/api/contact/form",
"rate": 20,
"time_duration": 86400,
"is_enabled": true,
"description": "test",
"exclude_sources": [
"1.2.3.4/32"
],
"burst": 4000000,
"block_duration": 86400,
"allowed_methods": [
"GET"
]
}'
اولویتدهی به محدودیتها
هنگام محاسبهی تعداد درخواستهای یک کاربر و تطبیق آن با قوانین موجود، اولویتها به ترتیب و با شروع از اولویت ۱ پردازش میشوند. یعنی اگر کاربری با محدودیت قانون ۱ مواجه شود، دیگر قوانین با محدودیت پایینتر دربارهی این کاربر بررسی نخواهد شد.به کمک اولویتدهی برای مسیرهای مختلف، میتوان سیاستهای مختلفی برای سایت تعیین کرد. بهعنوان مثال، مسیرهای با حساسیت کمتر را در ابتدای لیست و مسیرهای با حساسیت بالاتر را در انتهای فهرست قوانین قرار دهید. فرض کنیم که میخواهید کاربران را برای دستیابی به دو مسیر زیر محدود کنیم:
زمان | تعداد درخواست | مسیر |
---|---|---|
۶۰ s | ۵ | example.com/api/login/** |
۶۰ s | ۱۰ | example.com/api/** |
در این حالت بهتر است که مسیر ۱ با یک قانون با اولویت بالاتر (عدد اولویت ۱) و مسیر ۲ را با اولویت پایینتر (عدد اولویت ۲) تنظیم شود.