Debian 上 iptables“失效”通常不是 iptables 本身坏了,而是底层规则管理或系统机制变化导致的。下面按最常见原因逐一说明,并给出排查/解决办法。
从 Debian 10(Buster) 开始,默认使用 nftables,而 iptables 命令很多时候是 iptables-nft(兼容层)。
iptables -L 看不到规则nft list ruleset 里却有规则iptables -V
如果显示:
iptables v1.8.x (nf_tables)
说明用的是 nft 后端
nft list ruleset
写 /etc/nftables.conf
update-alternatives --set iptables /usr/sbin/iptables-legacy
update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy
然后重启或重装规则
Docker 会直接操作 iptables,并且:
iptables -L DOCKER
--publish 127.0.0.1:80:80iptables: false(不推荐新手)filter 表,但流量在 natINPUT,但其实是转发流量iptables -A INPUT -p tcp --dport 80 -j DROP
只对 本机流量 有效
iptables -t nat -L -n -v
iptables -t filter -L -n -v
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
如果是做路由 / 网关:
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
iptables → IPv4
ip6tables → IPv6
iptables -V
nft list ruleset
iptables -L -n -v
systemctl status nftables
docker ps
如果你愿意,可以告诉我:
cat /etc/os-release)我可以直接帮你定位是哪一条原因。