在 Debian 上调试 iptables 问题,通常可以按下面这套思路和系统方法来做。
which iptables
iptables --version
Debian 10+ 默认可能使用 nftables,但 iptables 通常是兼容层:
ls -l /usr/sbin/iptables
# 可能指向 iptables-nft
iptables -L -n -v
iptables -t nat -L -n -v
iptables -t mangle -L -n -v
重点看:
pkts)是否增长DROP / REJECTiptables -A INPUT -p tcp --dport 80 -j LOG --log-prefix "IPT_TEST: "
然后看日志:
dmesg | grep IPT_TEST
# 或
journalctl -k | grep IPT_TEST
如果 没有日志,说明:
iptables 自上而下匹配,第一条命中即生效
示例错误:
iptables -A INPUT -j DROP
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
✅ 正确:
iptables -I INPUT 1 -p tcp --dport 22 -j ACCEPT
iptables -t raw -A PREROUTING -p tcp --dport 80 -j TRACE
查看:
dmesg -w
你会看到包经过的:
调试完记得删除:
iptables -t raw -D PREROUTING -p tcp --dport 80 -j TRACE
iptables -L | grep policy
如果是:
Chain INPUT (policy DROP)
但没写 ACCEPT,就会全丢。
sysctl net.ipv4.ip_forward
# 应为 1
临时:
sysctl -w net.ipv4.ip_forward=1
永久:
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
systemctl status nftables
如果启用:
nft list ruleset
建议:
切换回 iptables-legacy:
update-alternatives --config iptables
iptables-save > /etc/iptables/rules.v4
apt install iptables-persistent
如果你愿意,可以贴出:
iptables -L -n -v我可以帮你逐条分析规则。