پرش به مطلب اصلی

تنظیمات فایروال

نسل جدید فایروال ابر آروان یک بستر منعطف را برای کنترل درخواست‌های HTTP وب‌سایت یا وب‌اپلیکیشن شما فراهم می‌کند. تنظیمات فایروال شبکه توزیع محتوای ابر آروان، به شما کمک می‌کند که با ترکیب چندین شرط، قوانینی ایجاد کنید تا ترافیک دامنه را کنترل کنید و امنیت وب‌سایت و وب‎‌اپلیکیشن‌تان را تامین کنید.

فایروال ابر آروان امکان بررسی و مسدود کردن ترافیک مشکوک ورودی به سایت را با تعریف قوانینی بر اساس Wireshark برای شما فراهم می‌کند. برای این کار شما می‌توانید از پنل کاربری یا API سرویس CDN استفاده کنید. در این راهنما، شیوه‌ی فعال‌سازی و تعریف قوانین مختلف در فایروال CDN ابر آروان را بررسی خواهیم کرد.

فعال‌سازی و تنظیمات فایروال از طریق پنل کاربری

برای مدیریت و تنظیم قوانین فایروال، در پنل کاربری وارد بخش «تنظیمات فایروال» از منوی امنیت CDN شوید. با استفاده از گزینه‌های بخش «قانون پیش‌فرض» می‌توانید با فعال کردن گزینه‌ی مجاز، به‌شکل کلی وب‌سایت خود را در دسترس قرار دهید یا با انتخاب حالت مسدود آن را از دسترس خارج کنید. قانون پیش‌فرض زمانی اعمال خواهد شد که شرایط درخواست‌دهنده با هیچ‌کدام از قوانین تعریف شده، صدق نکند.

برای تعریف قوانین فایروال، کافی است روی گزینه «افزودن قانون» کلیک کنید. در صفحه‌ی "ایجاد قانون جدید"، امکان تعیین نام و توضیح قانون، پارامتر، اپراتور و مقدار شرط و هم‌چنین بررسی عبارت معادل قانون را خواهید داشت. در انتها و پس از تکمیل شروط، می‌توانید عملگر موردنظر برای مجاز یا مسدود کردن دسترسی مشخص کنید.

برای ایجاد یک شرط باید ابتدا، در فیلد «پارامتر» ویژگی‌ HTTP موردنظرتان را از میان متغیرهای زیر انتخاب کنید.

پارامترتوضیحات
SOURCE IP ADDRESSنشان‌دهنده IP درخواست‌دهنده

مقدار نمونه: 1.2.3.4
COUNTRYنشان‌دهنده کشور مبدا درخواست‌دهنده

مقدار نمونه: IR
URI PATHنشان‌دهنده مسیر uri درخواست

مقدار نمونه: /help/index
HOSTNAMEنشان‌دهنده نام میزبان مورد استفاده در درخواست

مقدار نمونه: www.example.com
COOKIEنشان‌دهنده مقدار کامل cookie به‌شکل رشته کارکتر

مقدار نمونه: SSID=AjMisfbW7_GcDfpgd;session=8521F670545D7865F79C3D7BEDC29CCE
REFERERنشان‌دهنده هدر HTTP Refere درخواست که حاوی آدرس صفحه‌ای است که به صفحه درخواستی فعلی لینک داده شده است.

مقدار نمونه: developer.example.com/docs/Web/JavaScript
REQUEST METHODنشان‌دهنده متد درخواست HTTP در قالب رشته کارکتر ی از حروف بزرگ

مقدار نمونه: GET
URIنشان‌دهنده querystring و مسیر uri

مقدار نمونه: /help/index?section=539061&expand=comments
URI QUERY STRINGنشان‌دهنده مقدار کامل querystring بدون ?

مقدار نمونه: section=539061&expand=comments
HTTP VERSIONنشان‌دهنده نسخه پروتکل HTTP مورد استفاده در درخواست

