iptables规则默认临时,需保存至/etc/iptables/rules.v4等文件并安装iptables-persistent(Debian/Ubuntu)或iptables-services(CentOS/RHEL)实现开机加载。

iptables规则默认是临时的,系统重启后会丢失。要让规则持久化并开机自动加载,关键在于把当前规则保存到文件,并配置系统在启动时从该文件恢复。
保存当前iptables规则到配置文件
使用iptables-save命令将内存中的规则导出为可读的文本格式,推荐保存到/etc/iptables/rules.v4(IPv4)或/etc/iptables/rules.v6(IPv6),这是多数发行版(如Debian/Ubuntu)默认识别的路径:
- 保存IPv4规则:sudo iptables-save > /etc/iptables/rules.v4
- 保存IPv6规则(如有):sudo ip6tables-save > /etc/iptables/rules.v6
注意:确保/etc/iptables/目录存在,若无则先创建:sudo mkdir -p /etc/iptables。
启用开机自动加载iptables规则
不同系统启用方式略有差异,常见方法如下:
-
Debian/Ubuntu系(推荐):安装iptables-persistent包,它会自动管理保存与恢复:
sudo apt update && sudo apt install iptables-persistent
安装过程中会提示是否保存当前规则,选“是”;之后每次手动修改规则后,需再次运行sudo netfilter-persistent save更新配置文件。 -
CentOS/RHEL 7+(firewalld默认启用):若坚持用iptables,先停用firewalld:
sudo systemctl stop firewalld && sudo systemctl disable firewalld
再安装iptables-services:
sudo yum install iptables-services
启用服务:
sudo systemctl enable iptables && sudo systemctl enable ip6tables
保存当前规则:
sudo service iptables save(会写入/etc/sysconfig/iptables)
验证持久化是否生效
完成配置后,可通过以下步骤验证:
- 重启iptables服务(不重启系统):sudo systemctl restart iptables(或sudo netfilter-persistent reload),检查规则是否还在
- 手动清空规则再恢复:sudo iptables -F && sudo iptables-restore ,确认无报错且策略恢复
- 重启系统后,立即执行sudo iptables -L -n -v,比对规则是否与保存前一致
注意事项与常见问题
避免因配置错误导致网络中断:
- 始终保留一条允许SSH(如-A INPUT -p tcp --dport 22 -j ACCEPT)和已建立连接通过的规则(-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT),防止锁死自己
- 修改规则后务必先测试再保存,尤其是生产环境
- 某些云平台(如AWS、阿里云)的安全组优先于iptables,iptables规则可能不生效,需同步检查云平台网络策略
- 容器环境(Docker)会自动添加iptables规则,与手动配置可能冲突,建议在docker启动前设置好基础规则,或使用--iptables=false禁用其干预










