在 Debian 上调试 iptables 通常涉及查看规则、跟踪流量、日志、模块状态排查等步骤。下面按“从入门到排错”的顺序说明。
iptables -L -n -v
常用参数:
-L:列出规则-n:不做 DNS 解析(更快)-v:显示数据包/字节统计-t nat:查看 NAT 表-t mangle:查看 mangle 表示例:
iptables -t nat -L -n -v
iptables -S
查看当前所有规则(等效于 iptables-save)
在要调试的链中插入 LOG 规则:
iptables -I INPUT 1 -p tcp --dport 22 -j LOG --log-prefix "SSH-DEBUG: "
查看日志:
dmesg | grep SSH-DEBUG
# 或
journalctl -k | grep SSH-DEBUG
删除规则:
iptables -D INPUT -p tcp --dport 22 -j LOG --log-prefix "SSH-DEBUG: "
用于逐包跟踪经过哪些表和链。
iptables -t raw -A PREROUTING -p tcp --dport 80 -j TRACE
查看:
dmesg
# 或
journalctl -k
TRACE 会输出类似:
TRACE: raw:PREROUTING:rule:1
TRACE: filter:INPUT:rule:2
⚠️ 仅用于调试,用完务必删除:
iptables -t raw -F
检查顺序:
# 是否被 DROP
iptables -L INPUT -n -v
# 是否 NAT 问题
iptables -t nat -L -n -v
# 本机监听
ss -tulnp | grep 端口
iptables 自上而下匹配,例如:
iptables -A INPUT -j DROP
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
❌ 永远到不了 ACCEPT
✅ 正确:
iptables -I INPUT -p tcp --dport 22 -j ACCEPT
Debian 默认可能用 nftables:
iptables -V
若显示:
iptables v1.8.x (nf_tables)
说明是 iptables over nftables
查看真实规则:
nft list ruleset
直接敲命令即可
Debian 传统方式:
apt install iptables-persistent
netfilter-persistent save
✅ 先 -P ACCEPT 排除被锁
✅ 用 LOG / TRACE 看包走到哪
✅ 检查表顺序:raw → mangle → nat → filter
✅ 注意 Docker / nftables 干扰
如果你有具体现象(比如“SSH 连不上”“Docker 端口不通”“NAT 失败”),可以直接贴规则,我可以帮你逐条分析。