AWF :一行命令让 AI Agent 只能访问白名单域名

你有没有想过一个问题:当你让 AI Agent 帮你写代码、调 API、搜文档的时候,它到底在访问哪些域名?

大部分 Agent 工具对网络访问的控制基本为零。Copilot CLI 要调 api.github.com,Claude Code 要连 api.anthropic.com,Cursor 要访问自己的后端服务。这些请求从你的机器发出去,但你对它们能连接什么、不能连接什么,完全没有任何约束手段。

这件事的严重性被严重低估了。AI Agent 正在从”辅助工具”变成”自主执行者”,它不再只是给你建议,而是直接运行命令、发起网络请求、操作文件系统。给它 root 权限,它就能做任何事。不给 root 权限,它依然可以做很多你不希望它做的事。

AWF(Agentic Workflow Firewall)就是冲着这个缺口来的。它是 GitHub 官方出品的一个 CLI 工具,专门给 AI Agent 的容器加上网络防火墙,只允许访问你指定的域名白名单。说白了这个工具解决的就是一句话的事:让 Agent 能干活,但别让它乱跑。

环境准备

AWF 的安装简单到令人意外。毕竟它的底层是 Docker 容器加 iptables 规则,按常理应该有一堆依赖要折腾。但 GitHub 把复杂度全包进了安装脚本里。

前置条件只有两个:一台装了 Docker 的 Linux 机器(WSL2 也行),以及 sudo 权限。没了。不需要 Node.js 运行环境,不需要手动配 iptables,不需要懂容器网络。安装脚本会自动处理一切:

curl -sSL https://raw.githubusercontent.com/github/gh-aw-firewall/main/install.sh | sudo bash

跑完之后用 sudo awf --version 验证一下。如果输出了版本号,环境就绪了。我见过有人在 WSL2 上装,第一次因为 Docker daemon 没启动卡住了,sudo service docker start 一把就好。官方仓库里的 Issues 区也反映了类似的情况,不算什么大坑。

AWF :一行命令让 AI Agent 只能访问白名单域名

额外提一嘴,AWF 目前只支持 Linux。macOS 用户得在虚拟机或 Docker Desktop 里跑。Windows 用户走 WSL2 路线。这个平台限制是它架构决定的(依赖 iptables 和 Docker 网络栈),短期内不会改变。

操作流程

AWF 的核心用法一句话就能说清楚,但这句话背后的设计值得仔细拆解。

最基本的命令长这样:

sudo awf --allow-domains github.com -- curl https://api.github.com

-- 是分隔符,左边是防火墙配置,右边是要执行的命令。这个设计很干净,不需要额外配置文件,不需要预先定义规则,所有东西都在一行命令行里。用惯了 Docker 的 -- 分隔符的人应该秒懂。

在实际使用中,你会发现域名的白名单逻辑比表面看起来聪明。--allow-domains github.com 不仅放行 github.com,还自动放行它的子域名:api.github.com、raw.githubusercontent.com 等等。如果你需要更精细的控制,可以用 --block-domains 在允许的域名里再排除特定子域:

sudo awf \
  --allow-domains example.com \
  --block-domains internal.example.com \
  -- curl https://api.example.com

通配符也支持。*.googleapis.com 匹配所有 Google API 子域,api-*.example.com 匹配前缀模式。对于需要访问多个 API 端点的场景,这个粒度刚好够用。

AWF :一行命令让 AI Agent 只能访问白名单域名

开调试日志也很方便,--log-level debug 就能看到 Squid 代理层面的请求转发日志。如果你需要排查”为什么这个域名访问不了”,先开 debug 看代理日志,大概率是域名匹配规则没覆盖到。

关键设计

AWF 的架构设计是它最值得写的地方。它不是简单的 iptables 脚本包装器,而是一个三容器协同系统。

从 GitHub 仓库的源码和 1577 次提交记录来看,AWF 启动时会拉起三个容器:Squid 正向代理、Agent 执行容器、以及一个可选的 API Proxy sidecar。流量路线是这样的:Agent 容器发出的 HTTP/HTTPS 请求先被 iptables 规则 DNAT 重定向到 Squid 代理,Squid 根据白名单决定放行还是拒绝。API Proxy sidecar 则专门处理 Copilot 的鉴权流量,把真实的 API Key 从 Agent 容器中隔离出去。

AWF :一行命令让 AI Agent 只能访问白名单域名

这个设计有几个特别聪明的点:

  • iptables 规则打在了 DOCKER-USER 链上而非 INPUT/OUTPUT 链。这意味着规则对宿主机上所有容器生效,不会被 Docker 自己的规则覆盖,也不需要在每个容器里单独配置网络策略。
  • Agent 容器永远拿不到真实的 API Key。GitHub 用了一套 placeholder 机制:Agent 容器里注入的是假 Token,真正的凭据由 API Proxy sidecar 持有,Agent 发起的 API 请求经过 sidecar 时才会被注入真实凭据。
  • Token 在代理启动后 5 秒内从环境变量中清除,连 /proc/1/environ 都读不到。配合进程以非 root 用户运行,攻击面被压缩到了最小。
  • Squid 代理配置不通过文件挂载传入,而是用 base64 编码的环境变量注入。这个细节意味着即使在 Docker-in-Docker 场景下,敏感配置也不会以文件形式残留在宿主机上。

