در این صفحه، تنظیمات دیواره آتش لایه 7 در CDN را بررسی میکنیم: ساختار قانون، عملیات، گزینههای هر عملیات، شرطها و محدودیتهای آنها.
برای ساخت اولین قانون، اولین قانون دیواره آتش (Firewall) را بسازید را دنبال میکنیم. ترکیب گروههای شرط در منطق شروط DNF آمده است.
ساختار قانون
هر قانون شامل موارد زیر است:
| گزینه | مقدار | توضیح |
|---|---|---|
| نام | حداکثر ۶۴ کاراکتر | نام قانون که در همان CDN باید یکتا باشد |
| فعال | فعال / غیرفعال | قانون غیرفعال در ارزیابی شرکت نمیکند. |
| عملیات | یکی از عملیات فایروال | عملیاتی که روی درخواست منطبق اجرا میشود. |
| شرطها | حداکثر ۱۰ گروه، هر گروه حداکثر ۱۰ شرط | مشخص میکند عملیات روی کدام درخواستها اجرا شود. |
قانون جدید به انتهای فهرست قوانین اضافه میشود و بهصورت پیشفرض فعال است.
ترتیب قوانین
قوانین فعال از بالا به پایین بررسی میشوند. با منطبق شدن درخواست با اولین قانون فعال، عملیات همان قانون اجرا میشود و قوانین بعدی برای آن درخواست بررسی نمیشوند. قانون
Allowنیز ارزیابی را متوقف میکند و درخواست را بدون اعمال قوانین پایینتر عبور میدهد.
حداکثر تعداد قوانین فعال و غیرفعال روی یک CDN برابر ۱۲۰ قانون است.
مجموع الگوهای Glob روی مسیر، مسیر بههمراه Query، Host و کویری استرینگ حداکثر ۱۲۰ مقدار است.
عملیات
| عملیات | توضیح |
|---|---|
| Redirect | درخواست را به URL دیگری ریدایرکت میکند. |
| Allow | درخواست را عبور میدهد و قوانین پایینتر برای آن اجرا نمیشوند. |
| Block | درخواست را رد میکند و به آپاستریم ارسال نمیشود. |
| Ratelimit | نرخ درخواستها را برای یک شناسه محدود میکند. |
| JS | چالش JavaScript را به مرورگر ارایه میکند. |
| Captcha | چالش Google reCAPTCHA v2 را ارایه میکند. |
| Cookie | چالش مبتنی بر Cookie را اجرا میکند. |
| Basic auth | احراز هویت HTTP Basic را درخواست میکند. |
| Static Page | یک پاسخ HTML ثابت را بهجای پاسخ آپاستریم ارایه میکند. |
| Cache Bypass | درخواست را بدون استفاده از کش به آپاستریم ارسال میکند. |
| Force TLS | درخواست HTTP را با کد 301 به HTTPS ریدایرکت میکند. |
در لاگ درخواست، نام قانون منطبق و عملیات اجراشده قابل مشاهده است. فهرست فیلدهای مربوط به فایروال را در مرجع فیلدهای لاگ درخواست دامنه میبینیم.
Redirect
درخواست منطبق به URL مقصد ریدایرکت میشود.
| گزینه | مقدار | پیشفرض |
|---|---|---|
| کد وضعیت | 301 تا 308 | 301 |
| آدرس URL مقصد | URL مطلق با http:// یا https:// | — |
| مسیر درخواست ورودی، به انتهای URL مقصد اضافه شود | فعال / غیرفعال | غیرفعال |
| پارامترهایی که در کوئری درخواست ورودی هست، به URL مقصد ارسال شود | فعال / غیرفعال | غیرفعال |
| آدرس درخواست ورودی، در قالب یک پارامتر کوئری به نام Referrer به آدرس مقصد ارسال شود | فعال / غیرفعال | غیرفعال |
| افزودن کوئری استرینگ | حداکثر ۱۰ پارامتر نام/مقدار | خالی |
URL مقصد باید با http:// یا https:// و یک دامنه یا IPv4 شروع شود.
حلقه ریدایرکت
اگر شرط قانون خود مقصد را دوباره منطبق کند، یا قانون روی همه hostnameهای همان CDN اعمال شود، مرورگر ممکن است با
ERR_TOO_MANY_REDIRECTSروبهرو شود. شرط Host را به مبدا محدود میکنیم و پروتکل آپاستریم را با ریدایرکت HTTPS مبدا هماهنگ نگه میداریم. جزییات آپاستریم در مرجع تنظیمات آپاستریم آمده است.
Allow
Allow گزینه اضافهای ندارد.
درخواست منطبق عبور میکند و قوانین پایینتر برای همان درخواست اجرا نمیشوند.
جایگاه Allow
برای مستثنی کردن مسیر، IP یا کشور از قوانین سختگیرانهتر، قانون
Allowرا بالاتر از آن قوانین میگذاریم. اگر پایینتر باشد، به آن نمیرسد.
Block
درخواست منطبق رد میشود و به آپاستریم ارسال نمیشود.
| گزینه | مقدار | پیشفرض |
|---|---|---|
| کد وضعیت | 200 تا 499 | 403 |
| قالب HTML | حداکثر ۵۱۲۰ کاراکتر | صفحه پیشفرض |
| هدرهای پاسخ | اختیاری؛ نام هدر حداکثر ۲۵۵ و مقدار حداکثر ۱۰۲۴ کاراکتر | خالی |
قالب پاسخ Block از متغیر پشتیبانی نمیکند.
Ratelimit
تعداد درخواستهای مجاز یک شناسه را در یک بازه زمانی محدود میکنیم.
الگوریتم
| گزینه | توضیح |
|---|---|
| Fixed Window | حداکثر تعداد مشخصی درخواست در هر بازه زمانی مجاز است. |
| Leaky Bucket | درخواستها با نرخ مشخص عبور میکنند و درخواستهای مازاد تا سقف Burst با تاخیر پردازش میشوند. |
رفتار این دو الگوریتم، از جمله پنجره هر لبه و تاخیر Burst، در محدودیت نرخ (Rate Limit) چگونه کار میکند؟ است.
در Fixed Window، تعداد درخواست مجاز در هر دوره زمانی (ثانیه) با گزینه تعداد درخواست مشخص میشود.
در Leaky Bucket، نرخ پایدار درخواستها با گزینه نرخ مجاز و ظرفیت درخواستهای مازاد با گزینه نرخ اضافه (با ایجاد تاخیر) مشخص میشود.
تنظیمات
| گزینه | مقدار | پیشفرض |
|---|---|---|
| تعداد درخواست / نرخ مجاز | عدد بزرگتر یا مساوی 1 | 100 در Fixed Window؛ 10 در Leaky Bucket |
| دوره زمانی | 1 تا 3600 ثانیه | 10 |
| نرخ اضافه (با ایجاد تاخیر) | عدد بزرگتر یا مساوی 0؛ فقط Leaky Bucket | 0 |
| مدت زمان جریمه کاربر | 1 تا 3600 ثانیه | 1 |
| کد وضعیت نرخ غیرمجاز | 200 تا 499 | 429 |
| قالب HTML پاسخ نرخ غیرمجاز | حداکثر ۵۱۲۰ کاراکتر | صفحه پیشفرض |
| هدرهای پاسخ | اختیاری؛ مانند Block | خالی |
| روش شناسایی کاربر | IP، JWT، JA4، Host | IP |
| کد وضعیت عدم شناسایی کاربر | 200 تا 499 | 412 |
| قالب HTML عدم شناسایی کاربر | حداکثر ۵۱۲۰ کاراکتر | صفحه پیشفرض |
جریمه پس از عبور از سقف
پس از عبور یک شناسه از سقف مجاز، تا پایان مدت زمان جریمه کاربر درخواستهای همان شناسه مسدود میمانند؛ حتی اگر هنوز داخل پنجره مجاز باشند.
روش شناسایی کاربر
| گزینه | توضیح |
|---|---|
| IP | درخواستها بر اساس آدرس IP عمومی شمارش میشوند. چند کاربر پشت یک NAT یک سهمیه مشترک دارند. |
| JWT | درخواستها بر اساس هویت استخراجشده از JWT شمارش میشوند. |
| JA4 (شناسایی براساس فینگر پرینتینگ) | درخواستها بر اساس اثر انگشت TLS بههمراه IP شمارش میشوند. |
| Host | درخواستها بر اساس Host شمارش میشوند. |
برای روش JWT، تنظیمات زیر را نیز مشخص میکنیم:
| گزینه | مقدار |
|---|---|
| نام هدر | هدری که JWT در آن ارسال میشود؛ معمولا Authorization |
| Payload key | کلید هویت در Payload، مانند sub یا user_id |
| Secret | کلید مورد استفاده برای اعتبارسنجی امضای JWT |
شکست شناسایی JWT
اگر هدر، قالب توکن یا امضا معتبر نباشد، بهجای اعمال سقف نرخ، کد وضعیت عدم شناسایی کاربر (پیشفرض
412) برگردانده میشود. هدر معمولاAuthorizationبا قالبBearer <token>است.
JS
JS گزینه اضافهای ندارد.
با این عملیات، یک چالش JavaScript به مرورگر ارایه میشود. پس از حل موفق چالش، درخواستهای بعدی کاربر میتوانند عبور کنند.
اعتبار حل چالش بهصورت پیشفرض ۱۲۰۰ ثانیه است.
Captcha
در حال حاضر فقط Google reCAPTCHA v2 با گزینه I’m not a robot پشتیبانی میشود.
| گزینه | مقدار |
|---|---|
| Secret Key | ۱ تا ۱۲۸ کاراکتر |
| Site key | ۱ تا ۱۲۸ کاراکتر |
اعتبار حل چالش بهصورت پیشفرض ۱۲۰۰ ثانیه است.
جابهجایی کلیدها
Site key و Secret Key را جابهجا وارد نمیکنیم؛ در این حالت چالش در صفحه بارگذاری نمیشود.
Cookie
Cookie گزینه اضافهای ندارد.
در پاسخ اولیه یک Cookie موقت تنظیم میشود و کلاینت با 307 به همان URI بازگردانده میشود. اگر Cookie معتبر در درخواست بعدی ارسال شود، درخواست عبور میکند.
اعتبار Cookie بهصورت پیشفرض ۱۲۰۰ ثانیه است.
Basic auth
| گزینه | مقدار |
|---|---|
| نام کاربری دلخواه | ۱ تا ۲۵۵ کاراکتر |
| گذرواژه دلخواه | ۱ تا ۲۵۵ کاراکتر |
| متن راهنما | اختیاری؛ ۱ تا ۱۰۲۴ کاراکتر |
Static Page
بهجای ارسال درخواست به آپاستریم، HTML و کد وضعیت مشخصشده به کلاینت برگردانده میشود.
| گزینه | مقدار | پیشفرض |
|---|---|---|
| کد وضعیت | 200 تا 499 | 200 |
| قالب HTML | حداکثر ۵۱۲۰ کاراکتر | خالی |
| هدرهای پاسخ | اختیاری؛ مانند Block | خالی |
Cache Bypass
Cache Bypass گزینه اضافهای ندارد.
درخواست منطبق از کش Edge استفاده نمیکند و برای دریافت پاسخ به آپاستریم ارسال میشود.
Force TLS
Force TLS گزینه اضافهای ندارد.
اگر درخواست با http ارسال شود، با کد 301 به https:// همان Host و مسیر درخواست ریدایرکت میشود.
درخواستهایی که از ابتدا با HTTPS ارسال شدهاند، بدون تغییر عبور میکنند.
شرطها
شرطها مشخص میکنند عملیات روی کدام درخواستها اجرا شود.
شرطهای هر گروه با و و گروهها با یا ترکیب میشوند. فرمول، سقف گروه و معکوس کردن شرط را در منطق شروط DNF مطالعه میکنیم.
در پنل، برای افزودن شرط به همان گروه از افزودن شرط جدید (و) و برای ایجاد گروه جدید از افزودن شرط جدید (یا) استفاده میکنیم.
انواع شرط
| شرط | عملگرهای قابل انتخاب | مقدار |
|---|---|---|
| باتها (موتورهای جستوجو) | جزو رباتهای شناخته شده باشد / جزو هیچیک از رباتهای شناختهشده نباشد | — |
| TLS | درخواست http باشد / درخواست https باشد | — |
| هاست | عملگرهای رشته و Glob | hostname یا IPv4 |
| مسیر | عملگرهای رشته و Glob | مسیر؛ با / شروع میشود و Query ندارد |
| کوئری استرینگ | عملگرهای رشته، Glob و وجود | نام و مقدار پارامتر |
| کشور | برابر باشد / نباشد | کد کشور از فهرست GeoIP |
| آدرس IP | IP Set یا CIDR | IP، CIDR یا نام IP Set |
| ASN | برابر، نباشد، کمتر، بزرگتر | شماره ASN |
| کوکی | عملگرهای رشته، Glob و وجود | نام و مقدار Cookie |
| هدر | عملگرهای رشته، Glob و وجود | نام و مقدار Header |
| HTTP method | برابر باشد / نباشد | GET، POST، PURGE، PUT، HEAD، OPTIONS، DELETE، PATCH |
| مسیر + کوئری استرینگ | عملگرهای رشته و Glob | مسیر کامل بههمراه Query |
برای کشور حداکثر ۱۰ مقدار و برای ASN حداکثر ۱۰ مقدار میتوانیم مشخص کنیم.
برای نام Header، Cookie و Query parameter حداکثر ۱۲۸ کاراکتر و برای مقدارهای رشتهای معمولا حداکثر ۴۰۹۶ کاراکتر میتوانیم مشخص کنیم.
در هر شرط حداکثر ۱۰ مقدار میتوانیم مشخص کنیم.
شرطهای خارج از فرم
شرط پورت، نسخه HTTP و نام لبه در فرم فایروال قابل انتخاب نیستند.
عملگرهای رشته و Glob
| عملگر | رفتار |
|---|---|
| برابر باشد با یکی از | مقدار دقیقا با یکی از مقادیر مشخصشده برابر باشد. |
| برابر نباشد با هیچیک از | مقدار با هیچیک از مقادیر مشخصشده برابر نباشد. |
| شامل یکی از مقادیر باشد | مقدار شامل یکی از مقادیر مشخصشده باشد. |
| شامل هیچیک از مقادیر نباشد | مقدار شامل هیچیک از مقادیر مشخصشده نباشد. |
| شروع شود با یکی از | مقدار با یکی از مقادیر مشخصشده شروع شود. |
| شروع نشود با هیچیک از | مقدار با هیچیک از مقادیر مشخصشده شروع نشود. |
| تمام شود با | مقدار با یکی از مقادیر مشخصشده تمام شود. |
| تمام نشود با | مقدار با هیچیک از مقادیر مشخصشده تمام نشود. |
| Glob match | مقدار با الگوی Glob منطبق باشد. |
| Glob not match | مقدار با الگوی Glob منطبق نباشد. |
| Glob match غیرحساس به حروف | مقدار با الگوی Glob، بدون حساسیت به بزرگی و کوچکی حروف، منطبق باشد. |
| Glob not match غیرحساس به حروف | مقدار با الگوی Glob، بدون حساسیت به بزرگی و کوچکی حروف، منطبق نباشد. |
| وجود داشته باشد | Header، Cookie یا Query String موردنظر وجود داشته باشد. |
| وجود نداشته باشد | Header، Cookie یا Query String موردنظر وجود نداشته باشد. |
عملگر وجود داشته باشد و وجود نداشته باشد فقط برای Header، Cookie و Query String قابل استفاده است.
عملگرهای IP
| عملگر | رفتار |
|---|---|
| در IP Set وجود داشته باشد | IP در IP Set انتخابشده وجود داشته باشد. |
| در IP Set وجود نداشته باشد | IP در IP Set انتخابشده وجود نداشته باشد. |
| زیرمجموعهای باشد از یکی از | IP با یکی از CIDRهای مشخصشده منطبق باشد. |
| زیرمجموعه هیچیک نباشد | IP با هیچیک از CIDRهای مشخصشده منطبق نباشد. |
برای یک IP میتوانیم از /32 استفاده کنیم؛ برای مثال 192.168.1.1/32.
برای یک رنج نیز میتوانیم CIDR مشخص کنیم؛ برای مثال 185.166.104.0/24.
برای ساخت و نگهداری IP Set، استفاده از IP Set در دیواره آتش (Firewall) را مطالعه میکنیم. نقش فهرست در IP Set چیست؟ آمده است.
الگوی Glob
با عملگرهای Glob match و Glob match غیرحساس به حروف از الگوی Glob استفاده میکنیم.
| الگو | نمونه | منطبق | نامنطبق |
|---|---|---|---|
{a,b} | /{static,build}/*.js | /static/file.js | /src/file.js |
[abc] | /[ab]-x/*.js | /a-x/f.js | /d-x/f.js |
[!abc] | /[!ab]-x/*.js | /d-x/f.js | /a-x/f.js |
? | ?.js | a.js | file.js |
* | *.js | one.js | file.md |
الگوهای خارج از پشتیبانی
**بازگشتی،!(a|b)،?()،*()،+()و@()در Glob فایروال پشتیبانی نمیشوند.
محدودیتها
| مورد | محدودیت |
|---|---|
| تعداد قوانین در هر CDN | حداکثر 120 |
| گروه شرط در هر قانون | حداکثر 10 |
| شرط در هر گروه | حداکثر 10 |
| مقدار در هر شرط | حداکثر 10 |
| الگوهای Glob روی مسیر، URI، Host و Query String | حداکثر 120 مقدار در مجموع |
| طول نام قانون | حداکثر 64 کاراکتر |
| طول نام Header، Cookie و Query parameter | حداکثر 128 کاراکتر |
| طول مقدار رشتهای | حداکثر 4096 کاراکتر |
| قالب HTML پاسخ | حداکثر 5120 کاراکتر |
| نام Header پاسخ | حداکثر 255 کاراکتر |
| مقدار Header پاسخ | حداکثر 1024 کاراکتر |
