Linux多租户网络隔离核心是Network Namespace配合namespace-aware防火墙工具,每个租户拥有独立网络栈与防火墙策略空间,需禁用共享网络模式、创建专属bridge、显式进入netns配置规则,并禁用宿主机IP转发以阻断跨租户路由。

Linux 为多租户云计算平台隔离基础网络防火墙,核心不是“统一配一套 iptables 规则”,而是让每个租户拥有独立的网络栈 + 独立的防火墙策略空间——即 Network Namespace 配合 namespace-aware 的防火墙工具(如 nftables 或 iptables -t nat/mangle/filter 在对应 netns 中操作)。
每个租户绑定独立 Network Namespace
这是隔离的前提。Docker 默认启用 netns,但需确认不被绕过:
- 启动容器时禁用 --network=host 和 --network=container:,否则共享宿主机或他人网络栈
- 避免使用默认 docker0 bridge;为每个租户创建专属自定义 bridge:
docker network create --subnet=10.20.1.0/24 tenant-1-net - 验证 netns 隔离:查容器 PID → ls -l /proc/
/ns/net → 对比不同租户的 net:[数字] 是否不同
在各自 netns 内独立配置防火墙规则
iptables/nftables 默认作用于 host netns,必须显式进入租户 netns 才能生效:
- 对 Docker 容器:先获取容器 netns 路径(如 /proc/
/ns/net ),再用 nsenter -t-n iptables -L 查看或配置 - 对手动创建的 netns(如 ip netns add tenant-a):直接运行 ip netns exec tenant-a iptables -A INPUT -j DROP
- 每套规则只影响该 netns 内的流量:INPUT/FORWARD/OUTPUT 表互不干扰,ARP、ICMP、端口监听全部隔离
阻断跨租户路由与转发路径
即使防火墙规则独立,若底层路由打通,仍可能绕过规则:
- 禁用宿主机的 IP 转发:sysctl -w net.ipv4.ip_forward=0(除非明确需要 NAT 出向)
- 不将多个租户 bridge 桥接到同一物理网卡或 Linux bridge;每个 tenant-*net 应单独桥接或直连 veth 对
- 检查并清空宿主机上可能存在的跨网段静态路由或 policy routing 规则,防止意外中转
补充最小权限与审计机制
防火墙隔离不是一劳永逸,还需约束行为边界:
- 租户容器内禁止挂载 /proc/sys/net 或 /etc/iptables,防止篡改自身 netns 规则
- 限制容器能力集,移除 NET_ADMIN、NET_RAW 等可操作网络栈的 cap(除非业务强依赖)
- 定期导出各租户 netns 的 iptables 规则快照,用于基线比对和异常检测


















