iptables规则重启丢失说明未持久化,需通过iptables-save/restore保存至文件并配置开机加载:创建/etc/iptables目录,保存rules.v4/v6,再通过if-pre-up脚本或systemd服务自动恢复。

如果您在Linux系统中配置了iptables防火墙规则,但重启后规则全部丢失,则说明当前规则仅存在于运行时内存中,未实现持久化保存。以下是多种可立即实施的iptables规则持久化方法:
一、使用iptables-save与iptables-restore手动保存并加载
该方法通过将当前生效的规则导出为文本文件,并在系统启动时自动读取恢复,适用于所有主流Linux发行版,不依赖额外软件包。
1、创建持久化规则存储目录:sudo mkdir -p /etc/iptables
2、保存当前IPv4规则至标准路径:sudo iptables-save > /etc/iptables/rules.v4
3、如启用IPv6,同步保存IPv6规则:sudo ip6tables-save > /etc/iptables/rules.v6
4、验证文件是否写入成功:sudo ls -l /etc/iptables/rules.v*
5、编写网络预启动脚本:sudo nano /etc/network/if-pre-up.d/iptables
6、在该脚本中写入以下两行内容:#!/bin/sh
/sbin/iptables-restore /sbin/ip6tables-restore
7、赋予脚本执行权限:sudo chmod +x /etc/network/if-pre-up.d/iptables
二、使用iptables-persistent工具(Debian/Ubuntu专用)
该工具专为Debian系系统设计,提供systemd集成服务和命令行接口,能自动捕获当前规则并在每次启动时还原,支持IPv4/IPv6双栈。
1、更新软件包索引:sudo apt-get update
2、安装iptables-persistent及其依赖:sudo apt-get install iptables-persistent
3、安装过程中将弹出交互式提示框,务必选择“是”以保存当前规则
4、确认规则已写入:sudo cat /etc/iptables/rules.v4 | head -n 5
5、后续修改规则后,执行手动保存:sudo netfilter-persistent save
6、重载已保存规则(不重启):sudo netfilter-persistent reload
三、使用service命令保存(CentOS/RHEL/Fedora适用)
该方式利用传统SysV init机制,在RHEL系系统中通过iptables-services服务管理规则文件,将规则固化至/etc/sysconfig/iptables。
1、安装iptables-services组件:sudo yum install iptables-services
2、确保iptables服务已禁用firewalld冲突:sudo systemctl stop firewalld && sudo systemctl disable firewalld
3、保存当前运行规则到配置文件:sudo service iptables save
4、验证保存结果:sudo ls -l /etc/sysconfig/iptables
5、启用iptables服务开机自启:sudo systemctl enable iptables
6、立即启动服务以加载规则:sudo systemctl start iptables
四、创建自定义Systemd服务加载规则
当系统未预装持久化工具或需完全控制加载时机时,可创建独立systemd单元文件,在网络就绪前强制注入规则。
1、先将规则保存为通用格式:sudo iptables-save > /etc/iptables.rules
2、新建systemd服务文件:sudo nano /etc/systemd/system/iptables-restore.service
3、写入[Unit]段内容:[Unit]
Description=Restore iptables rules
Before=network.target
4、写入[Service]段内容:[Service]
Type=oneshot
ExecStart=/sbin/iptables-restore RemainAfterExit=yes
5、写入[Install]段内容:[Install]
WantedBy=multi-user.target
6、重新加载systemd配置:sudo systemctl daemon-reload
7、启用该服务:sudo systemctl enable iptables-restore.service
五、切换至firewalld统一管理(替代方案)
firewalld作为动态防火墙管理器,其所有规则默认持久化,且避免与iptables直接混用导致策略覆盖,适合长期运维环境。
1、卸载iptables残留服务(如已启用):sudo systemctl stop iptables && sudo systemctl disable iptables
2、安装firewalld:sudo apt-get install firewalld
3、启用并启动firewalld:sudo systemctl enable firewalld && sudo systemctl start firewalld
4、添加永久性端口规则(示例开放80端口):sudo firewall-cmd --permanent --add-port=80/tcp
5、重载firewalld使永久规则生效:sudo firewall-cmd --reload
6、验证规则已持久化:sudo firewall-cmd --list-all

















