在 CentOS 上排查 iptables 问题,一般可以按下面几个层次来做:状态确认 → 规则查看 → 连接/丢包分析 → 日志 → 常见坑。
systemctl status iptables
或(老版本):
service iptables status
如果使用的是 CentOS 7+,默认可能是 firewalld:
systemctl status firewalld
⚠️ firewalld 和 iptables 同时存在时,容易冲突
iptables -L -n -v
参数说明:
-L:列出规则-n:不做 DNS 解析(更快)-v:显示命中计数(非常重要)iptables -t nat -L -n -v
iptables -L -n --line-numbers
重点看:
DROPREJECTpolicy DROP示例:
Chain INPUT (policy DROP)
如果 policy 是 DROP,而没放行对应端口,就会连不上。
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
ss -lntup
# 或
netstat -lntup
确认服务是否在监听正确 IP/端口。
telnet ip port
# 或
nc -vz ip port
iptables -L INPUT -n -v
看对应规则的 pkts / bytes 是否在增长。
iptables -A INPUT -j LOG --log-prefix "IPTABLES-DROP: "
dmesg | grep IPTABLES
# 或
journalctl -k | grep IPTABLES
systemctl stop firewalld
systemctl disable firewalld
然后:
systemctl restart iptables
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
⚠️ 生产环境不要长期 ACCEPT,仅用于排查
iptables -I INPUT -i lo -j ACCEPT
dmesg | grep conntrack
清理:
sysctl -w net.netfilter.nf_conntrack_max=655360
service iptables save
iptables-save > /etc/sysconfig/iptables
如果你愿意,可以把 具体现象(连不上 / 丢包 / 端口不通) 或 iptables -L -n -v 输出 发出来,我可以帮你精确分析。