Linux无法启动防火墙服务的排查方法

2025.7.18 杂七杂八 1308
33BLOG智能摘要
当执行`systemctl start firewalld`时,终端出现`Failed to start firewalld.service: Unit firewalld.service is masked`的错误提示。解除防火墙服务被屏蔽(`unmask`)后,重启服务却遇到`FirewallD is not running`的问题。进一步查看日志,发现`ipset`模块加载失败,是导致防火墙无法启动的关键原因。检查内核模块加载状态时,`ip_set`模块完全没有加载,尝试手动加载也失败,提示`Module ip_set not found`。最终确认问题源于前一天的内核自动更新(从5.4.0-91到5.4.0-92),新内核未正确安装对应模块。通过执行`sudo apt install --reinstall linux-modules-extra-$(uname -r)`重新安装模块后,防火墙恢复正常。常见防火墙启动失败的原因包括服务被屏蔽、依赖模块缺失、配置文件损坏、端口冲突以及其他程序干扰。排查时应优先查看日志,并使用`journalctl`获取详细信息。
— 此摘要由33BLOG基于AI分析文章内容生成,仅供参考。

当防火墙罢工时:我的 Linux 防火墙服务启动失败排查实录

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)

重新加载模块后,防火墙服务终于正常启动了!

六、经验总结:防火墙启动失败的常见原因

通过这次经历,我整理了几个防火墙启动失败的常见原因和排查步骤:

  1. 服务被屏蔽:检查并解除mask状态
  2. 依赖模块缺失:查看日志确认缺失的模块
  3. 配置文件损坏:备份后尝试重置配置
  4. 端口冲突:检查是否有其他防火墙程序在运行
  5. SELinux干扰:临时设置为permissive模式测试

记住,遇到问题时不要慌,journalctl永远是你最好的朋友。希望这篇文章能帮你少走些弯路。如果你们还遇到过其他奇葩的防火墙问题,欢迎在评论区分享你的故事!

评论

  • 遇到过一模一样的问题,内核升级真是太容易出幺蛾子了,感谢分享!