در این صفحه، تنظیمات دیواره آتش لایه 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 تا 308301
آدرس 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 تا 499403
قالب HTMLحداکثر ۵۱۲۰ کاراکترصفحه پیش‌فرض
هدرهای پاسخاختیاری؛ نام هدر حداکثر ۲۵۵ و مقدار حداکثر ۱۰۲۴ کاراکترخالی

قالب پاسخ Block از متغیر پشتیبانی نمی‌کند.

Ratelimit

تعداد درخواست‌های مجاز یک شناسه را در یک بازه زمانی محدود می‌کنیم.

الگوریتم

گزینهتوضیح
Fixed Windowحداکثر تعداد مشخصی درخواست در هر بازه زمانی مجاز است.
Leaky Bucketدرخواست‌ها با نرخ مشخص عبور می‌کنند و درخواست‌های مازاد تا سقف Burst با تاخیر پردازش می‌شوند.

رفتار این دو الگوریتم، از جمله پنجره هر لبه و تاخیر Burst، در محدودیت نرخ (Rate Limit) چگونه کار می‌کند؟ است.

در Fixed Window، تعداد درخواست مجاز در هر دوره زمانی (ثانیه) با گزینه تعداد درخواست مشخص می‌شود.

در Leaky Bucket، نرخ پایدار درخواست‌ها با گزینه نرخ مجاز و ظرفیت درخواست‌های مازاد با گزینه نرخ اضافه (با ایجاد تاخیر) مشخص می‌شود.

تنظیمات

گزینهمقدارپیش‌فرض
تعداد درخواست / نرخ مجازعدد بزرگ‌تر یا مساوی 1100 در Fixed Window؛ 10 در Leaky Bucket
دوره زمانی1 تا 3600 ثانیه10
نرخ اضافه (با ایجاد تاخیر)عدد بزرگ‌تر یا مساوی 0؛ فقط Leaky Bucket0
مدت زمان جریمه کاربر1 تا 3600 ثانیه1
کد وضعیت نرخ غیرمجاز200 تا 499429
قالب HTML پاسخ نرخ غیرمجازحداکثر ۵۱۲۰ کاراکترصفحه پیش‌فرض
هدرهای پاسخاختیاری؛ مانند Blockخالی
روش شناسایی کاربرIP، JWT، JA4، HostIP
کد وضعیت عدم شناسایی کاربر200 تا 499412
قالب 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 موقت تنظیم می‌شود و کلاینت با 307 به همان URI بازگردانده می‌شود. اگر Cookie معتبر در درخواست بعدی ارسال شود، درخواست عبور می‌کند.

اعتبار Cookie به‌صورت پیش‌فرض ۱۲۰۰ ثانیه است.

Basic auth

گزینهمقدار
نام کاربری دلخواه۱ تا ۲۵۵ کاراکتر
گذرواژه دلخواه۱ تا ۲۵۵ کاراکتر
متن راهنمااختیاری؛ ۱ تا ۱۰۲۴ کاراکتر

Static Page

به‌جای ارسال درخواست به آپ‌استریم، HTML و کد وضعیت مشخص‌شده به کلاینت برگردانده می‌شود.

گزینهمقدارپیش‌فرض
کد وضعیت200 تا 499200
قالب HTMLحداکثر ۵۱۲۰ کاراکترخالی
هدرهای پاسخاختیاری؛ مانند Blockخالی

Cache Bypass

Cache Bypass گزینه اضافه‌ای ندارد.

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

Force TLS

Force TLS گزینه اضافه‌ای ندارد.

اگر درخواست با http ارسال شود، با کد 301 به https:// همان Host و مسیر درخواست ریدایرکت می‌شود.

درخواست‌هایی که از ابتدا با HTTPS ارسال شده‌اند، بدون تغییر عبور می‌کنند.

شرط‌ها

شرط‌ها مشخص می‌کنند عملیات روی کدام درخواست‌ها اجرا شود.

شرط‌های هر گروه با و و گروه‌ها با یا ترکیب می‌شوند. فرمول، سقف گروه و معکوس کردن شرط را در منطق شروط DNF مطالعه می‌کنیم.

در پنل، برای افزودن شرط به همان گروه از افزودن شرط جدید (و) و برای ایجاد گروه جدید از افزودن شرط جدید (یا) استفاده می‌کنیم.

انواع شرط

شرطعملگرهای قابل انتخابمقدار
بات‌ها (موتورهای جست‌وجو)جزو ربات‌های شناخته شده باشد / جزو هیچ‌یک از ربات‌های شناخته‌شده نباشد—
TLSدرخواست http باشد / درخواست https باشد—
هاستعملگرهای رشته و Globhostname یا IPv4
مسیرعملگرهای رشته و Globمسیر؛ با / شروع می‌شود و Query ندارد
کوئری استرینگعملگرهای رشته، Glob و وجودنام و مقدار پارامتر
کشوربرابر باشد / نباشدکد کشور از فهرست GeoIP
آدرس IPIP Set یا CIDRIP، 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
??.jsa.jsfile.js
**.jsone.jsfile.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 کاراکتر

ادامه مسیر