当防火墙罢工时:我的 Linux 防火墙服务启动失败排查实录
大家好,我是33blog的运维老司机。今天想和大家分享一个让我加班到凌晨两点的真实案例——Linux防火墙服务死活启动不了的问题排查过程。相信不少运维同仁都遇到过类似情况,希望我的踩坑经验能帮到你们。
一、症状初现:那个诡异的错误提示
那天下午,当我像往常一样执行 systemctl start firewalld
时,终端突然抛出了一个让我头皮发麻的错误:
Failed to start firewalld.service: Unit firewalld.service is masked.
更诡异的是,前一天服务还运行得好好的。我下意识地检查了服务状态:
systemctl status firewalld
● firewalld.service
Loaded: masked (Reason: Unit firewalld.service is masked.)
Active: inactive (dead)
二、第一反应:检查服务屏蔽状态
看到”masked”这个关键词,我立刻想到可能是有人(或者某个自动化脚本)不小心屏蔽了服务。于是赶紧尝试解除屏蔽:
sudo systemctl unmask firewalld
Removed /etc/systemd/system/firewalld.service.
然而事情并没有这么简单——重启服务后,又出现了新的报错:
FirewallD is not running
三、深入排查:日志才是真相帝
这时候我意识到需要查看更详细的日志了。通过journalctl查看防火墙服务的完整日志:
sudo journalctl -u firewalld --no-pager -n 50
在密密麻麻的日志中,这几行引起了我的注意:
ERROR: Failed to load ipset modules
WARNING: ipset not usable, disabling ipset usage
ERROR: Failed to start firewall: FirewallD failed to start
四、模块之谜:消失的内核组件
原来问题出在ipset模块上!我马上检查内核模块加载情况:
lsmod | grep ip_set
# 空空如也...
尝试手动加载模块:
sudo modprobe ip_set
结果报错:
modprobe: FATAL: Module ip_set not found in directory /lib/modules/$(uname -r)
五、真相大白:内核升级的锅
经过一番排查,终于发现问题的根源——昨天自动更新的内核版本(从5.4.0-91升级到5.4.0-92)没有正确安装对应的模块包。解决方法其实很简单:
sudo apt install --reinstall linux-modules-extra-$(uname -r)
重新加载模块后,防火墙服务终于正常启动了!
六、经验总结:防火墙启动失败的常见原因
通过这次经历,我整理了几个防火墙启动失败的常见原因和排查步骤:
- 服务被屏蔽:检查并解除mask状态
- 依赖模块缺失:查看日志确认缺失的模块
- 配置文件损坏:备份后尝试重置配置
- 端口冲突:检查是否有其他防火墙程序在运行
- SELinux干扰:临时设置为permissive模式测试
记住,遇到问题时不要慌,journalctl
永远是你最好的朋友。希望这篇文章能帮你少走些弯路。如果你们还遇到过其他奇葩的防火墙问题,欢迎在评论区分享你的故事!
遇到过一模一样的问题,内核升级真是太容易出幺蛾子了,感谢分享!