مقدار نمونه: HTTP/1.1
USER AGENTنشان‌دهنده user agent درخواست که حاوی رشته کاراکتری برای شناسایی سیستم‌عامل و مرورگر کاربر است.

مقدار نمونه: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36

در حال حاضر این پارامترها به‌طور کامل در پلن سازمانی قابل‌ استفاده هستند و پارامترهای IP Source Address، Country، Hostname و URI در همه‌ی پلن‌ها در دسترس هستند.

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

اپراتورتوضیحات
برابر است بامعادل == و مشخص‌کننده شرط برابر بودن پارامتر و مقدار
برابر نیست بامعادل =! و مشخص‌کننده شرط نامساوی بودن پارامتر و مقدار
شاملمعادل contains و مشخص‌کننده شرط اینکه پارامتر حاوی یک مقدار باشد
با عبارت REGEX تطبیق داردمعادل ~ و مشخص‌کننده شرط ‌ تطابق پارامتر با مقدار regex
در لیست موجود استمعادل in و مشخص‌کننده شرط وجود مقادیر پارامتر در لیست
شروع می‌شود بامشخص کننده شرط شروع شدن پارامتر با مقدار مشخص
پایان می‌یابد بامشخص کننده شرط ختم شدن پارامتر به مقدار مشخص

این امکان برای شما فراهم است تا با تعریف چند شرط در یک قانون درخواست‌های موردنظرتان را مجاز یا مسدود کنید. اگر چند شرط را با هم and کنید لازم است تا تمام شروط برقرار باشند و اگر از or استفاده کنید قفط کافی‌ است تا یکی از شروط برقرار شود تا قانون اعمال شود.

به عنوان نمونه اگر بخواهید قانونی تعریف کنید که ترافیک ورودی تمام درخواست‌های با متد POST به یک مسیر معین مثل example.com/test را از یک IP مبدا و user-agent مشخص مثل Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36، مسدود کند باید تنظیمات زیر را وارد کنید:

در بخش عبارت معادل، می‌توانید عبارتی که معادل شروط و قانون تعریف شده است را بررسی کنید. عبارت ساده یک مقدار از درخواست HTTP را با مقدار تعریف‌شده در عبارت مقایسه می‌کند و در قالب <مقدار> <اپراتور> <پارامتر> ایجاد می‌شود مثل ip.src==1.2.3.4. عبارات مرکب شامل عبارات ساده‌ای هستند که با اپراتورهای and و/یا or ترکیب شده و یک عبارت واحد را ساخته‌اند. این عبارات در قالب <عبارت ساده> <اپراتور منطقی> <عبارت ساده> ایجاد می‌شوند مثل

((’ip.src==1.2.3.4)and(http.request.method==’POST)) . هر قانون فایروال یک عبارت معادل بر اساس شروط تعریف شده خواهد داشت.

پس از تعریف و ایجاد قوانین، در بخش "فهرست قوانین" امکان ویرایش، اولویت‌بندی و حذف قوانین را خواهید داشت.

هم‌چنین اگر پلن حرفه‌ای یا سازمانی روی دامنه شما فعال باشد امکان مشاهده‌ی لیست IP‌ های بازدیدکنندگان و تعداد درخواست‌های‌شان را در بخش «تنظیمات فایروال» خواهید داشت.

نام، توضیحات و وضعیت قوانین

هر قانون در فایروال شبکه توزیع محتوای آروان شامل یک نام، توضیحات و وضعیت قانون است.

برای مثال می‌توانید برای قانون خود یک اسم اختصاص دهید و توضیحاتی درباره‌ی عملکرد قانون جهت شناسایی و سادگی کار با قوانین وارد کنید. در نهایت با استفاده از فیلد وضعیت این امکان را دارید که قانون را فعال و یا غیرفعال کنید.

ورودی‌های نام، توضیحات و وضعیت قوانین در API با استفاده از پارامتر های note ،name و is_enabled قابل تعریف است که پارامتر is_enabled دارای دو مقدار true و false است.

