防火墙仅对通过 MCP 派发路径或 evaluate hook 路由到网关的
目的地看到出站流量。你的智能体完全在其自己进程内执行的工具
在其视野之外。将你的智能体的网络绑定工具调用通过网关路由,
它们就会受到治理。
1. 攻击如何工作
通过智能体的典型路径分三步:- 注入——智能体读取携带嵌入指令的不可信内容(网页、获取 的文档、CRM 备注)。
- 收集——注入的指令告诉智能体使用它已有的工具收集敏感 材料——API 密钥、数据库行、用户 PII。
- 外泄——智能体被告知通过 fetch 形工具发送该材料:
http_fetch、web_search、fetch_url或request。目的地 由攻击者控制。
169.254.169.254(云元数据)、内部 Redis 端口或另一个
私有服务。注入步骤参见提示注入;
本页关注网络步骤。
2. 出站允许列表——锁定出站目的地
最持久的防御是出站允许列表:列举你的智能体被合法允许访问的 主机,并拒绝其他一切。 出站规则使用stage: egress 和 egress 字段。判定控制极性——
allow 放行列出的目的地;低优先级的 deny 通配符拦截其余的:
169.254.169.254 这样的
目的地仍然会被 10.0.0.0/8 CIDR 拒绝条目捕获。被拦截的调用返回
HTTP 400,错误码为 firewall_blocked。
要在没有明确允许列表的情况下拒绝已知恶意范围,写一个有针对性的
出站拒绝规则,列出云元数据端点(169.254.169.254)和 RFC-1918
私有范围(10.0.0.0/8、172.16.0.0/12、192.168.0.0/16)。
在其上以更低的优先级数字叠加你的允许列表,这样拒绝规则先被评估。
3. 在名称层拦截 fetch 形工具
在出站目的地被评估之前,你可以完全移除该能力。tight 自治级别
按工具名 glob 拒绝 http_fetch、web_search、fetch_url 和
request,作为 SSRF 和外泄的最后保障。如果你的智能体不需要任何
这些工具,tight 一步移除攻击面:
tight 姿态的情况下拒绝 fetch 工具,写一条
inbound 执行面的拒绝规则。inbound 在模型选择工具之前拦截
工具——智能体在其工具列表中永远不会收到该能力:
4. Secrets Blocker 防护栏——在提示词层阻止凭证
Secrets Blocker 防护栏在输入阶段运行,在请求离开网关之前 扫描提示词中的 AWS 风格访问密钥、OpenAI 密钥、Anthropic 密钥、 GitHub 令牌和类似的凭证模式。如果检测到密钥,请求就会被拦截—— 凭证永远不会到达模型,也永远不会出现在工具调用中。 从 Guardrails 面板启用它,或作为tight 自治级别的一部分。它独立
于防火墙出站规则。
| 威胁 | 阻止它的层 |
|---|---|
| 提示词携带 API 密钥 | Secrets Blocker(输入防护栏) |
| 智能体调用 fetch 工具朝向攻击者主机 | 出站允许/拒绝规则 |
| 向模型声明的 fetch 形工具 | Inbound 拒绝规则或 tight 自治 |
| 智能体访问云元数据或 RFC-1918 | 列出这些 CIDR 的出站拒绝规则 |
5. 使用影子模式推出
如果你不确定你的智能体今天合法访问哪些主机,在执行之前从 影子模式开始:- 用你预期的允许列表创建出站规则,并在策略上设置
shadow_mode: true。 - 观察 Events 信息流——会被拦截的调用以
[shadow] would deny和目的地出现。 - 调整
allow列表,直到只有攻击者可到达的目的地会被拒绝, 然后禁用影子模式开始执行。
6. 下一步去哪里
防火墙规则参考
完整匹配语言——出站列表、CIDR、参数子句和所有判定。
智能体防火墙概览
策略、执行面、自治级别和可观测性。
提示注入
将智能体引向外泄的注入步骤。
MCP 工具投毒
注册 fetch 形能力的恶意 MCP 工具。
