温馨提示×

centos iptables为何重启失效

小樊
43
2026-07-07 22:42:33
栏目: 智能运维

CentOS 中 iptables 规则重启后失效,这是一个非常常见的问题,原因主要有以下几种,取决于你使用的 CentOS 版本和网络管理方式。


一、根本原因(最重要)

iptables 规则默认是保存在内存中的,不会自动持久化。
系统重启后,iptables 会重新加载默认规则(通常是空的),所以你之前配置的规则就“消失”了。


二、不同 CentOS 版本的情况

✅ CentOS 6(传统 iptables)

1️⃣ 规则未保存

你只是执行了类似:

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

没有保存

✅ 解决方法:

service iptables save

或:

iptables-save > /etc/sysconfig/iptables

然后确认开机启动:

chkconfig iptables on

✅ CentOS 7 / 8(systemd,默认 firewalld)

2️⃣ firewalld 覆盖了 iptables(最常见)

CentOS 7+ 默认使用 firewalld,即使你手动用 iptables 添加规则,重启后也会被 firewalld 重置。

✅ 检查是否启用了 firewalld:

systemctl status firewalld

✅ 解决方案(任选一种):

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

安装 iptables 服务:

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

保存规则:

service iptables save

规则文件位置:

/etc/sysconfig/iptables

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

不建议混用 iptables 和 firewalld。

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

✅ CentOS 8(注意)

CentOS 8 中:

  • iptables 实际是 nftables 的兼容层
  • 官方推荐使用 firewalldnftables

✅ 查看:

iptables -V

若看到 nf_tables,说明是兼容层。


三、常见误区

❌ 误区 1:以为 iptables-save 会自动生效

iptables-save

只是输出规则,不会保存文件,必须重定向:

iptables-save > /etc/sysconfig/iptables

❌ 误区 2:Docker / K8s 环境

Docker 会 自动修改 iptables 规则,重启后 docker 会重新注入规则。

✅ 解决方案:

  • 使用 --iptables=false(不推荐)
  • 或配合 firewalld / docker 规则管理

四、快速排查清单 ✅

你可以按顺序检查:

  1. ✅ CentOS 版本
    cat /etc/centos-release
    
  2. ✅ 是否保存规则
    cat /etc/sysconfig/iptables
    
  3. ✅ firewalld 是否运行
    systemctl status firewalld
    
  4. ✅ iptables 服务是否启用
    systemctl status iptables
    

五、总结一句话 ✅

CentOS 中 iptables 重启失效,是因为规则没有持久化,或被 firewalld / 系统初始化覆盖。


如果你愿意,可以告诉我:

  • ✅ CentOS 版本
  • ✅ 是否使用 Docker
  • ✅ 你的 iptables 规则示例

我可以给你一套 完全适合你环境的解决方案

0