تعیین رفتار فایروال هنگام به وقوع پیوستن یک شرط

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

مجاز

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

ایجاد یک قانون با عملگر مجاز با استفاده از API:

curl --location --request POST 'https://napi.arvancloud.ir/cdn/4.0/domains/example.com/firewall/rules' \

--header 'authority: napi.arvancloud.ir' \

--header 'accept: application/json, text/plain, */*' \

--header 'authorization: API KEY 1 2 3 4' \

--header 'cache-control: no-cache' \

--header 'content-type: application/json' \

--data-raw '{"name":"Test Rule","note":"","is_enabled":true,"action":"allow","action_details":{"mode":1,"ttl":120,"https_only":false},"filter_expr":"((http.host == \"example.com\"))"}'

مسدود

در این حالت آروان به درخواست ارسال شده اجازه پردازش نمی‌دهد و خطای 403 برمی‌گرداند.

ایجاد یک قانون با عملگر مسدود با استفاده از API:

curl --location --request POST 'https://napi.arvancloud.ir/cdn/4.0/domains/example.com/firewall/rules' \

--header 'authority: napi.arvancloud.ir' \

--header 'accept: application/json, text/plain, */*' \

--header 'authorization: API KEY 1 2 3 4' \

--header 'cache-control: no-cache' \

--header 'content-type: application/json' \

--header 'origin: https://panel.arvancloud.ir' \

--header 'pragma: no-cache' \

--data-raw '{"name":"deny rule","note":"","is_enabled":true,"action":"deny","action_details":{"mode":1,"ttl":120,"https_only":false},"filter_expr":"((http.host == \"example.com\"))"}'

چالش

در این حالت اگر یکی از شروط وارد شده به وقوع پیوسته باشد کاربر با چالش DDoS روبه‌روخواهد شد. هم‌چنین می‌توان مشخص کرد که چالش DDoS از چه نوعی باشد و چه مدت زمان اعتبار داشته باشد.

ایجاد یک قانون با عملگر چالش با استفاده از API:

curl --location --request POST 'https://napi.arvancloud.ir/cdn/4.0/domains/example.com/firewall/rules' \

--header 'authority: napi.arvancloud.ir' \

--header 'accept: application/json, text/plain, */*' \

--header 'authorization: API kEY 1 2 3 4' \

--header 'cache-control: no-cache' \

--header 'content-type: application/json' \

--header 'origin: https://panel.arvancloud.ir' \

--header 'pragma: no-cache' \

--data-raw '{"name":"challenge","note":"challenge","is_enabled":true,"action":"challenge","action_details":{"mode":1,"ttl":120,"https_only":false},"filter_expr":"((http.host == \"example.com\"))"}'
  • در ایجاد یک قانون با عملگر چالش از طریق API پارامتر mode می‌تواند برابر با سه مقدار 1، 2 یا 3 باشد که مقدار 1 چالش کوکی، 2 چالش js و 3 چالش کپچا است.

  • پارامتر ttl بیان‌گر مدت زمانی است که چالش DDoS معتبر است و تا زمان انقضای آن، کاربر دوباره احراز وضعیت نمی‌شود.

دور زدن مکانیسم های امنیتی

در این حالت می‌توان مشخص کرد که هنگام وقوع شروط فایروال، کدام یک از مکانیسم های امنیتی نباید اجرا شود. این مکانیسم ها شامل محدودیت نرخ درخواست (Rate limit)، دیوار آتش وب (WAF) و محافظت از حملات DDoS است.

ایجاد یک قانون با عملگر Bypass با استفاده از API:

curl --location --request POST 'https://napi.arvancloud.ir/cdn/4.0/domains/example.com/firewall/rules' \

--header 'authority: napi.arvancloud.ir' \

--header 'accept: application/json, text/plain, */*' \

