شرطهای دیواره آتش (Firewall)
نکاتی در استفاده از نسخه جدید فایروال:
نحوه اعمال قوانین در فایروال از حالت اولویت بندی شده بر اساس اکشن، به حالت اولویت بندی شده بر اساس ترتیب قوانین تغییر پیدا خواهد کرد. قوانین فعلی به نحوی مهاجرت داده خواهند شد که عملکرد خروجی تغییری نکند.
پنل فایروال CDN تغییر خواهد کرد و تمامی رول های فایروال در قالب یک جدول ترتیب دار دیده میشوند.
شروط فایروال HttpVersion، Port و TLS حذف خواهند شد.
اکشن فایروال Bypass حذف شده و با Allow جایگزین خواهد شد.
نام قوانین فایروال در CDN فقط میتواند شامل حروف کوچک انگلیسی، اعداد و خط فاصله باشد و باید با حروف کوچک انگلیسی شروع شود. قوانین فایروالی که نام آنها مطابق این قوانین نیست، در هنگام ویرایش باید طوری تغییر کنند که مطابق با این قوانین باشند.
در صفحه مرتبط با تنظیمات فایروال میتوانید قوانین، محدودیتها و عملیات مدنظر خود را برای فایروال پیکربندی کنید. در این مستند به توضیح هر یک از محدودیتهای قابل اعتماد خواهیم پرداخت.
قبل از پیکربندی قوانین و محدودیتها (Constraint) بهتر است بدانید که عبارتی که در نهایت ارزیابی میشود، به صورت زیر خواهد بود و شما میتوانید مجموعهای محدودیتها را با توجه به نحوهی ترکیب قوانین که در زیر آورده شده است اعمال کنید:
(constraint1 && constraint2 && …) or (constraintN && constraintN+1 && …) or …
در واقع or تعدادی and است که منطق کامل نیست، ولی برای پیادهسازی اکثر حالات مدنظر میتواند مورد استفاده قرار گیرد.
محدودیتهای قابل اعمال در درخواست HTTP
شما میتوانید با انتخاب هر یک از مواردی که در زیر آورده شده است محدویتهایی را بر روی درخواستها (request) اعمال کنید:
- شماره سامانه خودمختار (ASN)
- کوکیها
- کشور
- IP
- متد HTTP مثل GET و POST و…
- URI
- Path
- Query Strings (Args)
- HTTP Version
- TLS (on/off)
- Known Bots
در ادامه بهتوضیح هر یک از این ویژگیهای قابل استفاده پرداخته خواهد شد.
هر آدرس IP متعلق به یک سامانه خودمختار یا سازمان است. سامانههای خودمختار در پروتکل IP، شماره مخصوص به خود را دارند که ASN یا Autonomous System Number نامیده میشود. با تنظیم کردن یک شرط بر روی این شماره در فایروال میتوانید تمامی درخواستهای ورودی از این شرکت را Allow کنید.
پارامترها:
- Expected: لیست ASNهای مورد نظر
- Operator: یکی از موارد equals ،lesser ،greater
کوکیها اطلاعاتی هستند که با هر بار ارسال درخواست به یک سرور، همراه با درخواست ارسال میشوند. این اطلاعات میتوانند از سمت سرور به کلاینت ارسال شوند (با هدر Set-Cookie در پاسخ) و کلاینت باید در درخواستهای بعدی آنها را (در هدر Cookie) به سرور ارسال کند.
شما میتوانید قوانینی تعریف کنید و بر اساس محتویات Cookieهای ارسالی برای سرنوشت درخواست تصمیم بگیرید.
پارامترها:
- Name: نام کوکی مورد نظر
- Expected: لیست مقادیر مورد نظر
- Operator: یکی از موارد equals، contains، starts_with، ends_with، matches
میتوانید بر اساس کشوری که درخواست از آن صورت گرفته، برای ریکوئست تصمیم بگیرید.
پارامترها:
- Expected: لیست کشورهای موردنظر
- Operator: فقط equals
میتوانید آدرس IP درخواست را به صورت CIDR با هر IP Rangeی مورد بررسی قرار دهید و برای درخواست تصمیمگیری کنید. در حال حاضر فقط IPv4 پشتیبانی میشود. منظور از CIDR چیزی مانند 185.166.104.0/24 است که یک محدوده IP مشخص میکند. برای مشخص کردن تک IP از /32 استفاده کنید.
پارامترها:
- Expected: لیست محدودههای IP مورد نظر به فرمت CIDR
- Operator: فقط ip_matches
میتوانید بر اساس متد درخواست HTTP نیز برای قوانین شرط تعریف کنید.
پارامترها:
- Exptected: یکی از GET، POST، PURGE، PUT، HEAD، OPTIONS، DELETE، PATCH
- Operator: فقط equals
منظور از URI در اینجا هر چیزی است که بعد از نام دامنه در URL میآید. برای مثال در URL زیر
https://example.com/path/to/a/file?q=p&t=s
منظور از URI قسمت زیر است:
/path/to/a/file?q=p&t=s
پارامترها:
- Expected: لیست مقادیر مورد نظر
- Operator: یکی از equals، contains، starts_with، ends_with، matches
منظور از Path آن قسمت از URI است که قبل از ? میآید، در مثال قبلی منظور از Path قسمت زیر است:
/path/to/a/file
پارامترها:
- Expected: لیست مقادیر مورد نظر
- Operator: یکی از equals، contains، starts_with، ends_with، matches
منظور از query string آن قسمت از URI است که بعد از ? میآید و شامل مقادیری به فرمت key=value است. در مثال قبلی:
q=p&t=s
پارامترها:
- Name: نام query مورد نظر
- Expected: لیست مقادیر مورد نظر
- Operator: یکی از موارد equals، contains، starts_with، ends_with، matches
HTTP Version شماره نسخه پروتکل HTTP درخواست است:
پارامترها:
- Expected: یکی از موارد HTTP/1.0 HTTP/1.1 HTTP/1.2 HTTP/2 HTTP/3
- Operator: فقط equals
میتوانید شرطی را فقط برای درخواستهای با/بدون TLS تعریف کنید
پارامترها:
- Expected: True/False
- Operator: equals
با استفاده از این قابلیت میتوانید درخواستها را فقط برای رباتهای خوب شناخته شده مثل Google Bot، Bingbot و … عبور دهید و برای سایر درخواستها تصمیم دیگری بگیرید.
پارامترها:
- Expected: True/False
- Operator: equals
میتوانید بر اساس پورتی که کاربر برای دسترسی استفاده میکند (۸۰ یا ۴۴۳) ، برای در خواست تصمیم بگیرید.
پارامترها:
Operator: فقط equals
Expected: یکی از مقادیر ۸۰ یا ۴۴۳
پس از انتخاب هریک از این ویژگیها و در واقع ایجاد ترکیبی از شرطها که قوانینی که میخواهید را تشکیل میدهند، لازم است انتخاب کنید که براساس این قوانین چه کاری انجام شود. به این کارها عملیات گفته میشود. برای اطلاعات بیشتر در مورد عملیات به مستند انواع عملیات برای قوانین فایروال مراجعه کنید.
قوانین فایروال شبکه توزیع محتوای ستون از روش GLOB استفاده میکند. بخشی از موارد تحت پشتیبانی این مدل در زیر آمده است.
مدل | ورودی | شرط برقراری | شرط عدم برقراری |
---|---|---|---|
List {a,b,c} | /{static,build/public}/*.js | as their directories are included in the group /static/file.js/build/public/file.js | as the 'src' directory is not in the group /src/file.js |
Range [abc] | /[abc]-xyz/*.js | as they are in the range provided /a-xyz/file.js/b-xyz/file.js/c-xyz/file.js | as 'd' is not in the range '[abc]' /d-xyz/file.js |
Not in Range [!abc] | /[!abc]-xyz/*.js | as they are not in the given range /d-xyz/file.js/e-xyz/file.js | as they are within the excluded range /a-xyz/file.js/b-xyz/file.js/c-xyz/file.js |
One Char ? | ?.js | as they are a single character ending with '.js' a.jsb.js | it is more than one character before '.js' file.js |
Zero or More Chars * | *.js | as they end with '.js' one.jstwo.jsthree.js | as it doesn't end with '.js' four.md |
مدل | ورودی |
---|---|
Recursive (globstar) ** | /**/*.js |
Not Patterns !(a|b) | /!(src|build)/*.js |
Zero or One Pattern ?(a|b) | file?(.min|.umd).js |
Zero or More Patterns *(a|b) | file*(.min|.umd).js |
One or More Patterns +(a|b) | file+(.min|.umd).js |
Exactly One Pattern @(a|b) | file@(.min|.umd).js |