在 CentOS 中,iptables 规则“重启后丢失”是正常现象,根本原因是:
iptables 规则是内存中的,不是自动持久化的
下面分情况详细说明。
iptables 规则默认只存在于 内核内存你执行的:
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
只是临时生效。
使用 iptables 服务 + 规则文件:
/etc/sysconfig/iptables
默认使用 firewalld
iptables 仍可用,但不是默认管理方式iptables 命令,重启后不会保留service iptables save
# 或
/etc/init.d/iptables save
保存位置:
/etc/sysconfig/iptables
开机自动恢复(需启用服务):
chkconfig iptables on
yum install iptables-services
systemctl stop firewalld
systemctl disable firewalld
systemctl enable iptables
systemctl start iptables
service iptables save
# 或
iptables-save > /etc/sysconfig/iptables
✅ 重启后规则自动恢复
iptables-save > /etc/iptables.rules
开机恢复:
iptables-restore < /etc/iptables.rules
可写入:
/etc/rc.local常见原因:
| 原因 | 说明 |
|---|---|
| 用了 firewalld | firewalld 会重写 iptables |
| 没执行 save | 只加了规则没保存 |
| 容器环境 | Docker 会改 iptables |
| 云安全组 | 云厂商规则覆盖 |
✅ CentOS 7+ 推荐
firewalldiptables-services❌ 不建议:
如果你愿意,可以告诉我:
我可以给你一套最合适你的持久化方案。