Chuyển đến nội dung chính
Một quy tắc firewall khớp một cuộc gọi tool trên hai trục: tool nào (một tool_name_glob) và argument nào (các mệnh đề args_match trên các trường JSONPath). Trang này là ngữ pháp chính xác cho cả hai — một mẫu khớp gì, không khớp gì, và mỗi toán tử ép kiểu ra sao — để một quy tắc bạn soạn trong console hành xử đúng như bạn đọc nó ở đây. Use-case nổi bật: biến một “block shell.exec” thô bạo thành một “block shell.exec chỉ khi lệnh trông giống rm -rf” có phẫu thuật. Glob chọn họ tool; các toán tử argument chọn cuộc gọi nguy hiểm bên trong nó.
Đây là tham chiếu cú pháp. Về nơi các mệnh đề này nằm trên một quy tắc, thứ tự quy tắc, và verdict, xem tham chiếu sâu Quy tắc firewall. Về chính các trường của quy tắc, xem tổng quan Firewall.

1. Cú pháp này áp dụng ở đâu

Cả hai dạng đều được soạn trên một quy tắc firewall, trong console dưới /console/firewall (ghi yêu cầu Developer+). Bạn không bao giờ gọi trực tiếp matcher — gateway đánh giá nó trên mọi cuộc gọi tool đối với chính sách đã phân giải. Một quy tắc khớp khi bề mặt của nó, tool_name_glob của nó, glob skill tùy chọn của nó, các mệnh đề args_match của nó tất cả khớp; match đầu tiên thắng.
Một quy tắc không có mệnh đề args_match nào khớp dựa trên glob tên-tool một mình. Chỉ thêm các mệnh đề argument khi tên tool chưa đủ cụ thể.

2. Ngữ pháp glob tên-tool

tool_name_glob là một ngữ pháp có chủ đích nhỏ, dự đoán được — không phải một regex đầy đủ. Các mẫu được khớp phân biệt chữ hoa-thường (tên tool MCP theo quy ước là chữ-thường-có-dấu-chấm, nên một lần case-fold sẽ làm bạn ngạc nhiên khi bạn sao chép một tên từ tab Discovered tools).
Một mẫu rỗng hoặc một * trơ khớp tất cả các tool. Dùng nó trên một quy tắc catch-all, hoặc dựa vào default_verdict của chính sách thay vào đó.
shell.* khớp shell.exec, shell.read, shell.write. Nó không khớp shell trơ (dấu chấm là bắt buộc — một glob tiền tố chỉ bao phủ các con có namespace).
*.exec khớp shell.exec có namespace exec trơ, không-namespace (các function call provider-native và các MCP server không-namespace phơi bày tool dưới động từ trơ, nên một quy tắc hậu tố bao phủ cả hai hình dạng). Hậu tố giữ neo ở một dấu chấm hoặc đầu chuỗi, nên *.exec không khớp shell.execute.
*.shell.* khớp bất kỳ hình dạng <server>.shell.<verb> nào — local.shell.exec, byo.shell.run. Nó yêu cầu ít nhất một ký tự ở mỗi bên của infix, nên *.shell.* không khớp shell trơ hay .shell. một mình. Chỉ hình dạng đối xứng *.X.* được xử lý như một infix; một mẫu hỗn hợp như foo.*.bar rơi xuống khớp chính xác.
Bất kỳ mẫu nào không phải một trong bốn hình dạng wildcard ở trên (bao gồm một tên tool literal, hoặc một combo méo như foo.*.bar) được so sánh như một chuỗi chính xác, phân biệt chữ hoa-thường.
Không có wildcard một-ký-tự ?, không có character class, và không có * giữa-token (vd: sh*l.exec). Một mẫu không phải một trong bốn hình dạng được hỗ trợ được khớp literal — sh*l.exec chỉ khớp một tool có tên literal là sh*l.exec. Hãy soạn với các hình dạng ở trên, không phải trí nhớ cơ bắp về regex.

3. Các mệnh đề argument JSONPath

args_match là một tập mệnh đề, mỗi cái là một bộ ba {path, op, value}. path là một JSONPath vào đối tượng argument của cuộc gọi tool; op là một trong bảy toán tử; value là cái để so sánh đối với. Tất cả các mệnh đề trong một quy tắc được AND lại với nhau — mỗi mệnh đề phải khớp để quy tắc kích hoạt.
{
  "clauses": [
    {"path": "$.command", "op": "regex", "value": "rm -rf|drop table"},
    {"path": "$.connection", "op": "in", "value": ["prod", "replica"]}
  ]
}

Tập con JSONPath được hỗ trợ

Hình dạngKhớp
$.fooMột key cấp cao nhất.
$.foo.barMột key lồng nhau.
$.foo[0]Một phần tử mảng theo chỉ số.
$.arr[1].kChỉ số rồi key (tổ hợp của các cái trên).
Đó là toàn bộ tập con. Không có wildcard ($.*), filter ($.foo[?(...)]), slice ($.foo[0:2]), hoặc đệ quy đi xuống ($..foo).
Fail-closed trên path. Nếu path của một mệnh đề phân giải về không gì cả — key thiếu, các argument không phải JSON hợp lệ, hoặc value sai kiểu cho toán tử — mệnh đề đó đánh giá thành false, quy tắc không kích hoạt, và việc đánh giá rơi xuống quy tắc tiếp theo hoặc mặc định chính sách. Một argument méo không bao giờ tự-deny và không bao giờ làm sập engine.

