跳轉到主要內容
每一條防火牆規則都從回答*我套用於哪些工具呼叫?*開始。那個答案的 前半部分是一個工具名稱 glob——規則上的 tool_name_glob 欄位。 它是一套刻意保持很小、區分大小寫的文法(沒有 regex、沒有回溯), 所以一條規則讀起來就和你會從 Discovered tools 分頁打出一個工具 名稱的方式一樣,而匹配在中繼熱路徑上維持線性時間。 本頁是針對那一個欄位的聚焦文法參考。關於一個 glob 在一條完整規則 內部的位置——介面、引數子句、egress 清單、裁決——參見 規則綱要防火牆規則中的深入引擎參考。

1. 為何用一個 工具名稱 glob 而非 regex

工具按慣例以 server.toolcategory.action 命名空間化 (shell.execdb.querycommunity.http_fetch)。一個 glob 讓 一條規則捕捉整個家族——shell.* 對應每個 shell 動詞、*.delete 對應 跨伺服器的一個動詞——而沒有一個在每次工具呼叫上執行的路徑上跑 regex 的自傷風險。
這套文法刻意很小。匹配是區分大小寫的——MCP 工具名稱按慣例是 小寫加點,所以一次大小寫摺疊會讓一個直接從 Discovered tools 檢視 複製貼上一個名稱的作者感到意外。它背後沒有 regex 引擎,所以沒有 災難性的回溯;下面每一個模式都是少數幾個字串操作。

2. 五種模式形狀

一個工具名稱 glob正好是這些形狀之一。任何不符合萬用字元形式的 東西都被當作一個字面的精確匹配。
模式形狀匹配
""*任意每一次工具呼叫。
foo.*前綴foo.barfoo.exec——不含光禿禿的 foo
*.exec後綴shell.execdb.exec以及光禿禿的 exec
*.shell.*中綴local.shell.execbyo.shell.run
shell.exec精確只有字面字串 shell.exec
閱讀下面各節以了解每種形狀中那一個會絆倒人的邊角。

3. 前綴——foo.*

匹配任何名稱以 foo. 開頭且在點之後至少還有一個字元的工具。

匹配

對於模式 shell.*,匹配 shell.execshell.runshell.rm

不匹配

光禿禿的 shell(前綴要求尾隨的點其後有某個東西)
用一個前綴 glob 來一次治理整個伺服器或類別——一個 shell.* deny 涵蓋一個伺服器之後可能加入的每個 shell 動詞。

4. 後綴——*.exec

匹配任何名稱以 .exec 結尾、錨定在一個點上的工具——以及也匹配 那個光禿禿、未命名空間化、單獨存在的動詞 exec
那個光禿禿動詞的匹配是刻意的。供應商原生函式呼叫與不做命名空間化 的 MCP 伺服器會以一個工具的光禿禿動詞公開它(只是 exec,而非 shell.exec)。一條 *.exec 規則涵蓋兩種形狀,所以一個不做 命名空間化的工具不會被靜默漏掉。
後綴保持錨定——它不會匹配一個部分單字:
模式shell.exec光禿禿的 execshell.execute
*.exec匹配匹配不匹配
shell.execute 會需要 *.execute;後綴只在一個點邊界或字串起點觸發, 絕不在單字中間。

5. 中綴——*.shell.*

匹配任何名稱包含 .shell. 作為一個中綴、且兩側各至少一個字元的 工具。這就是一條規則如何涵蓋一個動詞,無論一個 BYO-MCP 伺服器 碰巧如何將它命名空間化。
{
  "label": "gate every shell tool, any server",
  "tool_name_glob": "*.shell.*",
  "verdict": "deny"
}
那條規則匹配 local.shell.execbyo.shell.run,以及任何其他 <server>.shell.<verb> 形狀。它匹配光禿禿的 shell 或一個 周圍什麼都沒有的光禿禿 .shell.——兩側各需一字元的要求讓中綴 保持誠實。
中綴形式只是那個對稱的 *.X.* 形狀。一個星號在中間的模式 ——foo.*.bar——不是一個中綴 glob;它落入一個精確字串匹配 (它只匹配一個字面名為 foo.*.bar 的工具,而那不會存在)。要匹配 「以 foo. 開頭、以 .bar 結尾」,你需要兩條規則或一個 引數子句,而非一個 glob。

6. 精確——shell.exec

任何不是上述萬用字元形狀之一的東西都是一個字面字串匹配。 shell.exec 匹配 shell.exec 而非其他任何東西。當你想指名一個特定 工具時這是正確的選擇——將它與一個 引數子句搭配以進一步 收窄(「只在指令為 rm -rf 時封鎖 shell.exec」)。

7. 一個具體範例

假設你想拒絕每一個破壞性的 shell 動詞,無論一個 MCP 伺服器如何將它 命名空間化,同時讓其餘一切稽核。在主控台規則編輯器中(寫入需要 Developer+),規則的匹配那一半是單一的中綴 glob:
{
  "label": "deny shell across servers",
  "stage": "response",
  "tool_name_glob": "*.shell.*",
  "verdict": "deny"
}
將一個金鑰綁定到該政策(金鑰上的 firewall_policy_id),規則現在 就捕捉 local.shell.execbyo.shell.runacme.shell.rm——三個 伺服器、一個 glob。想在你依賴它之前確認它在你預期的東西上觸發? 使用測試規則——它會傳回裁決、 匹配到的規則與原因,而不派發任何東西。
一個 glob 收窄哪個工具。要以哪些引數收窄,將一個 引數子句與同一條規則 做 AND;要只在一個特定技能擁有某工具時才治理它,加入一個技能 名稱 glob(相同文法,對照擁有它的技能匹配)。兩者都涵蓋於 防火牆規則

8. 快速參考

是。*.exec 匹配 shell.execdb.exec以及光禿禿、未命名 空間化的 exec。前綴 glob(foo.*匹配光禿禿的命名空間 foo——只匹配點之後有某個東西的名稱。
沒有。引擎理解的唯一中間萬用字元形狀是對稱的中綴 *.X.*foo.*.bar 落入一個精確字面匹配。改用兩條規則或一個引數子句。
是。Shell.Execshell.exec 是不同的工具。從 Discovered tools 分頁逐字複製名稱。
任何不是上述五種之一的形狀都被當作一個精確匹配——它就是不會 匹配一個真實的工具名稱,所以該規則永不觸發,而不是匹配某個 意料之外的東西。主控台會在儲存時驗證規則。

相關

工具允許清單

用 glob 允許一個已知集合並拒絕其餘。

驗證引數

將一個 JSONPath 引數子句與一個 glob 做 AND。

規則綱要

一條規則的每個欄位,集於一處。
關於完整的匹配語言——裁決、介面、egress 清單與序列——參見 防火牆規則。剛接觸這個平面?從 防火牆總覽開始。