这几层防御叠在一起,已经不是”挡一下”的水平了。从设计意图推断,GitHub 内部对 Agent 安全的重视程度应该远超对外公开的程度。

但也不是没有槽点。Chroot 模式始终启用(早期版本是可选的,后来改成了强制),这意味着 Agent 容器对宿主机文件系统的访问被限制在几个白名单目录里。安全性的确提升了,但如果你想让 Agent 访问宿主机的某个非标准路径,就得手动加 --mount 参数。而且绕过 HTTPS_PROXY 直连 TLS 的工具会遇到握手失败,因为 Squid 期待的是 CONNECT 方法。这对于用原生 TCP 连接的工具是个硬伤。

使用场景

AWF 最典型的场景,就是运行你不完全信任的 AI Agent。

GitHub 自己已经把 AWF 深度集成到了 Copilot CLI 的工作流里。在 Copilot 的 agentic workflow 中,所有由 AI 触发的命令都跑在 AWF 沙箱里,网络访问被严格限制在 GitHub API 和 Copilot API 的域名范围内。这套机制在 GitHub 内部已经跑了 29 个以上的自动化工作流,从代码审查到 CI 辅助,每天执行成千上万次。

另一个场景是开发者的本地测试。你在让 Claude Code 或 Cursor 帮你写一个需要调外部 API 的功能时,Agent 会发出 HTTP 请求验证代码逻辑。用 AWF 包一层,确保它只访问你指定的 API 域名,不会意外把代码片段或调试信息发到不该发的地方。

还有一类用法被低估了:验证第三方工具的网络行为。你从 GitHub 上 clone 了一个看起来还行的开源 CLI 工具,不确定它会不会在后台偷偷发数据。用 AWF 运行它:

sudo awf --allow-domains "" -- ./suspicious-tool

白名单设为空,它连一个字节的数据都发不出去。跑完之后检查 Squid 的代理日志,所有被拦截的 DNS 查询和连接尝试一清二楚。比在 /etc/hosts 里手动加规则省事多了。

洞察与反思

AWF 这个项目让我重新想了一个问题:AI Agent 的安全模型到底应该长什么样。

目前主流的做法是”权限最小化”,限制 Agent 能调哪些工具、能读哪些文件、能用哪些 API。这是应用层的控制。但网络层的控制几乎没人做。AWF 补的就是这一层。它不是替代 RBAC 或工具权限系统,而是和它们叠加使用,形成纵深防御。这个思路很对,只是现在意识到的人还不多。

从 GitHub Issues 来看,这个项目还处在早期阶段。99 个 Star、72 个待解决的 Issue,说明用户基数不大但反馈很活跃。比较典型的问题是 gVisor 运行时的偶发崩溃(segfault 或 abort)、Docker-in-Docker 场景下的配置复杂度,以及对 macOS 和 Windows 原生支持的需求。这些都不是致命问题,但确实限制了它的推广速度。

站在 2026 年年中这个时间点,Agent 安全工具的市场几乎还是空白。AWF 踩准了时间窗口,但能不能跑起来,取决于 GitHub 愿不愿意把它从”内部工具的开源版”推到”独立产品”的定位。如果只是作为 Copilot 生态的附属品存在,它很难吸引 GitHub 之外的用户。

从更宏观的视角看,Agent 安全的缺失很大程度上是因为”还没出过大事”。没有一起公开的、由 AI Agent 网络行为导致的安全事故被广泛报道,所以大多数团队还没有把这件事排上优先级。但这不是”不会出事”的证据,只是”还没出事”的时间差。等第一起事故出来再补防线,代价就不是装个 AWF 这么简单了。

资源地址

资源 地址
GitHub https://github.com/github/gh-aw-firewall
Smithery https://smithery.ai/skills/github/awf-skill
文档 https://github.com/github/gh-aw-firewall#readme

总结

AWF 做的事情不复杂:给 AI Agent 套一个网络白名单。但这件事背后的思路值得跟下去,因为它在回答一个更根本的问题,当 AI 开始自主执行操作时,信任边界应该画在哪。

目前 AWF 最适合的场景还是 GitHub Copilot 生态内的重度用户,以及那些需要在本地沙箱化运行 Agent 的开发者。如果你只是偶尔用用 Cursor 写代码,AWF 带来的额外复杂度可能超过它的安全收益。但如果你在搭建一套自动化的 Agent 工作流,或者需要让 Agent 处理敏感数据和 API 调用,它值得放进你的工具箱。

工具本身还在快速迭代中。关注它的 release notes,尤其是 agent timeout、DNS 预解析、CA 根证书支持这几个方向的更新,每一个都在让”沙箱化 Agent”这件事更接近生产可用。

skills资源

Executive-briefing :Anthropic 这个 Skill 把“向上管理”做成了一行代码都不写的事

2026-7-27 10:41:43

开源项目

MoneyPrinterTurbo:没学过剪辑也能日更 10 条

2026-6-18 13:28:37

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