新手配置服务器防火墙需确保规则持久化:Ubuntu/Debian用ufw(启用即持久)、CentOS/RHEL用firewalld加--permanent并reload、自定义iptables则依赖iptables-persistent手动保存,且务必重启验证。

新手配置服务器防火墙,最怕重启后规则全丢、服务连不上。关键不是“加几条规则”,而是让规则真正固化进系统启动流程。不同发行版和工具链路径不同,但核心逻辑一致:先配好规则,再明确保存方式,最后验证是否随系统加载。
Ubuntu/Debian 系统:优先用 ufw
ufw 是为新手设计的,命令简单,且默认就支持持久化,不用额外折腾:
- 安装并启用:运行
sudo apt install ufw && sudo ufw enable,启用时会自动把当前策略写入/etc/ufw/user.rules - 放行必要服务:比如 SSH(22)、HTTP(80)、HTTPS(443),直接执行
sudo ufw allow 22/tcp,每加一条都会实时更新配置文件 - 拒绝其他所有入站:ufw 默认策略就是
DENY,无需手动设-P DROP,更安全 - 重启后验证:执行
sudo ufw status verbose,看到带ALLOW的端口列表,说明已持久生效
CentOS/RHEL 系统:用 firewalld + --permanent
firewalld 是默认方案,它的“永久模式”就是专为持久化设计的:
- 确保服务已启用:运行
sudo systemctl enable --now firewalld,保证开机自启 - 所有规则必须加
--permanent:例如开放 80 端口,要写sudo firewall-cmd --permanent --add-port=80/tcp;只写--add-port是临时的,重启即失效 - 每次改完必须重载:执行
sudo firewall-cmd --reload,让永久规则加载进运行时环境 - 检查是否存进配置:查看
/etc/firewalld/zones/public.xml,能看到刚加的<port port="80" protocol="tcp"></port>,这就落盘了
需要自定义 iptables 规则时:用 iptables-persistent
如果你写了复杂规则(比如限速、ICMP 分类控制、状态匹配),又不想换工具,就靠它:
- 安装:在 Ubuntu/Debian 上执行
sudo apt install iptables-persistent;安装过程会提示是否保存当前规则,选“是” - 后续修改规则后,必须手动保存:运行
sudo netfilter-persistent save,它会把当前iptables -L看到的规则写进/etc/iptables/rules.v4 - 确认服务已启用:检查
sudo systemctl is-enabled netfilter-persistent返回enabled,否则重启不加载 - 注意:不要混用
iptables -P DROP和 ufw/firewalld,容易冲突断连
通用避坑提醒
新手最容易栽在这几个点上:
- 远程操作时,千万别先执行
iptables -P INPUT DROP再加放行规则——SSH 会立刻断开,只能靠控制台救急 - firewalld 的
--permanent不等于“已生效”,漏掉--reload就白配了 - ufw 启用后,
iptables -L看到的是底层规则,别试图直接改它,统一走ufw命令 - 每次改完,都该做一次“重启验证”:
sudo reboot && ssh your-server,连得上、服务通,才算真正落地

















