在 CentOS 上调试 iptables,一般可以从规则查看、日志、计数、抓包、模块加载几个层面入手。下面按实战流程给你总结一套常用方法(CentOS 6/7 通用,CentOS 8 以后默认是 nftables,但 iptables 仍可兼容使用)。
iptables -L -n -v
iptables -t nat -L -n -v
iptables -t mangle -L -n -v
-n:不解析域名-v:显示包/字节计数(非常重要,用于调试)iptables -L -n --line-numbers
方便删除/插入规则。
systemctl status iptables # CentOS 7
service iptables status # CentOS 6
iptables -L -n -v
看 pkts / bytes 是否增长:
iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT
然后看计数是否增加。
iptables -I INPUT 1 -p tcp --dport 22 -j LOG --log-prefix "IPTABLES-DROP: "
tail -f /var/log/messages
# 或
journalctl -f
日志示例:
IPTABLES-DROP: IN=eth0 OUT= MAC=... SRC=1.2.3.4 DST=5.6.7.8 ...
⚠️ 注意:
iptables -A INPUT -p tcp --dport 9999 -j REJECT
iptables -I INPUT 1 -j ACCEPT
确认是否是 iptables 导致的问题。
tcpdump -i eth0 port 80
iptables 自上而下匹配,第一条匹配即生效。
filter:默认表(INPUT/OUTPUT/FORWARD)nat:端口映射、SNAT/DNATmangle:修改包属性systemctl stop firewalld
systemctl disable firewalld
service iptables save
# 或
iptables-save > /etc/sysconfig/iptables
iptables -I INPUT 1 -p tcp --dport 22 -j LOG --log-prefix "SSH-DEBUG: "
iptables -I INPUT 2 -p tcp --dport 22 -j ACCEPT
tail -f /var/log/messages
iptables -C:检查规则是否存在conntrack -L:查看连接跟踪nft list ruleset:CentOS 8+ 底层如果你愿意,可以告诉我:
我可以直接帮你定位。