فایروال
هر برنامه و فانکشن یک فایروال دارد که پیش از اجرای کد شما روی همهٔ سرورهای لبه کار میکند. محافظتهای پایه همیشه روشناند؛ قاعدههای خودتان را اضافه کنید تا درخواستها را رد کنید، اجازه دهید، ثبت کنید یا محدود کنید. هر تغییر در چند ثانیه همهجا اعمال میشود و چیزی دوباره راهاندازی نمیشود.
محافظتهای همیشه روشن#
اینها برای همهٔ پروژهها روشناند، هزینهای ندارند و خاموش نمیشوند:
| محافظت | کار |
|---|---|
| محافظت در برابر سیل درخواست | هر آدرس میتواند چند صد درخواست در ثانیه به یک سرور بفرستد؛ بیشتر از آن برای لحظهای پاسخ ۴۲۹ میگیرد. |
| درخواستهای نادرست | درخواستهایی با هدر بیش از اندازه، مسیر نادرست یا پروتکل خراب پیش از هر قاعدهای رد میشوند. |
وضعیت فایروال «عادی» است، یا «در حال مقابله» وقتی یکی از این محافظتها در ده دقیقهٔ گذشته درخواستی را متوقف کرده باشد.
نوشتن قاعده#
هر قاعده یک نام، شرطها و یک کار دارد. شرطها در گروهاند: قاعده وقتی مطابق است که همهٔ شرطهای دستکم یک گروه برقرار باشند (در هر گروه «و»، بین گروهها «یا»).
| فیلد | عملگرها | مقدار |
|---|---|---|
ip | in | آدرسها یا بازههای CIDR (IPv4 و IPv6) |
country | in | کد دوحرفی کشور، مثلاً IR |
method | in | GET, POST, … |
path, host, user_agent | eq, starts, ends, contains, in, re | متن؛ re یک عبارت باقاعده است |
header (name) | همانها و exists | مقدار هدری که نامش را میدهید |
- هر شرط با
neg: true(در خط فرمانnot) برعکس میشود، مثلاً «هدرx-api-keyنیست». - مقایسهٔ متن به بزرگی و کوچکی حروف حساس نیست، جز
path. عبارت باقاعده نگاه به جلو و عقب و ارجاع برگشتی ندارد؛ با(?i)شروع کنید تا حروف یکسان شمرده شوند. - کشور از آدرس درخواست و با پایگاه دادهٔ کشورها روی خود سرور پیدا میشود؛ اگر پیدا نشود هیچ شرط کشوری مطابق نیست.
| کار | معنی |
|---|---|
deny | پاسخ ۴۰۳؛ کد شما اجرا نمیشود |
allow | درخواست بدون بررسی قاعدههای بعدی میگذرد |
log | شمرده و ثبت میشود و قاعدهٔ بعدی بررسی میشود |
rate_limit | بیش از limit درخواست در window ثانیه برای هر کلید: ۴۲۹ (یا فقط ثبت، با then: log) |
قاعدهها به ترتیب اجرا میشوند و اولین deny، allow یا محدودیت درخواستِ پرشده تصمیم میگیرد. ترتیب را با position هنگام ایجاد، با cloudhost firewall move یا با PUT …/firewall/order عوض کنید. قاعدهٔ خاموش در فهرست میماند و اجرا نمیشود.
cloudhost firewall add --project my-api --name "Block admin" --action deny \
--if "path starts /admin" --if "ip not in 10.0.0.0/8"
cloudhost firewall add --project my-api --name "Bots without a key" --action deny \
--if "user_agent re (?i)bot" --or --if "header:x-api-key not exists" --if "method in POST,PUT"
cloudhost firewall add --project my-api --name "Allow the office" --action allow --if "ip in 203.0.113.0/24" --position 0
cloudhost firewall rules --project my-api
cloudhost firewall move fwr_abc123def456 0 --project my-api
cloudhost firewall disable fwr_abc123def456 --project my-apiدر خط فرمان هر --if یک شرط است: "<فیلد>[:<نام هدر>] [not] <عملگر> [<مقدار>]". --ifهای پشتسرهم یک گروهاند و --or گروه بعدی را شروع میکند. برای in مقدارها با ویرگول جدا میشوند؛ برای بقیه همهٔ باقیمانده یک مقدار است.
محدودیت درخواست#
یک قاعدهٔ rate_limit درخواستهایی را که با شرطهایش مطابقاند برای هر کلید میشمارد: آدرس (ip، پیشفرض) یا مقدار یک هدر (header:<نام>، مثلاً کلید API مشتریتان). پنجرهها ۱۰، ۶۰، ۳۰۰، ۶۰۰ یا ۳۶۰۰ ثانیهاند.
شمارش بین همهٔ سرورهای پلتفرم مشترک است و در حدود یک ثانیه به هم میرسد؛ پس سقف برای کل پروژه است، نه برای هر سرور، و در یک ثانیهٔ اول ممکن است کمی بیشتر بگذرد.
cloudhost firewall add --project my-api --name "Login limit" --action rate_limit \
--if "path eq /login" --if "method in POST" --limit 10 --window 60 --key ip --then deny
cloudhost firewall edit fwr_abc123def456 --project my-api --limit 20آزمودن یک درخواست#
پیش از اعتماد به یک قاعده ببینید با یک درخواست چه میکند. چیزی به پروژه فرستاده نمیشود و محدودیت درخواست شمرده نمیشود (یک درخواست هیچوقت از سقف نمیگذرد).
cloudhost firewall check --project my-api --ip 203.0.113.7 --country DE --method POST --path /admin --header x-api-key=abc
# denied by rule fwr_abc123def456 "Block admin" → 403شمارشها، آدرسها و تاریخچه#
سرورها برای هر دقیقه میشمارند چند درخواست گذشت، رد شد، ثبت شد یا محدود شد و هر قاعده چند بار مطابق بود؛ برای ۱ ساعت، ۲۴ ساعت یا ۷ روز گذشته. آدرسها و کشورهایی که بیشترین درخواستِ متوقفشده را داشتند هم فهرست میشوند. شمارشها ۳۱ روز نگه داشته میشوند.
هر تغییر قاعده (ایجاد، تغییر، روشن و خاموش، حذف، جابهجایی) با کننده، زمان و حالت پیش و پس در تاریخچهٔ فایروال ثبت میشود و در گزارش فعالیت تیم هم هست.
cloudhost firewall --project my-api # status, protections, rules, limits
cloudhost firewall metrics --project my-api --range 24h
cloudhost firewall audit --project my-api --limit 20از دستیار هوش مصنوعی#
سرور MCP همین کارها را دارد: get_firewall، create_firewall_rule، update_firewall_rule، delete_firewall_rule، reorder_firewall_rules، check_firewall_request، firewall_metrics و firewall_audit. مثلاً: «برای my-api درخواستهای POST به /login را به ده در دقیقه برای هر آدرس محدود کن».
سقفها و هزینه#
| سقف (برای هر برنامه یا فانکشن) | رایگان | حرفهای | سازمانی |
|---|---|---|---|
| قاعدهٔ سفارشی | 3 | 40 | 200 |
| که محدودیت درخواست باشند | 1 | 10 | 50 |
| شرط در هر قاعده | 5 | 20 | 50 |
| مقدار در هر شرط | 50 | 1000 | 5000 |
بررسی فایروال رایگان است و شمرده نمیشود. درخواستی که رد یا محدود میشود کد شما را اجرا نمیکند، پس درخواست فانکشن حساب نمیشود و هزینهای ندارد. GET /v1/pricing سقف قاعدهها را میدهد (firewall_custom_rules، firewall_rate_limit_rules).
دادهٔ کشورها#
کشور هر آدرس از DB-IP میآید (IP to Country Lite، نوامبر ۲۰۲۶) با پروانهٔ CC BY 4.0. IP geolocation by DB-IP.