Linux重启后iptables规则消失是因为规则仅存于内存,需手动持久化;Ubuntu/Debian用iptables-persistent安装时选Yes保存,CentOS/RHEL写入/etc/sysconfig/iptables并启用服务,通用法可自建systemd服务调用iptables-restore。

Linux服务器重启后iptables规则全部消失,是因为规则只存在于内核内存中,不自动写入磁盘;必须显式导出到文件,并配置系统在启动阶段加载该文件,否则所有防火墙策略将失效。
Ubuntu/Debian系统:用iptables-persistent一键保存
这是最省心的方案,安装即自动识别当前规则并设为开机加载。
执行sudo apt install iptables-persistent,安装过程中弹窗提示“Save current rules?”时【务必选Yes】。
若已安装但未保存过,运行sudo netfilter-persistent save即可覆盖旧配置文件。
验证是否生效:执行sudo netfilter-persistent reload && sudo iptables -L -n,能看到你添加的规则仍在。
CentOS/RHEL 7+系统:写入/etc/sysconfig/iptables文件
该路径是systemd版iptables服务默认读取的位置,其他路径无效。
第一步:确保当前规则已按需配置完成(例如已放行SSH端口),再执行:sudo iptables-save > /etc/sysconfig/iptables
第二步:启用iptables服务使其开机自启:sudo systemctl enable iptables
第三步:重启服务立即测试加载效果:sudo systemctl restart iptables,随后运行sudo iptables -L -n确认规则存在。
⚠️注意:不要手动编辑/etc/sysconfig/iptables后直接重启服务——修改必须通过iptables-save覆盖文件,否则restart会回滚到上次保存的内容。
跨发行版通用法:手动导出+systemd服务自动恢复
适合小众系统、容器环境或想掌握底层原理的用户。
方法一:创建规则存储目录并导出sudo mkdir -p /etc/iptables && sudo iptables-save > /etc/iptables/rules.v4
方法二:编写systemd服务文件
用sudo nano /etc/systemd/system/iptables-restore.service新建服务,填入以下内容:
[Unit]
Description=Restore iptables rules
Before=network.target
[Service]
Type=oneshot
ExecStart=/sbin/iptables-restore
[Install]
WantedBy=multi-user.target
方法三:启用并验证服务sudo systemctl daemon-reload && sudo systemctl enable iptables-restore.service
这一步完成后,下次开机就会自动执行iptables-restore加载规则。











