در دیواره آتش ستون، شما میتوانید بر اساس ویژگیهای مختلف درخواستهای HTTP (مانند آدرس IP کلاینت، هدرها، کوکیها، متد ارسالی و مسیر درخواست) قوانین اختصاصی وضع کنید. هر قانون از ترکیب یک یا چند شرط (Constraint) ساخته میشود.
در این مستند، نحوه ترکیب شرطها، قوانین نامگذاری، ساختار اولویتدهی و تمامی شرطهای قابل تعریف در فایروال بررسی میشوند.
اصول کارکرد قوانین فایروال
نامگذاری قوانین
نامی که برای قوانین فایروال انتخاب میکنید باید از قواعد زیر پیروی کند:
- فقط شامل حروف کوچک انگلیسی، اعداد و خط فاصله (
-) باشد. - نام قانون حتماً باید با یک حرف کوچک انگلیسی شروع شود.
اولویت بررسی قوانین
تمام قوانین فایروال به صورت یک جدول مرتبشده از بالا به پایین ارزیابی میشوند:
- با ورود درخواست، اولین قانونی که شرط آن با درخواست مطابقت داشته باشد اعمال میگردد.
- اگر عملیات مربوط به قانون منطبق، از نوع خاتمهدهنده (مانند
BlockیاRedirect) باشد، پردازش متوقف شده و قوانین بعدی بررسی نخواهند شد.
نحوه ترکیب شرطها (منطق ارزیابی)
شما میتوانید چند شرط را در یک قانون ترکیب کنید. ساختار ارزیابی شرطها به صورت منطق OR از ANDها است:
(شرط ۱ && شرط ۲) OR (شرط ۳ && شرط ۴) OR ...
این ساختار انعطافپذیری لازم را برای پیادهسازی سختگیرانهترین سیاستهای امنیتی فراهم میکند. همچنین با فعال کردن گزینه معکوسسازی (Negate) در هر شرط، میتوانید اثر آن را معکوس کنید (عملکردی مشابه اپراتور Logical NOT).
شروط قابل تعریف در فایروال
جدول زیر خلاصهای از شروط پشتیبانی شده به همراه عملگرهای (Operators) مجاز آنها را نشان میدهد:
| عنوان شرط | نام فنی (در API) | عملگرهای مجاز | کاربرد |
|---|---|---|---|
| سامانه خودمختار | asn | equals, lesser, greater | شناسایی بر اساس شماره ASN ارائهدهنده اینترنت کلاینت |
| کوکیها | cookie | equals, contains, starts_with, ends_with, matches | بررسی مقادیر کوکیهای ارسالی کلاینت |
| هدرهای HTTP | header | equals, contains, starts_with, ends_with, matches | فیلتر بر اساس هدرهای درخواست (مانند Host یا User-Agent) |
| کشور | country | equals | فیلتر درخواستها بر اساس کشور بازدیدکننده (بر اساس GeoIP) |
| آدرس IP | ip | ip_matches | اعمال محدودیت روی IPها یا رنجهای آدرس خاص به فرمت CIDR |
| متد HTTP | method | equals | فیلتر بر اساس نوع درخواست (GET, POST, DELETE و…) |
| آدرس کامل (URI) | uri | equals, contains, starts_with, ends_with, matches | بررسی کل مسیر پس از نام دامنه (مسیر به همراه پارامترها) |
| مسیر (Path) | path | equals, contains, starts_with, ends_with, matches | بررسی مسیر درخواست (قبل از علامت سوال ?) |
| پارامترها (Query) | args | equals, contains, starts_with, ends_with, matches | بررسی فیلدهای موجود در Query String |
| نسخه HTTP | http_version | equals | تفکیک درخواستها بر اساس نسخه پروتکل HTTP کلاینت |
| وضعیت TLS | tls | equals | تفکیک درخواستهای امن (HTTPS) از ناامن (HTTP) |
| رباتهای شناختهشده | known_bots | equals | شناسایی و مدیریت خزندههای معتبر (مانند Google Bot یا Bing Bot) |
جزئیات پارامترهای هر شرط
۱. شماره سامانه خودمختار (ASN)
هر آدرس IP متعلق به یک سامانه خودمختار (Autonomous System) است که با یک شماره اختصاصی (ASN) شناخته میشود. با استفاده از این شرط میتوانید دسترسی شرکتهای ارائهدهنده اینترنت یا دیتاسنترهای خاص را مدیریت کنید.
- Name/Expected: شماره ASN مورد نظر (مقادیر عددی بزرگتر یا مساوی صفر)
- Operator: یکی از موارد
equals(مساوی)،lesser(کوچکتر)،greater(بزرگتر)
۲. کوکیها (Cookies)
بررسی مقادیر کوکیهایی که کلاینت همراه با درخواست HTTP ارسال میکند.
- Name: نام دقیق کوکی مورد نظر
- Expected: لیست مقادیر مورد انتظار (حداکثر ۱۰ رشته با طول حداکثر ۴۰۹۶ کاراکتر)
- Operator: شامل
equals،contains،starts_with،ends_with،matches(تطابق با عبارات منظم یا Glob)
۳. هدرهای HTTP (HTTP Headers)
این شرط برای بررسی هدرهای ارسالی در درخواست (مانند هدر Host برای تفکیک دامنهها یا User-Agent برای شناسایی دستگاه کلاینت) به کار میرود.
- Name: نام دقیق هدر مورد نظر (به عنوان مثال
Host) - Expected: لیست مقادیر مورد نظر (حداکثر ۱۰ رشته با طول حداکثر ۴۰۹۶ کاراکتر)
- Operator: شامل
equals،contains،starts_with،ends_with،matches
۴. کشور (Country)
ترافیک کاربران را بر اساس کشور مبدا جغرافیایی فیلتر میکند.
- Expected: لیست کدهای استاندارد کشورها (مانند
IRیاUS) - Operator: فقط
equals
۵. آدرس IP
اعمال محدودیت روی تک IP یا محدودهای از آدرسها.
- Expected: لیست آدرسها به فرمت استاندارد CIDRv4 (مانند
185.166.104.0/24برای رنج آدرس و192.168.1.1/32برای یک IP خاص) - Operator: فقط
ip_matches
۶. متد HTTP
بررسی نوع متد استفاده شده در درخواست وب.
- Expected: یکی از مقادیر مجاز:
GET,POST,PURGE,PUT,HEAD,OPTIONS,DELETE,PATCH - Operator: فقط
equals
۷. آدرس کامل (URI)
منظور از URI کل عبارت بعد از نام دامنه در آدرس وب است. به عنوان مثال، در آدرس زیر:
https://example.com/path/to/file?q=1&t=2
عبارت زیر به عنوان URI سنجیده میشود:
/path/to/file?q=1&t=2
- Expected: لیست مقادیر مورد انتظار
- Operator: شامل
equals،contains،starts_with،ends_with،matches
۸. مسیر (Path)
منظور از مسیر (Path)، بخش قبل از علامت سوال ? در URI است. در مثال قبلی، مسیر برابر است با:
/path/to/file
- Expected: لیست مقادیر مورد انتظار
- Operator: شامل
equals،contains،starts_with،ends_with،matches
۹. پارامترهای آدرس (Query String / Args)
این شرط بررسی میکند که آیا پارامتر خاصی در بخش Query String درخواست وجود دارد یا خیر. در مثال بخش URI، پارامترها q=1 و t=2 هستند.
- Name: نام پارامتر مورد نظر (مثلاً
q) - Expected: مقادیر مورد انتظار برای پارامتر
- Operator: شامل
equals،contains،starts_with،ends_with،matches
۱۰. نسخه HTTP
فیلتر کردن درخواستها بر اساس نسخه پروتکل ارتباطی.
- Expected: یکی از مقادیر مجاز:
HTTP/1.0,HTTP/1.1,HTTP/1.2,HTTP/2,HTTP/3 - Operator: فقط
equals
۱۱. وضعیت TLS (اتصال امن)
تشخیص این که آیا ارتباط کاربر به صورت رمزنگاری شده و تحت SSL/TLS برقرار شده است یا خیر.
- Expected: مقادیر
True(برای HTTPS) یاFalse(برای HTTP) - Operator: فقط
equals
۱۲. رباتهای شناخته شده (Known Bots)
این شرط رباتهای جستجوگر و خزندههای قانونی (مانند Google Bot یا Bing Bot) را شناسایی میکند. این ویژگی به شما اجازه میدهد رباتهای مفید را استثنا کرده و ترافیک رباتهای غیرمجاز را مسدود کنید.
- Expected: مقادیر
True(برای رباتهای معتبر) یاFalse(سایر ترافیکها) - Operator: فقط
equals
دامنه اعمال قوانین فایروال بر زیردامنهها
توجه داشته باشید که قوانین فایروال به صورت کلی بر روی تمام دامنهها و زیردامنههای متصل به آن سرویس (توزیع) CDN اعمال میشود. اگر دامنهی اصلی و زیردامنههای مختلف خود (مثلاً یک زیردامنه ذخیرهسازی رسانه مانند
dc.vmusic.ir) را در قالب یک سرویس CDN مشترک مدیریت میکنید، هرگونه قانون فایروال (مانند قوانین ریدایرکت) روی تمامی این دامنهها اعمال خواهد شد. این موضوع میتواند موجب بروز ریدایرکتهای حلقوی بیانتها (ERR_TOO_MANY_REDIRECTS) شود. جهت آشنایی با عیبیابی و روشهای حل این مشکل به بخش عیبیابی ریدایرکتهای حلقوی مراجعه کنید.
تنظیمات تطابق الگو (Glob Matching)
در مواردی که عملگر روی matches تنظیم شده باشد، قوانین فایروال ستون از الگوی استاندارد GLOB برای تطابق آدرسها استفاده میکنند.
قابلیتهای تحت پشتیبانی Glob
| مدل الگو | ورودی نمونه | شرط مطابقت (Match) | شرط عدم مطابقت |
|---|---|---|---|
لیست گزینهها {a,b,c} | /{static,build}/*.js | مسیرهایی که با /static/file.js یا /build/file.js شروع شوند. | پوشه خارج از لیست مانند /src/file.js |
محدوده کاراکتر [abc] | /[abc]-xyz/*.js | شروع با هر کدام از حروف مانند /a-xyz/f.js یا /b-xyz/f.js | شروع با حرف دیگر مانند /d-xyz/f.js |
عدم وجود در محدوده [!abc] | /[!abc]-xyz/*.js | حروفی غیر از محدوده مانند /d-xyz/f.js | وجود حرف در محدوده مانند /a-xyz/f.js |
یک کاراکتر دلخواه ? | ?.js | فایل تک کاراکتری مانند a.js یا b.js | فایل چند کاراکتری مانند file.js |
صفر یا چند کاراکتر * | *.js | انتهای مسیر با پسوند مشخص مانند one.js یا two.js | پسوند دیگر مانند file.md |
قابلیتهای خارج از پشتیبانی (Not Supported)
- تطابق پوشههای تودرتو به صورت بازگشتی (Globstar):
/**/*.js - الگوهای نفی پیچیده:
/!(src|build)/*.js - اختیاری بودن الگوها:
file?(.min|.umd).js - صفر یا چند الگو:
file*(.min|.umd).js - یک یا چند الگو:
file+(.min|.umd).js - دقیقاً یک الگو:
file@(.min|.umd).js
راهنمای تعریف ریدایرکت (تطبیق مبدأ و تعیین مقصد)
یکی از سوالات متداول کاربران، نحوه ایجاد قوانین ریدایرکت (مانند انتقال کاربران از یک صفحه قدیمی به جدید یا هدایت مسیرها روی سابدامنهها) است.
در پنل ستون، هر قانون ریدایرکت از دو بخش مجزا تشکیل میشود: ۱. تعریف آدرس ورودی (مبداء): این کار از طریق شرطها (Constraints) در قانون فایروال انجام میشود. ۲. تعریف آدرس خروجی (مقصد): این کار در بخش عملیات (Action) با انتخاب گزینه Redirect و تنظیم فیلد Target انجام میشود.
NOTE
در اکشن ریدایرکت، فیلد مجزایی برای تعیین مبدأ وجود ندارد؛ چرا که مبدأ همان شرطی است که برای قانون تعیین میکنید.
نمونه کاربردی ۱: ریدایرکت یک آدرس مشخص (بدون تغییر دامنه)
فرض کنید میخواهید آدرس example.com/old-page را به example.com/new-page ریدایرکت کنید:
- بخش شرطها (Constraints):
- پارامتر:
Path(مسیر) - عملگر (Operator):
equals - مقدار مورد انتظار (Expected):
/old-page
- پارامتر:
- بخش عملیات (Action):
- عملیات:
Redirect - آدرس هدف (Target):
/new-page(تعریف به صورت مسیر نسبی باعث میشود پروتکل و دامنه اصلی به صورت خودکار حفظ شوند)
- عملیات:
نمونه کاربردی ۲: ریدایرکت یک مسیر مشخص روی تمامی سابدامنهها (حفظ سابدامنه پویا)
فرض کنید میخواهید آدرس /menu را روی تمام سابدامنههای خود (مانند sub1.menew.ir/menu یا sub2.menew.ir/menu) به مسیر /catalogue روی همان سابدامنه ریدایرکت کنید:
- بخش شرطها (Constraints):
- شرط اول: هدر Host را بررسی کنید:
- پارامتر:
Header(نام هدر:Host) - عملگر (Operator):
matches - مقدار مورد انتظار (Expected):
*.menew.ir(الگوی Glob برای پوشش تمامی سابدامنهها)
- پارامتر:
- شرط دوم: مسیر را بررسی کنید:
- پارامتر:
Path(مسیر) - عملگر (Operator):
equals(یاstarts_withدر صورت نیاز به شامل شدن زیرمسیرها) - مقدار مورد انتظار (Expected):
/menu
- پارامتر:
- شرط اول: هدر Host را بررسی کنید:
- بخش عملیات (Action):
- عملیات:
Redirect - آدرس هدف (Target):
/catalogue - حفظ مسیر (preservePath): غیرفعال (
false- مگر اینکه بخواهید ساختار زیرشاخهها را هم عینا منتقل کنید)
- عملیات:
نحوه هندل کردن سابدامنههای پویا در مقصد
در پنل ستون، نیازی نیست مقدار تطبیق داده شده با کاراکتر ستاره (
*) را به صورت متغیر (مانند$1یا غیره) در آدرس هدف فراخوانی کنید. کافی است آدرس هدف (Target) را به صورت مسیر نسبی (مانند/catalogue) وارد کنید. با این کار، CDN ستون به صورت خودکار درخواست کاربر را به همان سابدامنه و دامنهای که در هدر درخواست بوده ریدایرکت میکند و فقط مسیر آن را تغییر میدهد.
