新手配置服务器防火墙实现持久化,核心是让规则写入配置文件、不依赖内存状态:firewalld用户需用--permanent参数并reload;ufw用户设default deny incoming后启用即可,规则自动持久化。

新手配置服务器防火墙实现持久化,核心是让规则写入配置文件、不依赖内存状态,这样即使系统异常重启,高危端口(如数据库3306、远程管理22非必要时、测试端口8080等)依然保持关闭。关键不是“关一次”,而是“永远不自动开”。
确认当前防火墙工具和运行状态
先明确你用的是哪个防火墙——CentOS/RHEL 7+ 默认是 firewalld,Ubuntu/Debian 默认是 ufw。执行以下命令快速识别:
-
systemctl status firewalld—— 若显示 active (running),说明 firewalld 在用 -
ufw status verbose—— 若不报错且有输出,说明 ufw 是主防火墙 -
iptables -L -n | head -5—— 若看到规则但前两者都未启用,可能直接用了 iptables(新手不推荐)
firewalld 用户:永久关闭高危端口(推荐方式)
firewalld 的“永久”规则默认存于 /etc/firewalld/zones/public.xml 等配置文件中,只要加了 --permanent 并重载,就具备重启耐受性。
- 检查哪些端口当前被开放:
sudo firewall-cmd --permanent --list-ports - 逐个移除高危端口(例如关闭 MySQL 默认端口):
sudo firewall-cmd --permanent --remove-port=3306/tcp - 若曾开放过服务名(如
mysql或自定义服务),也需一并移除:sudo firewall-cmd --permanent --remove-service=mysql - 务必重载生效:
sudo firewall-cmd --reload - 验证是否已从永久配置中清除:
sudo firewall-cmd --permanent --list-ports应不再显示该端口
ufw 用户:默认拒绝 + 显式放行才是持久化安全基线
ufw 的策略是“默认拒绝所有入站”,只要没手动 allow,高危端口天然关闭,且该策略本身持久化。
- 启用并设为默认拒绝:
sudo ufw default deny incoming - 只允许真正需要的服务(如 SSH 若必须):
sudo ufw allow OpenSSH或sudo ufw allow 22/tcp - 启用防火墙:
sudo ufw enable(此步会自动保存配置,重启不失效) - 查看当前放行列表:
sudo ufw status numbered—— 确保没有意外放行 3306、6379、27017 等
额外加固:防止规则被意外覆盖或绕过
仅靠关闭端口还不够。异常重启后若有人误操作或脚本自动重开,仍可能暴露。建议补充两层防护:
-
锁定关键端口的富规则(firewalld):添加一条永久拒绝规则,优先级高于普通放行:
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" port port="3306" protocol="tcp" reject',再 reload -
禁用对应服务开机自启(治本):比如 MySQL 不该对外提供服务,就运行
sudo systemctl disable mysqld,避免服务启动时触发端口监听 -
定期快照对比:可简单记录一次干净状态:
sudo firewall-cmd --permanent --list-all > /root/firewall-baseline.txt,后续异常时快速比对

















