温馨提示×

为什么debian iptables失效

小樊
55
2026-09-25 22:54:07
栏目: 智能运维

在 Debian 上遇到 iptables 规则“失效”,通常不是 iptables 本身坏了,而是系统机制或配置方式发生了变化。下面按最常见原因逐一说明,并给出解决办法。


一、Debian 默认使用 nftables(最常见原因)

从 Debian 10(Buster)开始:

  • 系统默认启用 nftables
  • iptables 实际是 iptables-nft(指向 nftables 的兼容层)

表现

  • 你执行了 iptables -A ...
  • 用 iptables -L 看得到规则
  • 但流量不受影响

原因

  • nftables 规则表优先级更高
  • 或你加的规则在错误的链 / 表中
  • 或 nftables 服务在管理防火墙

检查方式

iptables -V

如果看到:

iptables v1.x (nf_tables)

说明你在用 nftables 后端。

解决方案

✅ 方案 1:统一用 nftables(推荐)

nft list ruleset

直接写 nftables 规则。

✅ 方案 2:强制使用 legacy iptables

update-alternatives --config iptables

选择:

iptables-legacy

然后:

systemctl disable nftables
systemctl stop nftables

二、规则加错表 / 链

常见错误

  • 在 filter 表加了 NAT 规则
  • 在 INPUT 链期望影响转发流量
  • 忘记 -j ACCEPT / DROP

正确示例

# 允许 SSH
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# 做 NAT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

三、规则未保存(重启失效)

Debian 不会自动保存 iptables 规则。

现象

  • 重启后规则全没了

解决

apt install iptables-persistent
netfilter-persistent save

或:

iptables-save > /etc/iptables/rules.v4

四、Docker 干扰 iptables

如果你装了 Docker:

  • Docker 会自动修改 iptables
  • 你手动加的规则可能被覆盖

检查

iptables -L DOCKER

解决

  • 在 Docker 之前插入规则
  • 或用 --iptables=false(不推荐)

五、系统启用了 firewalld / ufw

检查

systemctl status ufw
systemctl status firewalld

解决

systemctl stop ufw
systemctl disable ufw

六、内核未开启相关模块

极少见,但可能:

lsmod | grep iptable

缺失可加载:

modprobe iptable_filter

七、规则顺序问题(被前面规则拦截)

iptables 自上而下匹配,命中即停止

❌ 错误示例:

iptables -A INPUT -j DROP
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

✅ 正确:

iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -j DROP

快速自查清单 ✅

iptables -V
nft list ruleset
iptables -L -n -v
systemctl status nftables ufw

如果你愿意,可以把:

  • Debian 版本
  • iptables -L -n -v
  • 你加的规则

发出来,我可以直接帮你定位是哪一条原因。

0 踩