iptables 规则为什么会丢
iptables 规则默认只存在于内核内存中,重启后全部清空。持久化要两步:先用 iptables-save 把当前规则导出成文件,再由发行版提供的持久化服务在开机时 restore。RHEL/CentOS 系用 iptables-services 提供的 iptables 服务,Debian/Ubuntu 系用 iptables-persistent 的 netfilter-persistent。最容易踩的坑是手工执行 iptables-save 重定向到文件——那只是存了快照,没有任何机制会在开机时加载它。
基本信息
| 适用平台 | Linux(iptables) |
|---|---|
| RHEL 系 | 包 iptables-services;命令 service iptables save;文件 /etc/sysconfig/iptables |
| Debian 系 | 包 iptables-persistent;命令 netfilter-persistent save;文件 /etc/iptables/rules.v4 |
| 基线 | 重启后生效规则与批准版本一致 |
| 风险等级 | 中 |
典型使用场景
- 新建主机首次加固:规则调好后立刻做持久化,避免重启失效
- 防火墙策略变更:每次变更后重新保存并登记版本
- 故障恢复:主机异常重启后确认规则仍然生效
- 配置管理:把规则文件纳入版本控制,变更可追溯
- nft 后端系统:明确用 iptables 还是 nft 一套口径,避免互相覆盖
RHEL 系与 Debian 系
RHEL 系与 Debian 系
# RHEL/CentOS:
yum install -y iptables-services
service iptables save # 保存到 /etc/sysconfig/iptables
systemctl enable iptables # 开机自动加载
# Debian/Ubuntu:
apt install -y iptables-persistent
netfilter-persistent save # 保存到 /etc/iptables/rules.v4
systemctl enable netfilter-persistent # 开机自动加载
iptables-save > /root/rules-backup-$(date +%F).v4 # 额外留一份人工备份
# 重启后核对:iptables -S | head -20 应与批准版本一致平台对照读法
| 项目 | RHEL/CentOS 系 | Debian/Ubuntu 系 |
|---|---|---|
| 持久化包 | iptables-services | iptables-persistent |
| 保存命令 | service iptables save | netfilter-persistent save |
| 规则文件 | /etc/sysconfig/iptables | /etc/iptables/rules.v4 |
| 开机服务 | iptables.service | netfilter-persistent.service |
| 核对命令 | systemctl is-enabled iptables | systemctl is-enabled netfilter-persistent |
手工 iptables-save 到文件不会自动加载:必须有服务或脚本在启动时 restore,否则重启后规则归零,防护直接消失。
落地要点
- 保存前先用 iptables-apply 或临时会话验证,别把自锁规则写进开机加载
- 把规则文件纳入配置管理,变更记录里保留版本与时间
- 重启验证是唯一可靠的验收方式:iptables -S 与批准版本逐条比对
- 确认持久化服务处于 enabled 状态,而不只是本次运行生效
- 容器内改动不会写进宿主规则,两处规则要分别管理
较新发行版内核默认使用 nft 后端:此时 iptables 命令经兼容层翻译,混用 iptables 与原生 nft 命令会互相覆盖,团队要统一口径。