iptables实现多网卡流量隔离的核心是利用-i和-o匹配条件,结合input/forward/output链与drop/accept/reject动作,按接口精准控制入向、转发及出向流量,并需同步配置ip转发、反向路径校验关闭及静态路由以确保策略生效。

通过 iptables 实现多网卡环境下的流量隔离,核心是利用 -i(入接口) 和 -o(出接口) 匹配条件,结合链(INPUT/FORWARD/OUTPUT)与动作(DROP/ACCEPT/REJECT),对不同网卡进出的流量实施差异化控制。关键不在“加规则”,而在“精准匹配路径+明确拒绝默认”。
按网卡接口区分入向流量
针对从某块网卡进来的请求,直接在 INPUT 链中限制来源或服务范围。例如:只允许管理网卡(ens33)接收 SSH,禁止业务网卡(enp0s8)响应任何外部连接:
- iptables -I INPUT -i ens33 -p tcp --dport 22 -j ACCEPT
- iptables -I INPUT -i enp0s8 -j DROP
- iptables -I INPUT -i lo -j ACCEPT(保留本地回环)
注意:这类规则必须放在默认 ACCEPT 规则之前,否则会被跳过;建议用 -I 插入开头,并配合 -L --line-numbers 查看顺序。
用 FORWARD 链控制跨网卡转发
若该主机承担路由或网关角色,需严格控制网卡间的数据转发。例如:禁止业务网段(10.0.20.0/24)访问管理网段(192.168.100.0/24):
- iptables -I FORWARD -i enp0s8 -o ens33 -s 10.0.20.0/24 -d 192.168.100.0/24 -j DROP
- iptables -I FORWARD -i ens33 -o enp0s8 -s 192.168.100.0/24 -d 10.0.20.0/24 -j ACCEPT(反向可选放行)
- echo 1 > /proc/sys/net/ipv4/ip_forward(确保内核已开启转发)
基于出接口约束响应行为
避免“请求从 A 网卡来、响应却从 B 网卡走”的不对称路径问题。可在 OUTPUT 链中强制绑定源地址:
- iptables -t nat -A POSTROUTING -s 192.168.100.10 -o ens33 -j SNAT --to-source 192.168.100.10
- iptables -t nat -A POSTROUTING -s 10.0.20.10 -o enp0s8 -j SNAT --to-source 10.0.20.10
- 再配合策略路由(ip rule + ip route),确保 reply 包也走对应出口
配套必须做的基础配置
iptables 规则本身不解决底层路由冲突,需同步完成以下动作:
- 确认每块网卡使用静态 IP,避免 DHCP 导致地址漂移使规则失效
- 检查 /etc/sysctl.conf 中 net.ipv4.conf.all.rp_filter = 0(关闭反向路径校验,防止跨网卡响应被丢弃)
- 禁用 NetworkManager 的自动路由管理,改用 /etc/sysconfig/network-scripts/ifcfg-* 手动定义网关和路由
- 规则持久化:CentOS 7 使用 service iptables save 或写入 /etc/sysconfig/iptables









