iptables规则开机自动初始化的关键是保存规则至文件并在启动时用iptables-restore加载;ubuntu/debian用iptables-persistent包自动管理,centos/rhel 7+依赖/etc/sysconfig/iptables文件及iptables服务,通用法可手动创建if-pre-up脚本实现网卡启动前加载。

Linux中配置iptables规则开机自动初始化,关键不是“启动服务”,而是让规则在系统启动时被加载进内核。iptables本身没有常驻进程,它只是向内核netfilter提交规则的工具,所以持久化核心是:把当前规则保存成文件,并在开机早期(网络就绪前)用 iptables-restore 加载回来。
Ubuntu/Debian 系统:用 iptables-persistent
这是最省心、官方推荐的方式:
- 安装:运行
sudo apt install iptables-persistent,安装过程中会弹窗询问是否保存当前规则,选 Yes - 后续修改规则后,必须手动保存:执行
sudo netfilter-persistent save(这会把 filter 和 nat 表分别存到/etc/iptables/rules.v4和/etc/iptables/rules.v6) - 服务已默认启用并开机自启,无需额外操作;重启后自动加载
- 验证:重启后运行
sudo iptables -L -n,能看到你保存过的规则
CentOS/RHEL 7+ 系统:靠 /etc/sysconfig/iptables 文件
传统方式,依赖 iptables-services 包:
- 确保已安装:运行
sudo yum install iptables-services(或dnf) - 保存当前规则:执行
sudo iptables-save > /etc/sysconfig/iptables - 启用服务:运行
sudo systemctl enable iptables(注意不是iptables.service,就是iptables) - 下次重启时,systemd 会调用
iptables服务,自动读取该文件并加载 - ⚠️ 注意:不要直接编辑
/etc/sysconfig/iptables后就重启服务——要先systemctl restart iptables,再service iptables save,否则修改可能被回滚
通用跨发行版方法:手动脚本加载
不依赖特定包,适合理解原理或定制场景:
- 导出规则:运行
sudo iptables-save > /etc/iptables.rules - 创建加载脚本:新建文件
/etc/network/if-pre-up.d/iptablesload,内容为:
#!/bin/sh
iptables-restore - 赋予执行权限:运行
sudo chmod +x /etc/network/if-pre-up.d/iptablesload - 这样每次网卡启动前都会自动载入,稳定且时机合适
配置前必须确认的三件事
避免规则加了却连不上,常见坑在这儿:
- 先放行已建立连接:
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT,否则响应包进不来 - 允许本地回环:
sudo iptables -A INPUT -i lo -j ACCEPT,很多服务依赖这个 - 开放 SSH 端口(22)或你实际用的服务端口(如 80/443),并且确认服务确实在监听
0.0.0.0而非仅127.0.0.1,可用sudo ss -tlnp | grep :22验证











