在 Debian 上调试 iptables 错误,通常要从命令本身、规则逻辑、内核模块、系统环境几个层面入手。下面给你一套比较实用的排查思路和常用命令。
which iptables
iptables --version
iptables -L -n -v
iptables -t nat -L -n -v
Debian 10+ 默认用 nftables,iptables 可能是兼容层:
ls -l /usr/sbin/iptables
update-alternatives --list iptables
如果你看到 iptables-nft,说明是 nft 后端。
iptables: No chain/target/match by that name通常原因:
解决:
lsmod | grep ip_tables
modprobe ip_tables
modprobe iptable_filter
modprobe iptable_nat
Permission denied (you must be root)sudo -i
# 或
sudo iptables ...
can't initialize iptables table可能是:
检查:
uname -a
cat /proc/sys/kernel/modules_disabled
容器环境:
cat /proc/1/cgroup
排查顺序:
iptables -L -n -v --line-numbers
重点看:
可用 LOG 调试:
iptables -A INPUT -p tcp --dport 22 -j LOG --log-prefix "SSH-DEBUG: "
dmesg | tail
确认:
cat /proc/sys/net/ipv4/ip_forward
若为 0:
sysctl -w net.ipv4.ip_forward=1
如果是 nft 后端:
nft list ruleset
查看错误:
journalctl -k | grep nft
✅ 用 -v 看详细信息
✅ 用 --line-numbers 定位规则
✅ 用 LOG target 打日志
✅ 用 dmesg / journalctl 看内核报错
✅ 注意 nftables 与 iptables 混用问题
你可以把完整报错信息 + 你执行的命令 + Debian 版本贴出来,我可以帮你精确定位。