در فیلد firewall میتوانید محصولات امنیت ابری را فعال کنید و برای مثال اجازه دسترسی به برخی کاربران با مشخصات خاص را ندهید. برای این کار لازم است یک سری rule تعریف کنید و شرایط اعمال rule را در بخش constraint تعیین کنید. سپس در فیلد action میتوانید تعیین کنید که اگر یک ریکوئست با constraint مورد نظر match شده چه اتفاقی بیفتد. برای اطلاعات بیشتر به این لینک مراجعه کنید.
Value
Type
firewall
true | flase
bool
enabled
array of objects
rules
Value
Type
firewall.rule
true | flase
bool
enabled
Max length: 64 characters
string
name
array of array of objects
constraints
object
action
هر constraint میتواند انواع مختلفی داشته باشد که بر اساس مشخصههای ریکوئست تعیین میشود. برای مثال میتوانید بگویید اگر method ریکوئست GET بود این rule اعمال شود. با استفاده از negate میتوانید اثر constraint برای match شدن را معکوس کنید (مشابه اپراتور لاجیکال NOT). برای اطلاعات بیشتر به این لینک (بخش ویژگیهای قابل استفاده در شرطهای فایروال) مراجعه کنید.
value
Type
firewall.rule.constraint
asn | cookie | country | header | ip | method | uri | path | args | http_version | tls | known_bots
در فیلد action میتوانید عملیاتی را که باید بعد از match شدن constraint انجام شود، تعیین کنید. برای مثال میتوانید یک چالش تعریف کنید و یا نرخ دسترسی کاربر را محدود کنید. برای اطلاعات بیشتر به این مستند مراجعه کنید.
برای تعریف چالش cookie لازم است نام کوکی را در فیلد name تعریف کنید. با استفاده از فیلد ttl مدت زمان اعتبار کوکی تعیین میشود. مقدار فیلد salt در محاسبه hash مقدار کوکی دخیل میشود، برای مثال میتوانید یک مقدار رشتهای رندوم برای این فیلد تعیین کنید.
Value
Type
firewall.rule.action.cookie
Max Length: 128
string
name
30-3600 seconds
int32
ttl
8-64 characters
string
salt
برای تعریف چالش Javascript لازم است نام کوکی را در فیلد name تعریف کنید (این کوکی بعد از حل چالش توسط browser استفاده میشود). با استفاده از فیلد ttl مدت زمان اعتبار کوکی (چالش حل شده) تعیین میشود. مقدار فیلد salt در محاسبه hash مقدار کوکی دخیل میشود، برای مثال میتوانید یک مقدار رشتهای رندوم برای این فیلد تعیین کنید. در بخش template فعلا فقط مقدار default قابل قبول است.
Value
Type
firewall.rule.action.js
Max Length: 128
string
name
30-3600 seconds
int32
ttl
8-64 characters
string
salt
default
string enum
template
برای تعریف چالش Captcha لازم است نام کوکی را در فیلد name تعریف کنید (این کوکی بعد از حل چالش توسط کاربر استفاده میشود). با استفاده از فیلد ttl مدت زمان اعتبار کوکی (چالش حل شده) تعیین میشود. مقدار فیلد salt در محاسبه hash مقدار کوکی دخیل میشود، برای مثال میتوانید یک مقدار رشتهای رندوم برای این فیلد تعیین کنید. در بخش template فعلا فقط مقدار default قابل قبول است. در قسمت backend سرویس نمایشدهنده کپچا تعیین میشود که در حال حاضر فقط از reCAPTCHA پشتیبانی میشود.
Value
Type
firewall.rule.action.captcha
Max Length: 128
string
name
30-3600 seconds
int32
ttl
8-64 characters
string
salt
default
string enum
template
recaptcha
string enum
backend
object
recaptcha
مقادیر مربوط به تنظیمات reCAPTCHA از طریق این لینک قابل دریافت است.
Value
Type
firewall.rule.action.captcha.recaptcha
1-128 characters
string
secret_key
1-128 characters
string
site_key
برای محدود کردن نرخ دسترسی کاربران، میتوانید از ratelimit استفاده کنید. در حال حاضر فقط از الگوریتم sliding_window پشتیبانی میشود. بصورت پیشفرض برای ریکوئستهای غیرمجاز خطای 429 ارسال میشود و برای ریکوئستهایی که identifier اشتباه دارند خطای 412 برگردانده میشود. برای تغییر این دو خطا به ترتیب میتوانید مقادیر statusCode و validationStatusCode را تغییر دهید. همچنین برای تغییر صفحه پیشفرض که با خطای 429 نمایش داده میشود مقدار فیلد template را تغییر دهید. برای اطلاعات بیشتر به این لینک (بخش محدود کردن نرخ دسترسی) مراجعه کنید.
Value
Type
firewall.rule.action.ratelimit
sliding_window
string enum
algorithm
>= 1
int32
rate
1-60 seconds
int32
period
200-499
int
statusCode
200-499
int
validationStatusCode
HTML (Max Characters: 5120)
string
template
object
identifier
Value
Type
firewall.rule.action.ratelimit.identifier
ip | jwt
string enum
type
object
jwt
Value
Type
firewall.rule.action.ratelimit.identifier.jwt
non-empty
string
secret
non-empty
string
payloadKey
non-empty
string
headerName
در فیلد logForwarder میتوانید access log خود را دریافت کنید. برای دریافت access log لازم است که یک سرویس بعنوان sink داشته باشید. در حال حاضر access log با فرمت زیر ارسال میشود (در صورت تغییر این فرمت به مشتریان اطلاعرسانی خواهد شد):
برای اطلاع از مقدار هر متغیر (که با $ شروع میشود) به این لینک مراجعه کنید.
Value
Type
logForwarder
true | false
bool
enabled
object
sink
در حال حاضر از kafka, clickhouse, elasticsearch و socket بعنوان sink پشتیبانی میشود. توجه کنید که بالا آوردن این سرویسها بعهده خود مشتری میباشد و ستون مسئولیتی برای نگهداری و پیادهسازی این سرویسها ندارد. بعد از تعیین type لازم است که اطلاعات دسترسی به آن سرویس را در فیلد مربوطه (همنام سرویس) وارد کنید.
Value
Type
logForwarder.sink
kafka | clickhouse | elasticsearch | socket
string enum
type
object
kafka
object
clickhouse
object
elasticsearch
object
socket
برای دریافت access log روی kafka لازم است که آدرس سرورهای bootstrap کافکا و همچنین topic مورد نظر را وارد کنید.
Value
Type
logForwarder.sink.kafka
URL
string
bootstrapServers
1-255 characters
string
topic
1-255 characters
string
table
برای دریافت لاگ روی elasticsearch لازم است که آدرس دسترسی به سرویس را تعیین کنید. همچنین میتوانید مقادیر index و pipeline را در صورت نیاز وارد کنید.
Value
Type
logForwarder.sink.elasticsearch
URL
string
endpoint
Max Length: 255 characters
string
index
Max Length: 255 characters
string
pipeline
درصورتی که قصد دارید access log را روی سرویس دیگری غیر از kafka, elasticsearch یا clickhouse دریافت کنید میتوانید از نوع socket بعنوان sink استفاده کنید. در حال حاضر از پروتکلهای TCP و UDP پشتیبانی میشود.