温馨提示×

为何debian iptables失效

小樊
91
2026-09-01 18:21:00
栏目: 智能运维

Debian 上 iptables“失效”通常不是 iptables 本身坏了,而是底层规则管理或系统机制变化导致的。下面按最常见原因逐一说明,并给出排查/解决办法。


一、最常见原因:nftables 接管了 netfilter(Debian 10+)

从 Debian 10(Buster) 开始,默认使用 nftables,而 iptables 命令很多时候是 iptables-nft(兼容层)。

表现

  • iptables -L 看不到规则
  • 你加了规则但“没生效”
  • nft list ruleset 里却有规则

检查

iptables -V

如果显示:

iptables v1.8.x (nf_tables)

说明用的是 nft 后端

解决方式(任选其一)

方案 1:直接用 nftables(推荐)

nft list ruleset

写 /etc/nftables.conf

方案 2:切回传统 iptables

update-alternatives --set iptables /usr/sbin/iptables-legacy
update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy

然后重启或重装规则


二、Docker 导致 iptables 被“覆盖”

Docker 会直接操作 iptables,并且:

  • 重启 Docker 会重写规则
  • 你手动加的规则可能被覆盖

典型现象

  • 端口好像被 Docker 控制了
  • 防火墙规则“自动消失”

检查

iptables -L DOCKER

解决

  • 不要用 iptables 直接挡 Docker 端口
  • 用:
    • --publish 127.0.0.1:80:80
    • 或 Docker 的 iptables: false(不推荐新手)

三、规则加错表 / 链

常见错误

  • 加在 filter 表,但流量在 nat
  • 加在 INPUT,但其实是转发流量

示例

iptables -A INPUT -p tcp --dport 80 -j DROP

只对 本机流量 有效

排查

iptables -t nat -L -n -v
iptables -t filter -L -n -v

四、规则顺序问题(被前面的 ACCEPT 拦截)

iptables 顺序匹配,命中即停

错误示例

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

→ 根本不会执行 DROP

正确方式

iptables -I INPUT 1 -p tcp --dport 22 -j DROP

五、系统未开启 IP 转发(仅影响 NAT / 转发)

如果是做路由 / 网关:

cat /proc/sys/net/ipv4/ip_forward

如果是 0:

sysctl -w net.ipv4.ip_forward=1

六、规则没保存(重启后消失)

Debian 默认 不会自动保存 iptables

保存

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

恢复(开机)

iptables-restore < /etc/iptables/rules.v4

或用:

apt install iptables-persistent

七、你改的是 IPv6,但流量是 IPv4(或相反)

iptables  → IPv4
ip6tables → IPv6

快速自检清单 ✅

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

如果你愿意,可以告诉我:

  • Debian 版本(cat /etc/os-release)
  • 你执行的 iptables 命令
  • “失效”的具体表现(端口仍通?规则看不到?重启消失?)

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

0 踩