在受限开发沙箱中,必须通过“删路由 + 拦流量 + 锁出口”三重动作主动切断通路:先清空主路由表并仅保留必需本地路由,再用iptables在veth接口上拦截生产网段流量,最后强制snat与策略路由绑定专用源ip,辅以禁用rpf、限制netlink和/proc/net只读,实现强隔离。

在受限开发沙箱中,不能靠“加路由”来防渗透,而要靠“删路由 + 拦流量 + 锁出口”三重动作主动切断通路。核心逻辑是:让测试沙箱根本不知道生产网段怎么走,即使应用尝试发包,也因无路由、被拦截、源地址无效而彻底失败。
删除默认路由与跨环境静态路由
沙箱启动后第一件事就是清理路由表,防止隐式连通:
- 执行
ip route flush table main清空主路由表,再仅添加必需的本地子网路由(如10.200.1.0/24 dev veth-app0) - 明确删除所有指向生产CIDR的路由,例如:
ip route del 10.1.0.0/20 via 10.200.1.1(哪怕它不存在也要确认) - 禁用路由自动学习:设置
sysctl -w net.ipv4.conf.all.accept_redirects=0和net.ipv4.conf.all.send_redirects=0,防止被恶意网关注入路由
在沙箱出口接口上阻断目标网段流量
即使路由被误加,iptables也要在veth宿主机侧接口做兜底拦截:
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
- 对沙箱出口网卡(如
veth-app0)的入向流量,直接丢弃发往生产网段的包:iptables -I INPUT -i veth-app0 -d 10.1.0.0/20 -j DROP - 对出向流量,限制仅允许访问白名单端口和IP:
iptables -A OUTPUT -o veth-app0 -d 10.1.0.0/20 -j REJECT --reject-with icmp-host-prohibited - 配合ipset实现动态管控:创建
ipset create prod-block hash:net,加入10.1.0.0/20,再用-m set --match-set prod-block dst匹配拦截
强制源地址与策略路由绑定出口路径
避免沙箱进程绕过veth、直连宿主机网络栈发起连接:
- 为沙箱分配专用源IP(如
10.200.1.100),并在POSTROUTING链强制SNAT:iptables -t nat -A POSTROUTING -s 10.200.1.0/24 ! -d 10.200.1.0/24 -j SNAT --to-source 10.200.1.100 - 建立独立路由表(如table 200),只包含沙箱内网路由和默认NAT出口:
ip route add default via 10.200.1.1 dev veth-app0 table 200 - 绑定源IP到该表:
ip rule add from 10.200.1.100 table 200,确保所有从该IP发出的包都走沙箱路径
关闭反向路径校验并隔离netlink通信
堵住内核级绕过通道,防止沙箱通过netlink或路由伪指令探测生产环境:
- 禁用RPF检查:
sysctl -w net.ipv4.conf.veth-app0.rp_filter=0(避免因响应包路径不一致被丢弃,但需配合策略路由保证路径一致) - 拦截netlink探测:
iptables -t filter -A OUTPUT -p netlink --nlmsg-type 17 -m owner --uid-owner 1001 -j ACCEPT; iptables -t filter -A OUTPUT -p netlink -j DROP,只允许沙箱进程发起有限netlink通信 - 挂载
/proc/net为只读,或启用hidepid=2,防止沙箱进程读取宿主机路由缓存或连接状态










