iptables规则默认仅存内存,重启即失;需先用iptables-save保存至/etc/iptables/rules.v4等标准路径,再通过systemd服务(如iptables-restore.service)在network.target后自动执行iptables-restore加载,实现开机无缝持久化。

iptables规则默认只存在于内存中,系统重启或服务重载后就会清空。要实现持久化并让规则在systemd服务启动时自动、无缝加载,关键在于两件事:把当前生效的规则存成文件,再让systemd在恰当时机调用iptables-restore把它读回来。
确认规则已配置并验证有效
别跳过这步——持久化无效,往往是因为规则本身就没生效。
- 运行
sudo iptables -L -n --line-numbers检查INPUT、FORWARD等链里是否真有你加的规则(比如放行22、80端口) - 确保SSH放行规则在最前面或足够靠前,避免改完规则连不上机器
- 用
sudo ss -tlnp | grep ':22'确认sshd确实在监听0.0.0.0:22,而不是仅127.0.0.1
保存规则到标准路径
推荐使用发行版通用路径,避免后续加载失败:
- 保存IPv4规则:
sudo iptables-save > /etc/iptables/rules.v4 - 保存IPv6规则(如有):
sudo ip6tables-save > /etc/iptables/rules.v6 - 如果提示目录不存在,先创建:
sudo mkdir -p /etc/iptables - 执行
sudo cat /etc/iptables/rules.v4 | head -n 3确认内容非空且格式正确
配置systemd服务自动加载
不依赖第三方包,纯systemd原生方式,兼容麒麟OS、Ubuntu、Debian等主流发行版:
- 新建服务文件:
sudo nano /etc/systemd/system/iptables-restore.service - 填入以下内容(注意路径与权限):
[Unit] Description=Restore iptables rules After=network.target Wants=network.target [Service] Type=oneshot ExecStart=/sbin/iptables-restore < /etc/iptables/rules.v4 ExecStart=/sbin/ip6tables-restore < /etc/iptables/rules.v6 RemainAfterExit=yes [Install] WantedBy=multi-user.target
- 启用服务:
sudo systemctl daemon-reload && sudo systemctl enable iptables-restore.service - 立即测试加载效果:
sudo systemctl start iptables-restore.service,再运行sudo iptables -L -n看是否恢复
热加载更新后的规则(无需重启服务)
日常运维中修改规则后,想立刻生效又不想重启整个服务?用这个命令即可:
- 先保存新规则:
sudo iptables-save > /etc/iptables/rules.v4 - 触发重载:
sudo systemctl restart iptables-restore.service - 验证:
sudo iptables -L -n | grep "your-rule",确认变更已应用
这种方式绕过了firewalld或netfilter-persistent等中间层,直接由systemd控制生命周期,响应快、无冗余依赖,适合对启动时序和稳定性有明确要求的生产环境。

















