OpenSandbox FQDN白名单实战:只让AI沙箱访问你批准的域名

发布时间:2026/9/15 16:17:07
OpenSandbox FQDN白名单实战:只让AI沙箱访问你批准的域名 OpenSandbox FQDN白名单实战只让AI沙箱访问你批准的域名【免费下载链接】OpenSandboxSecure, Fast, and Extensible Sandbox runtime for AI agents.项目地址: https://gitcode.com/GitHub_Trending/ope/OpenSandboxOpenSandbox是面向 AI Agent 的开源安全沙箱运行时其FQDN 白名单域名级出口网络控制能力可以让你在创建沙箱时用一行声明式配置限制沙箱只能访问你批准的域名如api.github.com、*.pypi.org其余出站流量默认全部拒绝。对于需要运行第三方代码或让 Coding Agent 自由执行命令的场景这是防止数据外泄和恶意请求的关键防线 ️。为什么用 FQDN 白名单而不是 IP 白名单很多沙箱方案包括部分商业平台用 IP 或 CIDR 段做出口控制但在 AI Agent 场景下有明显短板痛点说明 IP 漂移云服务、CDN 的 IP 经常变动人工维护 IP 白名单成本高且容易出错 共享 IP 漏洞多个服务共享同一 IP 时按 IP 放行可能意外放行同主机上的其他服务✍️ 体验差让开发者先做 DNS 解析再填 CIDR远不如直接写允许访问openai.com直观FQDN 白名单让策略声明更贴近人的心智模型且由 OpenSandbox 的 Egress Sidecar 自动完成域名 → IP的动态跟踪。工作原理DNS 代理 网络层双保险OpenSandbox 的 FQDN 出口控制由一个与沙箱应用共享网络命名空间的Egress Sidecar实现设计提案见 oseps/0001-fqdn-based-egress-control.md第 1 层 · DNS 代理软拦截Sidecar 启动 DNS 代理服务并拦截沙箱内所有 53 端口的 DNS 请求未授权的域名直接返回NXDOMAIN应用无需任何改造核心实现见 components/egress/pkg/dnsproxy/proxy.go。第 2 层 · nftables 过滤硬拦截在dnsnft模式下被允许的域名解析出的 IP 会自动加入内核级放行表带 TTL 动态更新即使有人绕过 DNS 直连 IP 也会被拦截。只有 Sidecar 持有CAP_NET_ADMIN权限你的应用容器始终无额外特权Docker 和 Kubernetes 上行为一致。⚠️ 注意仅开启dns模式时白名单是软限制可被直连 IP 绕过生产环境建议使用dnsnft模式获得真正隔离。若 Sidecar 无法安装强制重定向规则会直接退出fail-closed不会静默放行。三步开启 FQDN 白名单1️⃣ 声明网络策略使用 Python SDK 创建沙箱时传入network_policy参数接口定义见 specs/sandbox-lifecycle.ymlfrom opensandbox import Sandbox, NetworkPolicy, NetworkRule sandbox await Sandbox.create( imagepython:3.11, network_policyNetworkPolicy( default_actiondeny, # 默认拒绝所有出站流量 egress[ NetworkRule(actionallow, targetapi.github.com), NetworkRule(actionallow, target*.pypi.org), # 通配符 NetworkRule(actionallow, target10.96.0.0/12), # IP/CIDR ], ), )2️⃣ 选择执行模式在 Server 配置中设置 Egress 模式详见 server/configuration.md[egress] mode dnsnft # 推荐DNS 过滤 nftables 内核级强制3️⃣ 在沙箱内验证在沙箱里执行命令即可验证效果curl https://pypi.org/simple/ # ✅ 白名单内正常返回 curl https://baidu.com # ❌ DNS 解析 NXDOMAIN无法访问Kubernetes 集群上的部署演示可以参考下方示例策略随沙箱创建自动生效规则语法速查表 写法示例说明精确域名api.github.com只放行该 FQDN通配符*.pypi.org放行所有子域名单 IP10.0.0.5需dnsnft模式生效CIDR 段10.96.0.0/12如 K8s Service CIDR默认动作defaultAction: deny未命中任何规则时拒绝严格模式require_full_isolation: true网络层强制不可用时创建直接失败补充说明localhost、127.0.0.1及沙箱内部通信始终放行不影响本地服务调试 规则按顺序匹配支持运行时通过 Sidecar 的PATCH /policy接口增量追加规则默认端口18080 平台级强制规则可写入 Sidecar 镜像的/var/egress/rules/deny.always优先级高于用户策略且每分钟热加载适合在集群层面封禁 Pod/Service CIDR见 docs/architecture/network-isolation.md。避坑指南 ⚠️K8s 集群内访问 Service 需要双重放行defaultAction: deny下访问postgres.opensandbox.svc.cluster.local既要在 DNS 层放行该域名又要在网络层放行其 ClusterIP 所属 CIDR如10.96.0.0/12只放其一都会被拦截。Pool 沙箱不支持按请求下发策略池化沙箱在创建 Pod 时无法再注入 Egress Sidecar因此 API 会拒绝同时携带networkPolicy和poolRef的请求。需要出口控制的请写进 Pool 的 Pod 模板或使用非池化沙箱。不支持 hostNetworkK8s 中hostNetworktrue或 Docker--network host与 FQDN 白名单互斥创建请求会被直接拒绝避免策略误伤宿主机。与透明 Service Mesh 冲突Istio/Envoy 自动注入的 Pod 暂不支持 Egress Sidecar两者在同一网络命名空间改写流量会产生双重拦截问题建议将沙箱 Pod 排除出 Mesh 注入范围。总结OpenSandbox 的 FQDN 白名单让给 AI 沙箱开网从危险的裸奔变成一行声明式配置声明允许的域名其余默认拒绝DNS 层保证易用性nftables 层保证安全性权限隔离保证应用容器零特权提升。配合 Credential Vault 等能力你可以在安全边界内放心地把网络访问交给 AI Agent。延伸阅读设计提案oseps/0001-fqdn-based-egress-control.mdEgress 组件文档docs/components/egress.md网络隔离架构docs/architecture/network-isolation.mdEgress Sidecar 源码components/egress/Python SDKsdks/sandbox/python/【免费下载链接】OpenSandboxSecure, Fast, and Extensible Sandbox runtime for AI agents.项目地址: https://gitcode.com/GitHub_Trending/ope/OpenSandbox创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考