温馨提示×

centos iptables为何不生效

小樊
41
2026-07-07 22:35:35
栏目: 智能运维

CentOS 上 iptables 规则不生效,通常不是“iptables 没写对”,而是 系统环境或执行方式 的问题。下面按 最常见原因 → 排查方法 → 解决方案 给你系统梳理。


一、CentOS 7/8 最常见原因(90% 的情况)

✅ 1. firewalld 正在运行(最常见)

CentOS 7+ 默认使用 firewalld,它会接管 netfilter,iptables 规则可能被覆盖或忽略

检查

systemctl status firewalld

解决方式(二选一)

方案 A:关闭 firewalld,使用 iptables(传统方式)

systemctl stop firewalld
systemctl disable firewalld

yum install -y iptables-services
systemctl enable iptables
systemctl start iptables

然后重新写入规则:

iptables -A INPUT -p tcp --dport 80 -j ACCEPT
service iptables save

方案 B:直接用 firewalld(推荐)

firewall-cmd --add-port=80/tcp --permanent
firewall-cmd --reload

二、规则写错链或顺序不对

❌ 常见错误

iptables -A INPUT -p tcp --dport 22 -j ACCEPT

前面已经有 DROP / REJECT 规则,导致永远匹配不到。

排查

iptables -nvL INPUT --line-number

修正

iptables -I INPUT 1 -p tcp --dport 22 -j ACCEPT

三、规则没保存,重启后消失

❌ 只执行 iptables 命令,不保存

CentOS 6

service iptables save

CentOS 7(iptables-services)

service iptables save
# 或
/usr/libexec/iptables/iptables.init save

四、网络接口 / 地址不匹配

常见错误

  • 规则写在 错误的网卡
  • 源 IP / 目的 IP 不对
  • 连的是 IPv6,却配了 IPv4

检查接口

ip addr
iptables -nvL -v

五、Docker / K8s 干扰(非常常见)

Docker 会自动修改 iptables

iptables -t nat -L -n

现象

  • 端口被 Docker 占用
  • FORWARD 链被修改

✅ 解决:

vim /etc/docker/daemon.json
{
  "iptables": false
}

然后重启 Docker(⚠️ 会影响容器网络)


六、iptables 模块未加载

检查

lsmod | grep ip_tables

加载

modprobe ip_tables
modprobe iptable_filter

七、SELinux 干扰(较少见)

检查

getenforce

临时关闭测试

setenforce 0

八、你改的是 nat / mangle,却看 filter

错误示例

iptables -t nat -A PREROUTING ...
iptables -L

✅ 正确:

iptables -t nat -L

九、快速自检清单 ✅

# 1. 是否 firewalld 在运行
systemctl status firewalld

# 2. iptables 是否真的生效
iptables -nvL INPUT

# 3. 是否保存
service iptables save

# 4. 是否有 Docker
docker ps

# 5. 包是否真的经过该链
iptables -nvL | grep -c packets

十、我可以直接帮你定位

你可以直接贴这些信息(复制即可):

cat /etc/os-release
systemctl status firewalld
iptables -nvL INPUT
iptables -nvL -t nat

我可以 直接告诉你哪一条规则没生效、为什么、怎么改

0