ufw不原生支持按网卡接口设策略,但可通过绑定规则到网卡ip实现等效控制;也可通过修改before.rules插入iptables -i接口匹配规则,或禁用特定接口的ufw处理。

UFW(Uncomplicated Firewall)本身不直接支持“按网卡接口设置不同策略”的原生语法,但可以通过结合 绑定规则到特定 IP 地址(即该网卡配置的 IP)来实现等效效果。关键在于:UFW 规则底层仍基于 iptables,而 iptables 支持 -i(入站接口)和 -o(出站接口)匹配,UFW 通过 ufw allow from ... to any port ... 等语法间接控制流量方向,但需借助地址绑定或自定义规则补足接口粒度。
用 IP 地址绑定模拟网卡策略
每块网卡通常有独立 IP(如 eth0: 192.168.1.10,ens33: 10.0.2.15),UFW 允许你为不同目标 IP 设置不同规则:
- 允许外部访问 Web 服务仅限内网网卡:
sudo ufw allow proto tcp from any to 192.168.1.10 port 80 - 禁止 SSH 从公网网卡接入(假设公网 IP 是 203.0.113.5):
sudo ufw deny proto tcp from any to 203.0.113.5 port 22 - 同时允许 SSH 仅从管理网段经内网卡登录:
sudo ufw allow proto tcp from 192.168.100.0/24 to 192.168.100.10 port 22
对特定接口启用/禁用 UFW(粗粒度隔离)
UFW 默认作用于所有接口。若需完全关闭某网卡的防护(如信任的内网桥接口),可临时绕过 UFW,但更推荐的做法是:在系统级禁用该接口的 UFW 处理:
- 编辑
/etc/default/ufw,确认DEFAULT_FORWARD_POLICY="DROP",避免转发流量绕过规则 - 使用
ufw route管理转发规则(适用于启用了 IP 转发的网关场景) - 真正隔离接口行为,需配合
iptables -A INPUT -i virbr0 -j ACCEPT等手动规则,并设ufw disable后接管,但会失去 UFW 管理便利性
补充自定义 iptables 规则实现接口精准控制
当必须依赖 -i eth0 这类匹配时,UFW 提供 /etc/ufw/before.rules 和 /etc/ufw/after.rules 插入原始 iptables 指令:
- 编辑
/etc/ufw/before.rules,在*filter段中添加(示例:拒绝所有进 eth1 的 HTTP 流量):
-A ufw-before-input -i eth1 -p tcp --dport 80 -j DROP - 保存后运行
sudo ufw reload生效(注意:此操作绕过 UFW 日志和状态跟踪) - 建议仅用于 UFW 无法覆盖的特殊需求,日常策略优先用 IP 绑定方式维护可读性
验证与调试接口相关规则是否生效
规则不是写完就自动匹配,务必检查实际生效路径:
- 查看 UFW 解析后的 iptables 链:
sudo ufw status verbose(显示规则对应的目标 IP 和端口) - 检查底层 iptables 是否含接口匹配:
sudo iptables -L ufw-user-input -v -n(观察 in、out 列及 pkts 计数) - 从不同网络发起测试连接(如手机热点、内网 PC、云服务器),比对响应差异,确认策略按预期分发