4. Các toán tử argument

Bảy toán tử, một tập đóng. Trình validator console và engine live chia sẻ đúng cùng từ vựng, nên một mệnh đề lưu được là một mệnh đề chạy được.
Toán tửSo sánhQuy tắc kiểu
eqBằng chính xác.Có kiểu: string↔string, bool↔bool, hoặc number↔number. Kiểu hỗn hợp không bao giờ khớp.
containsChứa chuỗi con.Cả hai bên phải là string; bất cứ thứ gì khác là không-khớp. Một value rỗng khớp mọi string.
regexMột mẫu RE2 (thời gian tuyến tính, không backreference) đối với một string.Value và arg đã phân giải đều phải là string. Một mẫu không hợp lệ vô hiệu mệnh đề (không bao giờ khớp).
inThành viên — value bằng bất kỳ phần tử nào của một list.Value phải là một JSON array; mỗi phần tử so sánh với ngữ nghĩa eq.
cidr_matchValue đã phân giải là một IP bên trong mạng đã cho.Value là một chuỗi CIDR (IPv4 hoặc IPv6, vd: 10.0.0.0/8, fd00::/8); arg phải parse được thành một IP.
gtLớn-hơn, số.Cả hai bên phải ép được thành một số. Một string trông giống số không được ép — đó là một mismatch kiểu (không-khớp).
ltNhỏ-hơn, số.Cùng quy tắc chỉ-số như gt.
gtlt là số nghiêm ngặt. Nếu một tool gửi {"max_rows": "10000"} (một string), một mệnh đề gt 5000 không kích hoạt — string không bao giờ được ép. So sánh số với số; dùng regex hoặc contains cho các value dạng string.

5. Một ví dụ chạy thực

Chặn một lần export database phá hủy, nhưng chỉ khi nó nhắm tới một connection production qua một host mạng riêng:
{
  "tool_name_glob": "db.*",
  "args_match": {
    "clauses": [
      {"path": "$.statement", "op": "regex", "value": "(?i)drop|truncate|delete from"},
      {"path": "$.connection.name", "op": "in", "value": ["prod", "prod-replica"]},
      {"path": "$.connection.host_ip", "op": "cidr_match", "value": "10.0.0.0/8"}
    ]
  }
}
Đọc nó từ trên xuống: glob db.* scope quy tắc vào họ tool database; ba mệnh đề AND với nhau nên verdict (một deny, chẳng hạn) kích hoạt chỉ khi statement phá hủy connection là một trong hai target prod có tên host của nó rơi vào dải riêng 10.0.0.0/8. Một db.query đối với một connection dev trên một IP công khai lướt qua quy tắc này mà không hề hấn.
Chứng minh mệnh đề trước khi bạn tin nó: tab Test trên một chính sách dry-run một cuộc gọi tool mẫu và hiển thị quy tắc đã khớp và verdict, không lưu gì và không dispatch gì. Xem Khả năng quan sát firewall.

6. Các quy tắc egress (host / CIDR)

Toán tử cidr_match ở trên khớp một IP mà một tool báo cáo trong các argument của nó. Điều đó khác với một quy tắc bề mặt egress, vốn đánh giá đích đến đi ra ngoài mà một tool thực sự vươn tới bằng một danh sách allow hoặc deny host/CIDR — phòng vệ SSRF và exfiltration dữ liệu chính. Các quy tắc egress dùng cùng ký hiệu CIDR nhưng sống trên bề mặt egress; xem Quy tắc firewall để biết định dạng danh sách egress.
Không preset nào cung cấp các quy tắc egress CIDR cho bạn — autonomy level tight từ chối các tên tool dạng fetch phổ biến (http_fetch, fetch_url, web_search, request), không phải các dải mạng. Hãy soạn quy tắc deny host/CIDR của riêng bạn khi bạn cần ghim egress vào các đích đến cụ thể.

7. Tham chiếu nhanh

Các hình dạng glob

* tất cả · foo.* tiền tố · *.exec hậu tố (+ động từ trơ) · *.X.* infix · bất cứ thứ gì khác chính xác. Phân biệt chữ hoa-thường.

JSONPath

$.foo · $.foo.bar · $.foo[0] · $.arr[1].k. Không wildcard, filter, slice, hay đệ quy đi xuống.

Toán tử string

eq (có kiểu) · contains (chuỗi con) · regex (RE2) · in (thành viên list).

Toán tử số & mạng

gt / lt (chỉ số, không ép string) · cidr_match (IPv4/IPv6 trong dải).

Liên quan

Quy tắc firewall

Mô hình quy tắc đầy đủ — bề mặt, thứ tự, sanitizer, sequence, và danh sách egress.

Cuộc gọi tool nguy hiểm

Mối đe dọa mà các mệnh đề này phòng vệ, và cách scope một quy tắc vào nó.

Bảng thuật ngữ verdict

allow, audit, deny, sanitize, và phần còn lại làm gì một khi một quy tắc khớp.

Tại sao bị chặn?

Truy vết một lần chặn cụ thể về quy tắc và mệnh đề đã kích hoạt.