新手配置iptables持久化核心是规则添加后必须显式保存,否则重启丢失;Ubuntu/Debian用iptables-persistent,CentOS/RHEL 7+用/etc/sysconfig/iptables文件,跨发行版可手动备份并配置开机加载脚本。

新手配置 iptables 持久化,核心就一件事:**规则加完后必须显式保存,否则重启全丢**。Linux 内核运行时的 iptables 规则是临时的,不自动写入磁盘。Ubuntu/Debian 和 CentOS/RHEL 的主流做法不同,下面按最常用、最稳妥的方式说明。
Ubuntu/Debian 推荐用 iptables-persistent
这是官方维护、开箱即用的方案,适合新手:
- 安装服务:sudo apt install iptables-persistent(安装过程中会弹窗问“是否保存当前规则”,选 Yes)
- 如果已安装但没保存过,手动执行:sudo netfilter-persistent save
- 验证是否生效:sudo netfilter-persistent reload && sudo iptables -L -n,能看到你添加的规则
- 服务默认开机自启,无需额外启用;IPv6 规则也支持,用 sudo ip6tables -A ... 添加后同样执行 save 即可
CentOS/RHEL 7+ 用 /etc/sysconfig/iptables 文件
传统方式,规则直接存为配置文件,系统启动时自动加载:
- 先配置好所有规则(比如放行 22、80、443),再执行:sudo iptables-save > /etc/sysconfig/iptables
- 确保 iptables 服务已启用:sudo systemctl enable iptables
- 重启后自动加载:sudo systemctl restart iptables 会读取该文件并应用
- 注意:不要手动编辑 /etc/sysconfig/iptables 后直接重启服务——要先 restart,再 save,否则修改可能被回滚
通用手动备份法(跨发行版都可用)
不依赖特定包,适合想掌握底层逻辑的新手:
- 把当前规则导出为文件:sudo iptables-save > /etc/iptables.rules
- 创建一个开机加载脚本(如 /etc/network/if-pre-up.d/iptablesload),内容为:
#!/bin/sh
iptables-restore < /etc/iptables.rules - 赋予执行权限:sudo chmod +x /etc/network/if-pre-up.d/iptablesload
- 这样每次网卡启动前都会自动载入规则,稳定可靠
配置前务必确认的三件事
避免规则加了却访问不了,常因这些细节失败:
- 检查 Nginx/Apache 是否真在监听 0.0.0.0:80,而不是只监听 127.0.0.1 —— 用 sudo ss -tlnp | grep :80 验证
- 先放行已建立连接:sudo iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT,防止自己被锁在外面
- SSH 端口(22)一定要提前放行,尤其是远程操作时;建议加完立即测试,再继续其他规则


















