温馨提示×

centos iptables怎样排查

小樊
51
2026-09-08 17:12:43
栏目: 智能运维

在 CentOS 上排查 iptables 问题,一般可以按下面几个层次来做:状态确认 → 规则查看 → 连接/丢包分析 → 日志 → 常见坑


一、确认 iptables 是否启用

1. 查看 iptables 服务状态

systemctl status iptables

或(老版本):

service iptables status

如果使用的是 CentOS 7+,默认可能是 firewalld

systemctl status firewalld

⚠️ firewalld 和 iptables 同时存在时,容易冲突


二、查看当前 iptables 规则

1. 查看所有规则(推荐)

iptables -L -n -v

参数说明:

  • -L:列出规则
  • -n:不做 DNS 解析(更快)
  • -v:显示命中计数(非常重要)

2. 查看 NAT 表(端口映射、SNAT/DNAT)

iptables -t nat -L -n -v

3. 查看规则行号(删除/插入用)

iptables -L -n --line-numbers

三、确认是否有规则在“丢包”

重点看:

  • DROP
  • REJECT
  • policy DROP

示例:

Chain INPUT (policy DROP)

如果 policy 是 DROP,而没放行对应端口,就会连不上。

临时放行测试(谨慎)

iptables -I INPUT -p tcp --dport 80 -j ACCEPT

四、排查网络连接问题

1. 本机监听端口

ss -lntup
# 或
netstat -lntup

确认服务是否在监听正确 IP/端口。

2. 测试连通性

telnet ip port
# 或
nc -vz ip port

3. 看是否有连接被 DROP

iptables -L INPUT -n -v

看对应规则的 pkts / bytes 是否在增长。


五、开启 iptables 日志(强烈推荐)

1. 添加日志规则

iptables -A INPUT -j LOG --log-prefix "IPTABLES-DROP: "

2. 查看日志

dmesg | grep IPTABLES
# 或
journalctl -k | grep IPTABLES

六、常见排查点(非常常见)

1. firewalld 和 iptables 冲突

systemctl stop firewalld
systemctl disable firewalld

然后:

systemctl restart iptables

2. 默认策略是 DROP

iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

⚠️ 生产环境不要长期 ACCEPT,仅用于排查


3. 回环地址未放行

iptables -I INPUT -i lo -j ACCEPT

4. 连接跟踪表满(高并发)

dmesg | grep conntrack

清理:

sysctl -w net.netfilter.nf_conntrack_max=655360

七、保存规则(修改后)

CentOS 6

service iptables save

CentOS 7+

iptables-save > /etc/sysconfig/iptables

八、快速排查思路总结

  1. 服务是否监听?
  2. 防火墙是否拦?
  3. 是 INPUT 还是 FORWARD?
  4. 是否有 DROP / REJECT?
  5. 是否有 firewalld 干扰?
  6. 日志里有没有包?

如果你愿意,可以把 具体现象(连不上 / 丢包 / 端口不通)iptables -L -n -v 输出 发出来,我可以帮你精确分析。

0