تنظیمات فایروال با API
در فیلد 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 | string enum | type |
True | false | bool | negate |
object | asn | |
object | cookie | |
object | country | |
object | header | |
object | ip | |
object | method | |
object | uri | |
object | path | |
object | args | |
object | http-version | |
object | tls | |
object | known-bots |
Value | Type | firewall.rule.constraint.asn |
---|---|---|
equals | lesser | greater | string enum | operator |
Max Length: 10, numbers >= 0 | array of int32 | expected |
Value | Type | firewall.rule.constraint.cookie |
---|---|---|
equals | contains | starts_with | ends_with | matches | string enum | operator |
Max Length: 128 | string | name |
<= 10 strings with 0-4096 characters | array of strings | expected |
Value | Type | firewall.rule.constraint.country |
---|---|---|
equals | string enum | operator |
<= 10 strings with 0-10 characters | array of strings | expected |
Value | Type | firewall.rule.constraint.header |
---|---|---|
equals | contains | starts_with | ends_with | matches | string enum | operator |
Max Length: 128 | string | name |
<= 10 strings with 0-4096 characters | array of strings | expected |
Value | Type | firewall.rule.constraint.ip |
---|---|---|
ip_matches | string enum | operator |
<= 10 CIDRv4 | array of strings | expected |
Value | Type | firewall.rule.constraint.method |
---|---|---|
equals | string enum | operator |
<= 10 GET | POST | PURGE | PUT | HEAD | OPTIONS | DELETE | PATCH | array of string enums | expected |
Value | Type | firewall.rule.constraint.uri |
---|---|---|
equals | contains | starts_with | ends_with | matches | string enum | operator |
<= 10 strings with 0-4096 characters | array of string | expected |
Value | Type | firewall.rule.constraint.path |
---|---|---|
equals | contains | starts_with | ends_with | matches | string enum | operator |
<= 10 strings with 0-4096 characters | array of string | expected |
Value | Type | firewall.rule.constraint.args |
---|---|---|
equals | contains | starts_with | ends_with | matches | string enum | operator |
Max Length: 128 | string | name |
<= 10 strings with 0-4096 characters | array of string | expected |
Value | Type | firewall.rule.constraint.http_version |
---|---|---|
equals | string enum | operator |
<= 10 HTTP/1.0 | HTTP/1.1 | HTTP/1.2 | HTTP/2 | HTTP/3 | array of string enums | expected |
Value | Type | firewall.rule.constraint.tls |
---|---|---|
equals | string enum | operator |
true | false | bool | expected |
Value | Type | firewall.rule.constraint.known_bots |
---|---|---|
equals | string enum | operator |
true | false | bool | expected |
در فیلد action میتوانید عملیاتی را که باید بعد از match شدن constraint انجام شود، تعیین کنید. برای مثال میتوانید یک چالش تعریف کنید و یا نرخ دسترسی کاربر را محدود کنید. برای اطلاعات بیشتر به این مستند مراجعه کنید.
Value | Type | firewall.action |
---|---|---|
allow | block | js | captcha | bypass | cookie | ratelimit | string enum | type |
object | cookie | |
object | js | |
object | captcha | |
object | ratelimit |
برای تعریف چالش 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 پشتیبانی میشود.
Value | Type | logForwarder.sink.socket |
---|---|---|
tcp | udp | string enum | protocol |
hostname:port | string | address |