در دیواره آتش ستون، شما می‌توانید بر اساس ویژگی‌های مختلف درخواست‌های HTTP (مانند آدرس IP کلاینت، هدرها، کوکی‌ها، متد ارسالی و مسیر درخواست) قوانین اختصاصی وضع کنید. هر قانون از ترکیب یک یا چند شرط (Constraint) ساخته می‌شود.

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


اصول کارکرد قوانین فایروال

نام‌گذاری قوانین

نامی که برای قوانین فایروال انتخاب می‌کنید باید از قواعد زیر پیروی کند:

  • فقط شامل حروف کوچک انگلیسی، اعداد و خط فاصله (-) باشد.
  • نام قانون حتماً باید با یک حرف کوچک انگلیسی شروع شود.

اولویت بررسی قوانین

تمام قوانین فایروال به صورت یک جدول مرتب‌شده از بالا به پایین ارزیابی می‌شوند:

  • با ورود درخواست، اولین قانونی که شرط آن با درخواست مطابقت داشته باشد اعمال می‌گردد.
  • اگر عملیات مربوط به قانون منطبق، از نوع خاتمه‌دهنده (مانند Block یا Redirect) باشد، پردازش متوقف شده و قوانین بعدی بررسی نخواهند شد.

نحوه ترکیب شرط‌ها (منطق ارزیابی)

شما می‌توانید چند شرط را در یک قانون ترکیب کنید. ساختار ارزیابی شرط‌ها به صورت منطق OR از ANDها است:

(شرط ۱ && شرط ۲) OR (شرط ۳ && شرط ۴) OR ...

این ساختار انعطاف‌پذیری لازم را برای پیاده‌سازی سخت‌گیرانه‌ترین سیاست‌های امنیتی فراهم می‌کند. همچنین با فعال کردن گزینه معکوس‌سازی (Negate) در هر شرط، می‌توانید اثر آن را معکوس کنید (عملکردی مشابه اپراتور Logical NOT).


شروط قابل تعریف در فایروال

جدول زیر خلاصه‌ای از شروط پشتیبانی شده به همراه عملگرهای (Operators) مجاز آن‌ها را نشان می‌دهد:

عنوان شرطنام فنی (در API)عملگرهای مجازکاربرد
سامانه خودمختارasnequals, lesser, greaterشناسایی بر اساس شماره ASN ارائه‌دهنده اینترنت کلاینت
کوکی‌هاcookieequals, contains, starts_with, ends_with, matchesبررسی مقادیر کوکی‌های ارسالی کلاینت
هدرهای HTTPheaderequals, contains, starts_with, ends_with, matchesفیلتر بر اساس هدرهای درخواست (مانند Host یا User-Agent)
کشورcountryequalsفیلتر درخواست‌ها بر اساس کشور بازدیدکننده (بر اساس GeoIP)
آدرس IPipip_matchesاعمال محدودیت روی IPها یا رنج‌های آدرس خاص به فرمت CIDR
متد HTTPmethodequalsفیلتر بر اساس نوع درخواست (GET, POST, DELETE و…)
آدرس کامل (URI)uriequals, contains, starts_with, ends_with, matchesبررسی کل مسیر پس از نام دامنه (مسیر به همراه پارامترها)
مسیر (Path)pathequals, contains, starts_with, ends_with, matchesبررسی مسیر درخواست (قبل از علامت سوال ?)
پارامترها (Query)argsequals, contains, starts_with, ends_with, matchesبررسی فیلدهای موجود در Query String
نسخه HTTPhttp_versionequalsتفکیک درخواست‌ها بر اساس نسخه پروتکل HTTP کلاینت
وضعیت TLStlsequalsتفکیک درخواست‌های امن (HTTPS) از ناامن (HTTP)
ربات‌های شناخته‌شدهknown_botsequalsشناسایی و مدیریت خزنده‌های معتبر (مانند 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
  • بخش عملیات (Action):
    • عملیات: Redirect
    • آدرس هدف (Target): /catalogue
    • حفظ مسیر (preservePath): غیرفعال (false - مگر اینکه بخواهید ساختار زیرشاخه‌ها را هم عینا منتقل کنید)

نحوه هندل کردن ساب‌دامنه‌های پویا در مقصد

در پنل ستون، نیازی نیست مقدار تطبیق داده شده با کاراکتر ستاره (*) را به صورت متغیر (مانند $1 یا غیره) در آدرس هدف فراخوانی کنید. کافی است آدرس هدف (Target) را به صورت مسیر نسبی (مانند /catalogue) وارد کنید. با این کار، CDN ستون به صورت خودکار درخواست کاربر را به همان ساب‌دامنه و دامنه‌ای که در هدر درخواست بوده ریدایرکت می‌کند و فقط مسیر آن را تغییر می‌دهد.