在 Ubuntu 上调试 iptables 通常包含 查看规则、跟踪报文、日志、定位顺序问题、常见工具 等几类方法。下面按实战方式说明。
sudo iptables -L -n -v
-n:不解析域名(更快)-v:显示数据包/字节统计(很有用)sudo iptables -t nat -L -n -v
sudo iptables -t filter -L -n -v
sudo iptables -L -n -v --line-numbers
调试必备,方便删除/插入规则。
sudo iptables -L -n -v
pkts / bytes 在增长 → 规则命中在怀疑位置前后插入:
sudo iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT
再观察统计变化。
sudo iptables -I INPUT 1 -p tcp --dport 22 -j LOG --log-prefix "IPTABLES-SSH: "
Ubuntu(非容器)一般:
sudo dmesg | grep IPTABLES
# 或
sudo tail -f /var/log/syslog
⚠️ 注意:
适合“包到底去了哪里”。
sudo modprobe ipt_LOG
sudo iptables -t raw -A PREROUTING -p tcp --dport 80 -j TRACE
sudo dmesg -T | grep TRACE
会显示:
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 -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
检查:
cat /proc/sys/net/ipv4/ip_forward
若为 0:
sudo sysctl -w net.ipv4.ip_forward=1
sudo iptables -F
sudo iptables -X
sudo iptables -P INPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -P OUTPUT ACCEPT
⚠️ 会断 SSH,仅本地或测试环境使用。
sudo iptables-save > rules.txt
sudo iptables-restore < rules.txt
sudo nft list ruleset
iptables -L -n -v --line-numbers如果你愿意,可以贴出:
iptables -L -n -v我可以直接帮你分析规则哪里有问题。