Linux中iptables规则开机自动加载的关键是保存规则并配置加载时机:CentOS/RHEL用iptables-services保存至/etc/sysconfig/iptables并启用服务;Ubuntu/Debian推荐iptables-persistent;通用方式为iptables-save导出+if-pre-up脚本恢复。

Linux中让iptables规则开机自动加载,关键不是“启动iptables服务”本身,而是把当前配置好的规则保存到系统能识别的路径,并确保系统启动时有机制去读取并应用它。不同发行版实现方式不同,但核心逻辑一致:先保存规则,再配加载时机。
CentOS/RHEL 7+ 的标准做法
这类系统依赖 iptables-services 包提供 iptables 系统服务:
- 安装服务:
yum install iptables iptables-services - 配置好所有规则后,执行:
service iptables save(该命令会把规则写入/etc/sysconfig/iptables) - 启用开机自启:
systemctl enable iptables - 验证是否生效:
systemctl is-enabled iptables应返回enabled;重启后运行iptables -L可确认规则仍在
Ubuntu/Debian 推荐用 iptables-persistent
这是官方维护、开箱即用的方案,自动处理 IPv4 和 IPv6 规则:
- 安装:
sudo apt install iptables-persistent(安装过程中会提示是否保存当前规则,选 Yes) - 后续手动修改规则后,执行:
sudo netfilter-persistent save - 服务默认已设为开机自启,无需额外启用
- 验证:
sudo netfilter-persistent reload后用sudo iptables -L检查
通用手动方式(跨发行版适用)
不依赖特定包,适合想掌握底层逻辑或定制化部署的用户:
- 导出当前规则:
sudo iptables-save > /etc/iptables.rules - 创建网卡启动前加载脚本:
/etc/network/if-pre-up.d/iptablesload,内容为:
iptables-restore < /etc/iptables.rules
- 赋予执行权限:
sudo chmod +x /etc/network/if-pre-up.d/iptablesload - 这样每次网卡初始化时都会自动载入规则,稳定且不依赖 systemd 服务名
必须避开的坑
规则没在重启后生效,常见原因有:
- 只加了规则但没执行
save或netfilter-persistent save,规则仍只在内存中 - 误将规则保存到
/tmp/或家目录等临时路径,重启即清空 - 同时启用了
firewalld和iptables服务,二者冲突导致规则被覆盖 - 没放行 SSH(22端口)或未允许已建立连接,远程操作时容易把自己锁在外面


















