linux网络命名空间构建安全沙箱的核心是实现“看不见、连不上、改不了”外部网络:每个命名空间拥有独立网络设备、ip、路由表、iptables规则和套接字;默认仅含未启用的lo,不配置veth则完全断网;需配合pid、mount、user命名空间及cgroups才能达成完整隔离。

用 Linux 网络命名空间构建安全沙箱,核心是让待运行的程序“看不见、连不上、改不了”外部网络。它不依赖 Docker 或虚拟机,而是直接调用内核能力,轻量且可控。
网络命名空间:给进程配个独立网络世界
每个网络命名空间拥有自己的网络设备、IP 地址、路由表、iptables 规则和套接字。沙箱里的进程启动后,只能看到自己命名空间内的网络资源,宿主机和其他沙箱的网络完全不可见。
- 默认情况下,新命名空间只有回环接口(lo),且处于关闭状态;需显式启用才能通信
- 不配置额外网络设备时,进程无法访问任何外部 IP,也无法被外部连接
- 通过
CLONE_NEWNET标志创建命名空间,常见于clone()或unshare系统调用
隔离网络的典型操作步骤
手动或脚本化搭建时,关键动作集中在创建、配置和切换三步:
在无 root/sudo 权限的环境(云容器、VPS、隔离主机)中安装并配置 OpenClaw 浏览器工具的 headless Chrome。适用场景:...
- 用
ip netns add sandbox-net创建命名空间 - 用
ip netns exec sandbox-net ip link set lo up启用本地回环 - 如需联网,可添加 veth 虚拟网卡并桥接到宿主机,但生产环境建议禁用
- 运行命令时,用
ip netns exec sandbox-net your-command将其绑定到该命名空间
配合其他命名空间增强整体隔离性
单靠网络命名空间还不够——恶意程序仍可能通过文件系统读取敏感信息,或用 PID 枚举发现宿主机结构。必须组合使用:
- PID 命名空间:使沙箱内进程 PID 从 1 开始,看不到宿主机进程树
- 挂载命名空间 + chroot/tmpfs:限制文件系统视图,只暴露必要路径
- User 命名空间:映射非特权 UID,避免容器内 root 等同宿主机 root
- 搭配 cgroups 限制 CPU、内存、进程数,防资源耗尽攻击
实际工具中的默认行为参考
像 sandboxed.sh、isolate 或 bubblewrap 这类轻量沙箱工具,默认都启用 --private-network 或等效机制:
- 不加额外参数时,自动创建独立网络命名空间,仅保留可用的
lo - 如需共享宿主机网络(例如调试 HTTP 请求),才显式传入
--share-net或--network=host - 误用
--network=host会导致沙箱能枚举宿主机所有监听端口和服务,大幅增加攻击面