--header 'authorization: API KEY 1 2 3 4' \

--header 'cache-control: no-cache' \

--header 'content-type: application/json' \

--header 'origin: https://panel.arvancloud.ir' \

--header 'pragma: no-cache' \

--data-raw '{"name":"ByPass","note":"","is_enabled":true,"action":"bypass","action_details":{"waf":true,"rlimit":true,"challenge":true},"filter_expr":"((http.host == \"example.com\"))"}'

فعال‌سازی و تنظیمات فایروال از طریق API

همه تنظیمات و قابلیت‌های فایروال شبکه توزیع محتوای ابر آروان علاوه بر پنل کاربری از طریق API هم قابل تعریف است. با استفاده از API‌های جدول زیر امکان تغییر و بررسی تنظیمات فایروال برای شما فراهم است.

APIتوضیحات
GET DOMAIN'S FIREWALL CONFIGURATIONدریافت تنظیمات پیش‌فرض فایروال
UPDATE DOMAIN'S FIREWALL CONFIGURATIONویرایش تنظیمات پیش‌فرض فایروال
CREATE NEW FIREWALL RULEایجاد قانون فایروال جدید
GET FIREWALL RULE INFORMATIONدریافت اطلاعات یک قانون فایروال
UPDATE THE FIREWALL RULEویرایش یک قانون فایروال
DELETE FIREWALL RULEحذف قانون فایروال
CHANGE PRIORITY OF FIREWALL RULESتغییر اولویت یک قانون فایروال

برای نمونه مثالی که در بخش قبل بررسی کردیم، از طریق API به‌شکل زیر خواهد بود.


curl --location --request POST 'https://napi.arvancloud.ir/cdn/4.0/domains/example.com/firewall/rules' \

--header 'Authorization: Apikey XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXX' \

--header 'Content-Type: application/json' \

--data-raw '{

"name": "تست ",

"note": "قانون تستی",

"is_enabled": true,

"action": "deny",

"filter_expr": "(((ip.src == 1.2.3.4) and (http.request.uri.path == \"/test\") and (http.request.method == \"POST\") and (http.user_agent == \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36\")))"

}'

برای نوشتن مقدار پارامتر filter_expr باید عبارتی بر اساس قواعد Wireshark بنویسید. هم‌چنین برای مشخص کردن مقادیر عبارت می‌توانید از جدول زیر استفاده کنید.

پارامترمعادل
SOURCE IP ADDRESSip.src
COUNTRYip.geoip.country
URI PATHhttp.request.uri.path
HOSTNAMEhttp.host
COOKIEhttp.cookie
REFERERhttp.referer
REQUEST METHODhttp.request.method
URIhttp.request.uri
URI QUERY STRINGhttp.request.uri.query
HTTP VERSIONhttp.request.version
USER AGENThttp.user_agent
REQUEST HEADERS RAWhttp.request.headers.raw

برای بررسی مستندات API این قابلیت، این بخش را بررسی کنید. هم‌چنین، برای دریافت کلید دسترسی (API) می‌توانید مقاله‌ی "دریافت کلید دسترسی" را بررسی کنید.

موارد استفاده رایج

در این بخش به بررسی چند مورد استفاده‌ی رایج از این نسل فایروال CDN ابر آروان و شیوه‌ی تنظیم آن‌ها می‌پردازیم.

  • نیاز به یک کوکی خاص: برای ایمن‌سازی یک محیط خاص مثل محیط توسعه می‌توانید یک کوکی را با افراد قابل اعتماد به‌اشتراک بگذارید و سپس درخواست‌ها را فیلتر کنید تا فقط کاربران دارای آن کوکی امکان دسترسی به مسیر خاص موردنظر شما را داشته باشند. برای این کار باید از پارامتر Cookie استفاده کنید و دو قانون تعریف کنید. فرض کنید می‌خواهید فقط دسترسی سه همکار خود به مسیر dev.example.com را مجاز کنید. ابتدا باید یک قانون برای مسدود کردن دسترسی به dev.example.com تعریف کنید و یک قانون به‌شکل زیر برای مجاز کردن دسترسی افراد مورد نظر.

