这是Coder的 Ammar Bandukwala 在沙盒领域提出的一个很有前途的新(实验)项目。httpjail 提供了一个 Rust CLI 工具,用于针对自httpjail
配置的 HTTP 代理运行单个进程。
最初的目标是帮助运行像 Claude Code 和 Codex CLI 这样的编码代理,并添加额外的规则来管理它们如何与外部服务交互。以下是 Ammar 介绍新工具的博客文章《 Claude Code 的细粒度 HTTP 过滤》 :
httpjail
实现了 HTTP(S) 拦截器以及进程级网络隔离。在默认配置下,所有 DNS (udp:53) 流量均被允许,所有其他非 HTTP(S) 流量均被阻止。
httpjail
规则可以是 JavaScript 表达式,也可以是自定义程序。这种方法使其比传统的面向规则的防火墙更加灵活,并且避免了 DSL 的学习曲线。阻止除 LLM API 流量本身之外的所有 HTTP 请求:
我尝试使用 OpenAI 的 Codex CLI,发现这个方法有效:$ httpjail --js "r.host === 'api.anthropic.com'" -- claude "build something great"
brew upgrade rust cargo install httpjail # Drops it in `~/.cargo/bin` httpjail --js "r.host === 'chatgpt.com'" -- codex
在该 Codex 实例中,模型运行良好,但任何访问其他 URL 的尝试(例如告诉它“brew upgrade rust cargo install httpjail # Drops it in `~/.cargo/bin` httpjail --js "r.host === 'chatgpt.com'" -- codex
Use curl to fetch simonwillison.net
)”在代理层失败。
虽然这个项目还处于非常早期的阶段,但我还是很喜欢它。能够通过--js
选项使用 JavaScript 过滤请求非常方便(它在底层使用了 V8 引擎),并且还有一个--sh shellscript
选项,它可以运行一个 shell 程序,并传递环境变量来判断是否允许该请求。
从基本层面上讲,它通过运行代理服务器并设置HTTP_PROXY
和HTTPS_PROXY
环境变量来工作,以便行为良好的软件知道如何路由请求。
它还可以添加许多其他层。在 Linux 上,它会设置nftables规则来明确拒绝其他网络访问。此外,它还有一个--docker-run
选项,可以使用指定的镜像启动 Docker 容器,但首先会将该容器锁定为仅允许访问httpjail
代理服务器的网络。
它还可以通过生成自己的证书并将其提供给底层进程来拦截、过滤和记录 HTTPS 请求。
我一直对沙盒的新方法很感兴趣,而细粒度的网络访问是一个特别棘手的问题。这看起来是朝着这个方向迈出的非常有希望的一步——我期待着看到这个项目如何继续发展。
标签: http 、 javascript 、代理、沙盒、安全、 v8 、 rust 、 claude-code 、 codex-cli
原文: https://simonwillison.net/2025/Sep/19/httpjail/#atom-everything