Skip to content

网络策略控制 源码级讲解

源码路径:CubeSandbox/examples/network-policy/

概述

网络策略是 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_accessnetwork 字段效果
完全断网False所有出站流量阻断
白名单Falseallow_out: [CIDRs]仅允许列表内 CIDR
黑名单Truedeny_out: [CIDRs]阻断列表内 CIDR,其余放行

CubeNet eBPF 实现原理

关键点:eBPF 程序运行在内核态,沙箱内的代码无法修改或绕过。

安全设计总结

设计点说明
内核态过滤eBPF 在 tap 层拦截,应用层无法绕过
创建时绑定策略在 Sandbox.create() 时确定,运行中不可变
CIDR 精度支持 IP + 子网掩码,精确到单个地址或子网

源码参考:network_allowlist.py | network_denylist.py | network_no_internet.py