توجه داشته باشید قانون مجاز بودن دسترسی باید اولویت بالاتری داشته باشد.


curl --location --request POST 'https://napi.arvancloud.ir/cdn/4.0/domains/example.com/firewall/rules' \

--header 'Authorization: Apikey XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXX' \

--header 'Content-Type: application/json' \

--data-raw '{

"name": "acess",

"note": "dev access",

"is_enabled": true,

"action": "allow",

"filter_expr": "((http.cookie == \"acess=x\") or (http.cookie == \"acess=y\") or (http.cookie == \"acess=z\"))"

}'
  • مقابله با حملات R.U.D.Y: حملات R.U.D.Y از انواع حملات DoS هستند که با ارسال درخواست‌ با هدرهای حجیم به sessionهای در حال انتظار باعث از کار افتادن وب‌سرور می‌شوند. راهکار مقابله با این حملات، مسدود کردن درخواست‌هایی است که حاوی session cookie تایید شده نیستند. این مثال سه شرط برای مقابله با درخواست‌های POST که کوکی درستی ندارند را ترکیب می‌کند.

    اولین شرط از پارامتر uri path برای مشخص کردن مسیرهایی که لازم است از R.U.D.Y محافظت شوند را مشخص می‌کند:

((http.request.uri.path == "(comment|conversation|event|poll)/create"))

شرط دوم، قالب یک کوکی تاییدشده و درست را مشخص می‌کند:

((http.cookie matches "auth_session=[0-9a-zA-Z]32-[0-9]10-[0-9a-z]6"))

و شرط سوم درخواست‌های غیر از متد POST را مشخص می‌کند:

((http.request.method != "POST"))

سه شرط با اپراتور and ترکیب می‌شوند و عملگر قانون "مجاز" است.


curl --location --request POST 'https://napi.arvancloud.ir/cdn/4.0/domains/example.com/firewall/rules' \

--header 'Authorization: Apikey XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXX' \

--header 'Content-Type: application/json' \

--data-raw '{

"name": "RUDY",

"note": "",

"is_enabled": true,

"action": "allow",

"filter_expr": "(((http.request.method != \"POST\") and (http.cookie matches \"auth_session=[0-9a-zA-Z]{32}-[0-9]{10}-[0-9a-z]{6}\") and (http.request.uri.path == \"\"(comment|conversation|event|poll)/create\")))"

}'

  • مقابله با Hotlink:

    Hotlinking به عنوان سرقت پهنای باند یک سایت از طریق لینک دادن مستقیم به اجزای آن سایت مثل تصاویر یا ویدیوها شناخته می‌شود. با استفاده از نسل جدید فایروال ابر آروان و با تعریف قوانین متناسب، می‌توانید با hotlinking مقابله کنید. برای این کار با استفاده از پارامترهای referer و URI path می‌توانید از مسیر موردنظر خود در برابر hotlinking محافظت کنید. همان‌طور که در تصویر ملاحظه می‌کنید، در این قانون تمام درخواست‌هایی که از refererای غیر از سایت ما (که در اینجا example.com را در نظر گرفتیم) به مسیر موردنظر ارسال شود مسدود شده و فقط درخواست‌هایی که از سمت وب‌سایت ما ارسال می‌شوند مجاز خواهد بود.


curl --location --request POST 'https://napi.arvancloud.ir/cdn/4.0/domains/example.com/firewall/rules' \

--header 'Authorization: Apikey XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXX' \

--header 'Content-Type: application/json' \

--data-raw '{

"name": "Hotlink Protection",

"note": "block other referee",

"is_enabled": true,

"action": "deny",

"filter_expr": "(((http.referer != \"example.com\") and (http.request.uri != \"/hotlink-ok/\")))"

}'