تنظیمات فایروال
نسل جدید فایروال ابر آروان یک بستر منعطف را برای کنترل درخواستهای 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 ADDRESS | ip.src |
COUNTRY | ip.geoip.country |
URI PATH | http.request.uri.path |
HOSTNAME | http.host |
COOKIE | http.cookie |
REFERER | http.referer |
REQUEST METHOD | http.request.method |
URI | http.request.uri |
URI QUERY STRING | http.request.uri.query |
HTTP VERSION | http.request.version |
USER AGENT | http.user_agent |
REQUEST HEADERS RAW | http.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/\")))"
}'