温馨提示×

centos iptables怎样排错

小樊
45
2026-10-23 06:30:20
栏目: 智能运维

在 CentOS 上使用 iptables 时,常见问题包括:规则不生效、服务无法访问、规则被 firewalld 覆盖、重启后丢失等。下面按排错思路 + 常用命令 + 常见场景来说明。


一、先确认环境(非常重要)

1. 是否真的在用 iptables

CentOS 7+ 默认使用 firewalld,iptables 可能只是后端。

systemctl status firewalld

如果 firewalld 在运行:

systemctl stop firewalld
systemctl disable firewalld

或改用:

firewall-cmd ...

2. 查看 iptables 是否安装

which iptables
rpm -q iptables

如未安装:

yum install -y iptables iptables-services

3. 启动 iptables 服务(CentOS 6/7)

systemctl enable iptables
systemctl start iptables

二、查看当前规则(第一步排错)

查看所有规则

iptables -L -n -v

参数说明:

  • -L:列出规则
  • -n:不解析域名(更快)
  • -v:详细信息(命中计数)

查看 NAT 表

iptables -t nat -L -n -v

查看规则顺序

⚠️ iptables 是顺序匹配,第一条匹配即生效


三、常见排错场景

场景 1:端口开了但还是连不上

  1. 检查 INPUT 链默认策略
iptables -L INPUT

如果是:

Chain INPUT (policy DROP)

需要显式放行。

  1. 放行端口示例(如 80):
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
  1. 确认服务在监听
ss -lntp | grep 80

场景 2:本机能访问,外网不能

检查:

  • 是否只放行了 lo
  • 是否云服务器安全组未开放
  • 是否公网 IP 未绑定
iptables -I INPUT -s 0.0.0.0/0 -p tcp --dport 22 -j ACCEPT

场景 3:规则重启后丢失

iptables 规则默认不持久化。

保存规则:

service iptables save
# 或
iptables-save > /etc/sysconfig/iptables

CentOS 7:

iptables-save > /etc/sysconfig/iptables
systemctl restart iptables

场景 4:FORWARD 被 DROP(NAT/转发失败)

iptables -L FORWARD

如需开启转发:

echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -P FORWARD ACCEPT

场景 5:被 Docker 干扰

Docker 会自动写 iptables 规则。

查看:

iptables -L DOCKER

不要手动删 DOCKER 链,应通过:

docker network rm ...

四、调试技巧(强烈推荐)

1. 打日志

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

查看日志:

dmesg | grep IPTABLES
journalctl -k | grep IPTABLES

2. 临时清空规则(测试用)

iptables -F
iptables -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

⚠️ 生产环境慎用


五、排错顺序总结(标准流程)

  1. 确认 firewalld 是否干扰
  2. iptables -L -n -v 看规则
  3. 确认链和端口
  4. 看服务是否监听
  5. 看是否云安全组
  6. 加 LOG 调试
  7. 保存规则

如果你愿意,可以贴出:

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

我可以直接帮你定位问题。

0 踩