网络策略控制 源码级讲解
概述
网络策略是 CubeSandbox 安全模型的核心能力之一。它在 Cubelet tap 网络层 实施,数据包在离开 VM 之前就被过滤,沙箱内部代码无法绕过。
三种策略模式
源码解析:三种模式
模式 1 — network_no_internet.py(完全断网)
python
with Sandbox.create(
template=template_id,
allow_internet_access=False, # 关键参数
) as sandbox:
result = sandbox.commands.run("curl --max-time 3 https://example.com")
# 超时或被阻断内部数据流:
模式 2 — network_allowlist.py(白名单)
python
with Sandbox.create(
template=template_id,
allow_internet_access=False,
network={
"allow_out": ["10.0.0.53/32", "10.0.1.0/24"],
},
) as sandbox:
# 10.0.0.53 可达(内部 DNS)
# 8.8.8.8 被阻断内部数据流:
模式 3 — network_denylist.py(黑名单)
python
with Sandbox.create(
template=template_id,
allow_internet_access=True,
network={
"deny_out": ["169.254.0.0/16", "10.0.0.0/8"],
},
) as sandbox:
# example.com 可达(公网)
# 169.254.169.254 被阻断(云厂商 metadata)三种模式对比
| 模式 | allow_internet_access | network 字段 | 效果 |
|---|---|---|---|
| 完全断网 | False | 无 | 所有出站流量阻断 |
| 白名单 | False | allow_out: [CIDRs] | 仅允许列表内 CIDR |
| 黑名单 | True | deny_out: [CIDRs] | 阻断列表内 CIDR,其余放行 |
CubeNet eBPF 实现原理
关键点:eBPF 程序运行在内核态,沙箱内的代码无法修改或绕过。
安全设计总结
| 设计点 | 说明 |
|---|---|
| 内核态过滤 | eBPF 在 tap 层拦截,应用层无法绕过 |
| 创建时绑定 | 策略在 Sandbox.create() 时确定,运行中不可变 |
| CIDR 精度 | 支持 IP + 子网掩码,精确到单个地址或子网 |
源码参考:network_allowlist.py | network_denylist.py | network_no_internet.py