Linux可通过network namespace、VRF、firewalld zone或nftables组合构建逻辑隔离的防火墙实例:network namespace提供最彻底隔离,每个租户独享网络栈与防火墙规则;VRF实现轻量级路由域分离;firewalld zone和nftables适用于接口/子网边界的策略级分组,配合ACL保障数据平面安全。

Linux 本身不提供“虚拟防火墙”这一独立产品,但可通过组合内核机制(如 network namespace、VRF、firewalld zone 或 nftables)构建逻辑上隔离的防火墙实例,实现多租户网络隔离。关键不是启用某个开关,而是按租户边界组织网络层、路由层与策略层,让每个租户拥有专属的流量控制上下文。
用 network namespace 搭建完全隔离的租户防火墙
network namespace 是最彻底的隔离方式——每个租户运行在独立网络栈中,自带独立的 iptables/nftables 规则、路由表、接口和防火墙状态。
- 创建租户命名空间:
ip netns add tenant-a、ip netns add tenant-b - 为每个 namespace 分配虚拟网卡(veth pair),一端置于 namespace 内,另一端桥接到宿主机或物理网络
- 在 namespace 内配置 IP、路由,并单独加载防火墙规则:
ip netns exec tenant-a nft -f /etc/nft/tenant-a.nft - 所有通信必须经过 namespace 边界(即 veth 对),天然阻断跨租户直连;即使两个 namespace 绑定同一物理口,也不会自动互通
用 VRF 实现轻量级路由级隔离
VRF 不复制整个协议栈,而是在主 kernel 中划分独立路由域,适合需要共享部分服务(如 DNS、NTP)但路由路径严格分离的场景。
- 创建 VRF 设备并绑定路由表:
ip link add vrf-tenant-a type vrf table 100 - 启用并绑定接口:
ip link set dev eth0.10 master vrf-tenant-a,再ip link set dev vrf-tenant-a up - 手动注入路由:
ip route add default via 192.168.10.1 dev eth0.10 table 100 - 所有进出该 VRF 的流量强制查对应路由表;跨 VRF 通信必须显式配置策略路由+转发规则,且默认不通
用 firewalld zone 或 nftables 实现策略级租户分组
适用于租户数量不多、拓扑稳定、以接口或子网为边界的场景,运维成本低,无需额外命名空间开销。
- 为每个租户分配独立 zone(如
tenant-a),并将对应 VLAN 子接口加入:firewall-cmd --permanent --zone=tenant-a --change-interface=eth0.10 - 清空默认服务,只开放必需端口:
firewall-cmd --permanent --zone=tenant-a --remove-service=ssh,再--add-port=8080/tcp - 最关键:禁止跨 zone 转发:
firewall-cmd --permanent --direct --add-rule ipv4 filter FORWARD 0 -i eth0.10 -o eth0.20 -j DROP - nftables 更灵活:可用 meta mark 标记租户流量,再统一匹配丢弃或转发,适合动态策略扩展
配合 ACL 做好租户数据平面隔离
防火墙管网络层,ACL 管文件系统层——两者结合才能覆盖完整租户边界。
- 对共享存储目录(如
/srv/tenants)启用默认 ACL:setfacl -d -m u:tenant-a:rwx /srv/tenants/tenant-a - 显式拒绝反向访问:
setfacl -m u:tenant-b:--- /srv/tenants/tenant-a - 确保新创建的文件/子目录自动继承租户权限,避免手动 chmod 引入误配
- 管理员账户仍可通过 root 或专用 admin 组保留全量访问权,不影响审计与运维


















