从模拟故障中学习!访问日志分析和 Linux 磁盘空间调查命令

介绍

很高兴认识你!我是Ebi🦐,一名2026年毕业的基础设施工程师!

作为基础设施工程师实践培训的一部分,我们进行了一次模拟故障培训演练,由资深员工设置“模拟故障(服务器攻击)”供新员工处理。

这次,我们将对实际发生在我们服务器上的两次模拟故障进行技术解释,以及我们如何调查和确定故障原因,首先从集成监控工具“Zabbix”的警报开始👓!

当前服务器配置

该项目的服务器配置如下:

这次的问题影响了网络服务器一台

角色 单位数量 中间件 磁盘容量
网络服务器 2个单位 阿帕奇 20 GB 
数据库服务器 1个单位 MySQL 10 GB

服务器遭遇两次“伪故障”。

在本次训练中,发起了以下两次攻击💀

  1. 暴力目录抓取 是一种网络攻击,它试图通过暴力破解非公开文件和目录的路径来从网络服务器提取信息。在本例中,它导致网络服务器的 CPU 负载急剧上升。
  2. 磁盘空间耗尽(大量生成虚假文件):这种攻击涉及在服务器的各个目录中人为地生成大量虚假文件,耗尽可用磁盘空间,导致系统故障。
    这些都是在实际运行和维护中极有可能遇到的实用攻击!

Zabbix,一款用于检测异常情况的监控工具。

Zabbix是什么?

Zabbix 是全球领先的开源 (OSS) 集成监控软件,可全天候,自动进行故障检测和警报通知。

