CentOS 7 防火墙规则持久化:告别重启丢失的烦恼
作为网站服务器管理员,配置好精准的防火墙规则是保障安全的第一道防线,在 CentOS 7 环境下,我们通常依赖 iptables 来实现这一目标,许多管理员都曾遭遇过这样的窘境:精心设置的规则在服务器重启后消失得无影无踪,这种规则丢失的情况不仅带来重复工作的困扰,更可能留下短暂的安全隐患,理解并解决 CentOS 7 下 iptables 规则持久化问题,是每位运维人员的必备技能。
为何规则会“不翼而飞”?

关键在于 iptables 服务本身的特性:它默认在运行时将规则保存在内核的内存中,当系统关闭或重启时,这些内存中的规则自然会被清除,要想让规则永久生效,我们需要将其保存到特定的磁盘文件中,并在系统启动时自动重新加载这些规则,这是实现防火墙规则持久化的核心原理。
实现持久化的两种可靠途径
CentOS 7 提供了两种主流方法来解决规则保存问题,选择哪一种取决于你的系统环境和个人偏好:
利用
iptables-service包(经典方法) 这是 CentOS 7 之前版本(如 CentOS 6)的传统方式,在 7 上依然有效且稳定。安装服务包:
yum install iptables-services -y
此命令会安装必要的服务脚本和配置文件。

停止并禁用 firewalld(关键步骤): CentOS 7 默认使用
firewalld,它会与iptables服务冲突,必须禁用:systemctl stop firewalld systemctl disable firewalld
启动并启用 iptables 服务:
systemctl start iptables systemctl enable iptables systemctl start ip6tables # 如需 IPv6 规则 systemctl enable ip6tables # 如需 IPv6 规则
保存当前规则: 这是将内存中的规则写入配置文件的核心命令:
service iptables save
或
/usr/libexec/iptables/iptables.init save
规则会被保存到
/etc/sysconfig/iptables(IPv4)和/etc/sysconfig/ip6tables(IPv6)。验证与重启:

cat /etc/sysconfig/iptables # 检查规则是否保存成功 reboot # 重启服务器后检查规则是否自动加载 iptables -L -n # 查看当前生效的规则
使用
iptables-persistent/netfilter-persistent(更现代的替代) 此方法在 Debian/Ubuntu 上常见,在 CentOS 7 上也可通过 EPEL 仓库安装,逻辑更清晰。启用 EPEL 仓库:
yum install epel-release -y
安装软件包:
yum install iptables-persistent -y
安装后,服务名通常为
netfilter-persistent。停止并禁用 firewalld (同样必要):
systemctl stop firewalld systemctl disable firewalld
保存当前规则: 安装完成后首次保存:
service netfilter-persistent save
或使用提供的工具:
/usr/libexec/iptables/iptables.init save
规则默认保存在
/etc/sysconfig/iptables和/etc/sysconfig/ip6tables。启用服务:
systemctl enable netfilter-persistent systemctl start netfilter-persistent
后续保存规则: 规则变更后,再次运行保存命令:
service netfilter-persistent save
或
/usr/libexec/iptables/iptables.init save
验证与重启: 同样重启服务器并用
iptables -L -n验证。
重要注意事项与经验分享
firewalld冲突是根源: 规则无法保存或重启后失效,十有八九是忘记停用firewalld,这两个服务水火不容,务必先禁用firewalld。- 保存命令的执行时机: 完成规则调整后,必须手动执行
service iptables save或service netfilter-persistent save,修改规则本身并不会自动触发保存操作。 - 配置文件位置: 无论哪种方法,最终规则都写入
/etc/sysconfig/iptables,熟悉其格式有助于手动编辑或排查问题。 - 备份是好习惯: 在修改重要防火墙规则前,手动备份
/etc/sysconfig/iptables文件是明智之举:cp /etc/sysconfig/iptables /etc/sysconfig/iptables.bak。 - 规则加载顺序: 服务启动时,会读取配置文件并在网络接口初始化后应用规则,了解这一点有助于理解某些依赖网络接口的规则为何需要特殊处理。
- 检查服务状态: 使用
systemctl status iptables或systemctl status netfilter-persistent查看服务运行日志,有助于诊断启动失败问题。 ip6tables同样重要: 如果服务器启用了 IPv6,别忘了对ip6tables进行相同的保存和启用操作。
在多年的服务器管理工作中,我深刻体会到防火墙规则持久化的重要性,一次未保存的规则变更,足以让重启后的服务器门户洞开,选择 iptables-service 还是 iptables-persistent 更多是习惯问题,核心在于理解服务冲突原理并养成“修改即保存”的操作习惯,将 /etc/sysconfig/iptables 纳入日常备份和配置管理流程,是保障服务器长期安全运行的基石,清晰的防火墙策略配合可靠的持久化机制,才能让安全防护真正固若金汤。
