实现物理与虚拟网卡流量隔离的关键是按接口名(如ens33、virbr0)和流量路径(input/forward/output链),通过-i/-o匹配精准控制,结合drop/accept动作实施隔离,并须同步关闭rp_filter、禁用networkmanager干扰及持久化规则。

明确接口角色并命名规范
先用 ip link show 或 ifconfig 确认所有接口及其用途:
-
物理网卡:如
ens33、enp0s8、eth0—— 接外网、管理网或业务网 -
虚拟网卡:如
virbr0(libvirt 默认桥)、docker0(Docker 默认桥)、veth*(容器/VM 的配对端)、br-*(自定义网桥)
避免使用模糊名称(如 br0),建议在创建时统一命名并注释用途,例如:br-mgmt(管理桥)、br-virt(虚拟机桥)。
INPUT 链:阻止虚拟网段访问宿主机服务
默认情况下,虚拟网卡上的设备(如 KVM 虚拟机、Docker 容器)可能尝试连接宿主机监听的服务(SSH、HTTP、数据库等)。若不加限制,存在越权风险。
- 禁止所有来自
virbr0的入向连接(除明确放行端口外):iptables -I INPUT -i virbr0 -j DROP - 但允许特定服务,如仅开放虚拟机访问宿主机的 32000 端口:
iptables -I INPUT -i virbr0 -p tcp --dport 32000 -j ACCEPT - 保留本地回环和物理网卡管理访问:
iptables -I INPUT -i lo -j ACCEPTiptables -I INPUT -i ens33 -p tcp --dport 22 -j ACCEPT
注意:规则顺序很重要,-I 插入开头,确保 DROP 在 ACCEPT 之前生效;可用 iptables -L INPUT --line-numbers 核查。
FORWARD 链:控制跨网卡转发行为
当宿主机启用 IP 转发(net.ipv4.ip_forward=1)时,FORWARD 链才生效。这是隔离的核心场景——比如防止虚拟机访问物理网络中的敏感子网。
- 禁止虚拟网桥
virbr0访问局域网192.168.2.0/24:iptables -A FORWARD -i virbr0 -o ens33 -d 192.168.2.0/24 -j DROP - 允许虚拟机访问互联网(经 NAT 出口):
iptables -A FORWARD -i virbr0 -o ens33 -j ACCEPT - 必须搭配连接状态模块,保障响应包通行:
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
若未启用转发,这条链不触发;务必确认 sysctl net.ipv4.ip_forward 返回 1,否则规则无效。
OUTPUT 和 NAT 链:约束响应路径与地址转换
避免“请求从虚拟网卡来、响应却从物理网卡源地址发出”的不对称问题,尤其影响 TCP 连接建立或某些协议(如 SIP、FTP)。
- 强制虚拟网段出向流量使用对应网桥 IP 做 SNAT:
iptables -t nat -A POSTROUTING -s 192.168.122.0/24 -o ens33 -j SNAT --to-source 192.168.2.209 - 若使用 MASQUERADE(动态出口 IP),更推荐:
iptables -t nat -A POSTROUTING -s 192.168.122.0/24 -o ens33 -j MASQUERADE - 禁止宿主机主动从虚拟网卡向外发起连接(如防止误用
docker0拨号):iptables -A OUTPUT -o docker0 -j DROP
同时需配合策略路由(ip rule + ip route)确保 reply 包返回原路径,否则反向路径校验(rp_filter)可能丢包。
配套基础加固不可省略
仅靠 iptables 规则无法闭环,以下配置缺一不可:
- 关闭反向路径校验:
echo 2 > /proc/sys/net/ipv4/conf/all/rp_filter(宽松模式,兼容多出口) - 为每个接口单独设 rp_filter:
echo 2 > /proc/sys/net/ipv4/conf/virbr0/rp_filter - 禁用 NetworkManager 对桥接接口的干扰,改用静态配置(
/etc/sysconfig/network-scripts/ifcfg-virbr0) - 持久化规则:CentOS/RHEL 用
iptables-save > /etc/sysconfig/iptables;Ubuntu/Debian 推荐iptables-persistent
不复杂但容易忽略