参考资料:Zabbix 官方网站(https://www.zabbix.com/jp

【主要特点】

  • 存活率监控和资源监控:这包括通过 Ping 检查响应时间、测量 CPU 使用率、内存使用率、剩余磁盘空间等。
  • 故障检测:当预配置的“阈值”(例如本例中的 CPU 负载“5”或磁盘使用率“80%)超过时,系统会自动检测异常情况。
  • 警报通知:当出现问题时,负责人将立即通过电子邮件或聊天工具(Chatwork、 Slack 等)收到通知。
  • 可视化(图表):收集到的数据可以在浏览器上实时绘制成图表,并在仪表板上集中管理。

【优点和缺点】

  • 优点:完全免费使用(开源),同时提供与商业工具相媲美的高级监控和可扩展性。
  • 缺点:需要从头开始构建系统,以及与 Datadog 等 SaaS 解决方案相比,其配置过于灵活且图形用户界面独特。掌握其独特概念的学习曲线陡峭,阈值调优必须完全手动完成,导致运维工作量增加……💦

以下链接提供了更详细的解释,请点击查看!

参考资料:什么是 Zabbix?监控的基本概念和实施的好处(https://qiita.com/minesyouto8833/items/68f2c39eafc8a8bd2f47

此警报通知

在这种情况下,是集成监控工具“Zabbix”迅速检测到了这些异常情况并通知了我们。故障发生时,我们收到了来自 Zabbix 的以下警报通知:

① Web 服务器警报(CPU 负载过高): 问题:

  • 当前值: 24.185 (严重性:警告)

② 跳转服务器警报(磁盘压力): 问题:

  • 当前值: 82.09% (严重程度:警告)

命令日志解释用于识别和解决攻击方法。

接下来,我们将解释我们实际用来识别原因的命令以及我们是如何解读日志的

 通过“分析访问日志”来发现攻击痕迹

 要找出 Web 服务器 CPU 负载突然激增的原因,关键在于交叉检查访问日志中的三项内容:“高流量访问 IP”、“请求路径”和“HTTP 状态码”。这是因为外部 Web 攻击总会在 Web 服务器的访问日志中留下痕迹,因此当您注意到流量异常激增时,可以通过查看原始日志数据来识别攻击方法!

这次使用的命令grep 命令awk 命令

grep 命令是一个强大的 Linux 命令,它可以从文件或命令的输出中搜索并提取与指定字符串或正则表达式匹配的行。

awk 命令是一个文本处理命令,它逐行读取文本数据和日志文件,高效地提取符合指定条件的行,并逐列(字段)处理和聚合数据。

通过结合这两个功能,我们实现了仅显示警报发生时的访问日志以及您想要查看的信息。

以下是它的使用示例!它用于显示警报发生时,相应 IP 地址每分钟的访问次数!

# 从日志中提取“警报发生时间”,并按每个时间段的发生次数降序排列
$ grep -E “警报发生时间” /var/log/httpd/xxxxxx | awk '{print $1}' | sort | uniq -c | sort -nr

以下链接提供了更详细、更易懂的解释,请点击查看!

参考资料:如何使用 grep 和 awk 命令从日志文件中检索所需信息!(https://cgs580.hatenablog.com/entry/2023/12/03/155302

以下是我们实际查看的访问日志中的一段摘录。

▼ 警报发生时,相关 IP 地址每分钟的访问次数(※最左侧的数字为访问次数) 383 54.250.xx.xx ★日本 292 47.128.xx.xx ★新加坡 ▼ 相关 IP 地址访问的路径及请求状态(※最左侧的数字为访问次数) 10 54.250.xx.xx/swagger-ui.html 404 9 54.250.xx.xx/www.zip 404 8 54.74.xx.xx/.env.production 404

在短时间内,我们检测 到来自日本、新加坡、美国和其他地区的多个 IP 地址对/swagger-ui.html/.env.production等重要配置文件发起了大量访问尝试。所幸所有请求状态均为“404(未找到) ”,表明 Web 服务器正确返回了文件不存在的信息。因此,我们确定此次攻击目前未造成数据泄露。此外,由于来自攻击 IP 的访问已停止,CPU 负载已恢复正常水平。

因此,当CPU负载过重时,仅仅重启服务器是不够的。分析访问日志以确定“攻击者(IP地址)”、“攻击者位置(路径)”以及“攻​​击者行为(例如,404错误)”对于准确了解网络攻击的情况至关重要!

 Linux磁盘空间检查命令,用于查找内部异常

要解决磁盘空间不足的警报,建议先使用`df` 命令获取整体目录结构, 然后再使用`du``ls`命令缩小目录层级范围。 仅靠 Zabbix 警报无法确定“哪些文件占用空间最多”,因此需要使用操作系统级别的(Linux)命令来识别异常大的目录和隐藏文件。

实际调查过程如下:

1. 检查文件系统类型和磁盘使用情况
$ df -hT
# → 确认根目录 (/) 使用了 82% 的磁盘空间

# 2. 排除其他文件系统,并按大小降序排列根目录
$ du -hx --max-depth=1 / | sort -hr
# → 识别出 /root 和其他目录异常大

# 3. 进一步按大小降序排列目标目录 (/root)
$ du -hx --max-depth=1 /root | sort -hr

# 4. 识别所有文件,包括隐藏文件,并显示它们的大小
$ du -hax --max-depth=1 /root | sort -hr

# 5. 使用 ls 命令查看详细信息
$ ls -laH /root

# 6. 显示“最后修改日期”以及文件大小,以确定虚拟文件的创建时间
$ du -hax --time --max-depth=1 /root | sort -hr

这项详细调查发现了大约 14GB的可疑虚假文件!👀!

  • /opt/dummy_data.bin (3.5G)
  • /home/.dummy_backup.tar (3.5G)
  • /var/log/dummy_app.log.bak (4.0G)
  • /tmp/.dummy_cache.dat (3.5G)

这台服务器只有20GB的存储空间,所以几乎已经满了……(;'∀')

经检查,我们发现所有文件均为空(包含零值),原来这些文件是一位资深同事为了模拟故障而植入的。我们立即删除了这些文件,并将磁盘空间恢复到原来的安全状态。

让我们来详细了解一下 `du` 命令吧!

`du`(磁盘使用情况)命令用于类 UNIX 操作系统(如 Linux 和 macOS)中,以检查文件和目录占用的磁盘空间。

以下du(磁盘使用情况)命令的主要选项列表

我整理了一份我经常使用的东西的清单!

 最常用的基本选项

选项 解释
-h--human-readable 容量 K(千)、 M(兆)和 G人类可读单位显示
-s--summarize 此窗口仅显示指定目录的总大小(总和) ,不显示目录结构中的单个文件。
-a--all 它不仅显示目录的大小,还显示单个文件的大小。

 完成培训后

通过这次模拟故障响应,我亲身体验到了“日志分析技能”和“操作系统内部调查技能(如何使用 Linux 命令)”对于基础设施工程师的重要性。

当出现问题时,很容易一时慌乱,但通过使用 Zabbix 发出的警报,一步一步地逻辑地找出原因,就可以安全可靠地恢复系统!

基于我在这次培训中获得的经验和技能,我将继续致力于日常工作,目标是成为一名可靠的工程师,能够冷静地处理将来可能出现的任何问题!

感谢阅读到最后 <(_ _)>

如果您觉得这篇文章对您有帮助,请点个“赞”!
2
加载中...
2票,平均分:1.00/12
8
X Facebook Hatena书签 口袋

这篇文章的作者

关于作者

我是Ebi,2026届毕业生。
我喜欢炸虾。