温馨提示×

centos iptables如何排错

小樊
50
2026-09-17 21:10:10
栏目: 智能运维

在 CentOS 上使用 iptables 时,排错通常可以按「从外到内、从规则到系统」的思路进行。下面给你一套实用排错 checklist。


一、确认 iptables 是否真正生效

1. 查看 iptables 规则

iptables -L -n -v
iptables -t nat -L -n -v

重点看:

  • 是否有规则
  • 规则顺序(iptables 是从上到下匹配)
  • 是否有 DROP / REJECT

2. 确认 iptables 服务状态

CentOS 6:

service iptables status

CentOS 7+(如仍用 iptables):

systemctl status iptables

⚠️ CentOS 7 默认是 firewalld,如果没关,iptables 可能被覆盖


二、排查 firewalld 冲突(非常常见)

查看 firewalld 状态

systemctl status firewalld

如果在使用 iptables,建议关闭 firewalld

systemctl stop firewalld
systemctl disable firewalld

三、确认数据包“走到哪一层被拦”

1. 看是否连得上端口

telnet ip port
# 或
nc -vz ip port

2. 本机监听是否正常

ss -lntp
netstat -lntp

确认:

  • 服务是否监听在 0.0.0.0
  • 是否只监听了 127.0.0.1

四、用 LOG 规则定位被拦截位置(强烈推荐)

在疑似 DROP 前加 LOG:

iptables -I INPUT 1 -p tcp --dport 80 -j LOG --log-prefix "IPTABLES-DROP: "

然后看日志:

dmesg | grep IPTABLES
# 或
tail -f /var/log/messages

五、常见问题速查表

✅ 端口不通

  • INPUT 链没放行
  • 默认策略是 DROP
iptables -P INPUT DROP

✅ 能 ping 不能连端口

  • ICMP 放行,TCP 被拦

✅ NAT 不生效

  • 没开转发
echo 1 > /proc/sys/net/ipv4/ip_forward
  • 没做 POSTROUTING

✅ Docker / K8s 环境异常

  • iptables 被 docker 接管
  • 不要手动乱改 FORWARD 链

六、临时放行测试(排错用)

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

测试完再删:

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

七、保存规则(避免重启丢失)

CentOS 6:

service iptables save

CentOS 7(iptables-services):

iptables-save > /etc/sysconfig/iptables

八、快速排错顺序总结

  1. 服务监听了吗?
  2. 本机能连吗?
  3. firewalld 关了吗?
  4. iptables 有 DROP 吗?
  5. 加 LOG 看包去哪了?
  6. 转发/NAT 开了吗?

如果你愿意,可以贴:

  • CentOS 版本
  • iptables -L -n 输出
  • 具体“什么不通”

我可以直接帮你定位是哪条规则的问题。

0 踩