在 Graylog 中分析日志

NmapNmapBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在本次实验中,你将学习如何使用 Graylog(一个用于网络安全监控的开源日志管理平台)来分析日志。你将通过实际练习,练习使用 Docker Compose 搭建 Graylog、配置日志输入并进行日志分析。

本实验将指导你部署 Graylog 以及 MongoDB 和 Elasticsearch,然后使用其 Web 界面收集和查询日志数据。这些实践任务将帮助你掌握集中式日志管理和安全监控的基本技能。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL nmap(("Nmap")) -.-> nmap/NmapGroup(["Nmap"]) wireshark(("Wireshark")) -.-> wireshark/WiresharkGroup(["Wireshark"]) nmap/NmapGroup -.-> nmap/udp_scanning("UDP Scanning Techniques") wireshark/WiresharkGroup -.-> wireshark/packet_capture("Packet Capture") subgraph Lab Skills nmap/udp_scanning -.-> lab-549925{{"在 Graylog 中分析日志"}} wireshark/packet_capture -.-> lab-549925{{"在 Graylog 中分析日志"}} end

安装 Graylog

在这一步中,你将在你的 LabEx 虚拟机环境中安装 Graylog,这是一个强大的开源日志管理平台。Graylog 通过从各种来源收集日志,并提供搜索和可视化功能,帮助集中管理和分析日志数据,以进行安全监控和故障排除。

由于我们使用 Docker 容器,我们将使用 Docker Compose 来部署 Graylog,以便于设置。Docker Compose 允许我们使用单个配置文件定义和运行多容器应用程序。这种方法简化了安装过程,并确保所有必需的组件能够正常协同工作。请仔细按照以下步骤操作:

  1. 首先,确保你位于正确的目录。project 目录是我们组织 Graylog 安装文件的地方:
cd ~/project
  1. 为 Graylog 配置创建一个新的专用目录。这可以使我们的安装文件保持分离和有序:
mkdir graylog && cd graylog
  1. 使用 nano 创建一个包含以下内容的 docker-compose.yml 文件。此文件定义了 Graylog 运行所需的所有服务:
nano docker-compose.yml
  1. 粘贴此配置(按 Ctrl+O 保存,然后按 Ctrl+X 退出)。该配置包含三个主要服务:
    • MongoDB 用于存储配置数据
    • Elasticsearch 用于索引和搜索日志
    • Graylog 本身作为 Web 界面和处理引擎
version: "3"
services:
  mongodb:
    image: mongo:4.2
    volumes:
      - mongo_data:/data/db
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch-oss:7.10.2
    volumes:
      - es_data:/usr/share/elasticsearch/data
    environment:
      - "discovery.type=single-node"
      - "bootstrap.memory_lock=true"
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
  graylog:
    image: graylog/graylog:4.3
    volumes:
      - graylog_data:/usr/share/graylog/data
    environment:
      - GRAYLOG_PASSWORD_SECRET=somepasswordpepper
      - GRAYLOG_ROOT_PASSWORD_SHA2=8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918
      - GRAYLOG_HTTP_EXTERNAL_URI=http://127.0.0.1:9000/
    depends_on:
      - mongodb
      - elasticsearch
    ports:
      - "9000:9000"
      - "1514:1514"
      - "1514:1514/udp"
      - "12201:12201"
      - "12201:12201/udp"
volumes:
  mongo_data:
  es_data:
  graylog_data:
  1. 使用 Docker Compose 启动 Graylog 栈。-d 标志表示在后台运行容器:
docker-compose up -d
  1. 验证容器是否正常运行。此命令显示我们的 docker-compose 文件中定义的所有服务的状态:
docker-compose ps

你应该看到三个服务(mongodb、elasticsearch 和 graylog)的状态为 "Up"。Graylog Web 界面将在 http://127.0.0.1:9000 上可用(用户名:admin,密码:admin)。至此,Graylog 的基本安装完成,我们现在可以在接下来的步骤中配置日志输入了。

设置日志输入

在这一步中,你将在 Graylog 中配置一个日志输入,以接收系统日志(syslog)消息。你可以将其视为创建一个“监听端口”,Graylog 可以通过这个端口从各种设备和应用程序收集日志数据。这对于安全监控至关重要,因为日志包含了有关系统活动和潜在威胁的宝贵信息。

  1. 首先,让我们验证一下在上一步中安装的 Graylog 是否正常运行。运行以下命令来检查容器的状态:
cd ~/project/graylog
docker-compose ps
  1. 打开浏览器,访问 http://127.0.0.1:9000,进入 Graylog 的 Web 界面。使用以下凭证登录:

    • 用户名:admin
    • 密码:admin
  2. 在 Graylog 的 Web 界面中,我们将创建一个新的输入源:

    • 点击顶部菜单中的“System”(系统)——这里是管理 Graylog 核心功能的地方。
    • 从下拉菜单中选择“Inputs”(输入)——输入是 Graylog 接收日志数据的方式。
    • 在“Select input”(选择输入)下,选择“Syslog UDP”(UDP 系统日志)——UDP 在日志收集方面比 TCP 更快。
    • 点击“Launch new input”(启动新输入)开始配置。
  3. 现在,使用以下特定设置配置输入:

    • 节点:选择你的 Graylog 服务器(这应该是唯一可用的选项)。
    • 标题:“Syslog UDP Input”(系统日志 UDP 输入,给它一个描述性的名称)。
    • 绑定地址:0.0.0.0(表示监听所有网络接口)。
    • 端口:1514(标准系统日志端口的替代端口)。
    • 点击“Save”(保存)以激活输入。
  4. 保存后,验证输入是否正常工作:

    • 在新输入旁边寻找绿色的“Running”(运行中)状态——这意味着它已激活。
    • “Local inputs”(本地输入)部分现在应该显示“1 input running”(1 个输入正在运行)——确认设置成功。
  5. 让我们通过发送一条示例日志消息来测试新输入。在终端中运行以下命令:

echo "<14>$(date +'%b %d %H:%M:%S') localhost labex: Test syslog message" | nc -w1 -u 127.0.0.1 1514

此命令创建一条优先级为 14(信息级别)的测试日志消息,并使用 netcat(nc)将其发送到 Graylog。消息中包含当前的日期和时间,并将源标识为“localhost”。

现在,你已经成功设置了 Graylog 以接收系统日志消息。在接下来的步骤中,我们将探索如何发送更复杂的日志,并通过搜索这些日志来查找重要的安全信息。

发送示例日志

在这一步中,你将通过之前配置的系统日志(syslog)输入,生成并向 Graylog 发送示例日志消息。这个实践练习有助于在分析实际数据之前,验证你的日志记录管道是否正常工作。我们将创建模拟不同严重级别和应用程序类型的测试日志,这对于理解 Graylog 如何处理和分类日志条目至关重要。

  1. 首先,确保你的 Graylog 容器正在运行。此命令用于检查 Docker 容器的状态——如果一切正常,它们应该显示为“Up”状态:
cd ~/project/graylog
docker-compose ps
  1. 我们将创建一个简单的 bash 脚本,用于生成示例日志。该脚本将生成包含时间戳、严重级别和应用程序名称的结构化日志消息。在你的项目目录中创建一个新文件:
nano ~/project/generate_logs.sh
  1. 将以下内容添加到文件中。这个脚本有几个重要功能:
    • 生成 10 条具有随机严重级别(0 - 7)的日志消息
    • 包含符合系统日志格式的正确时间戳
    • 使用 nc 命令通过 UDP 将日志发送到端口 1514
    • 在每条消息之间添加 1 秒的延迟,以便更好地可视化:
#!/bin/bash
for i in {1..10}; do
  severity=$(((RANDOM % 8)))
  timestamp=$(date +'%b %d %H:%M:%S')
  echo "<$((severity + 8))>$timestamp localhost sample_app[$i]: Sample log message $i with severity $severity" | nc -w1 -u 127.0.0.1 1514
  sleep 1
done
  1. 使脚本可执行,这样你就可以直接运行它。chmod 命令用于更改文件权限:
chmod +x ~/project/generate_logs.sh
  1. 执行脚本,将示例日志发送到 Graylog。你在终端中不会看到直接输出,因为日志正在被发送到 Graylog 的系统日志输入:
~/project/generate_logs.sh
  1. 现在,让我们验证日志是否已到达 Graylog。在 Web 界面中按照以下步骤操作:

    • 打开浏览器,访问 http://127.0.0.1:9000
    • 点击顶部菜单中的“Search”(搜索),查看传入的消息
    • 你的示例日志应该会在几秒钟内显示出来
    • 尝试搜索“sample_app”,以过滤并仅查看你的测试日志
  2. (可选)为了进行更全面的测试,你可以发送额外的日志消息,模拟常见的服务器应用程序。以下示例展示了 Graylog 可以处理的不同日志格式:

## Apache 风格的 Web 服务器日志
echo '<13>$(date +"%b %d %H:%M:%S") localhost apache: 127.0.0.1 - - [$(date +"%d/%b/%Y:%H:%M:%S %z")] "GET / HTTP/1.1" 200 45' | nc -w1 -u 127.0.0.1 1514

## SSH 登录尝试(常见的安全事件)
echo '<12>$(date +"%b %d %H:%M:%S") localhost sshd[1234]: Failed password for root from 192.168.1.100 port 22 ssh2' | nc -w1 -u 127.0.0.1 1514

查询日志数据

在这一步中,我们将探索如何使用 Graylog 的查询语言在其中搜索和分析日志数据。Graylog 的搜索功能可帮助你在大量数据中快速找到相关日志。我们将使用你之前发送的示例日志来练习这些技巧。

  1. 首先,访问 http://127.0.0.1:9000 进入 Graylog 的 Web 界面(用户名:admin,密码:admin)。这里是在 Graylog 中进行所有日志分析的地方。

  2. 基本搜索操作:

    • 点击顶部菜单中的“Search”(搜索),进入搜索界面。
    • 在搜索栏中输入 source:localhost,查看来自我们测试源的所有日志。这展示了如何按日志的源字段进行过滤。
    • 尝试以下基本查询,以了解不同的搜索模式:
      message:"Sample log message"  ## 查找包含确切短语的日志
      severity:3                   ## 按严重级别 3 过滤
      source:localhost AND severity:[2 TO 4]  ## 组合条件
  3. 时间范围过滤:

    • 点击时间范围选择器(默认是“Last 5 minutes”,即过去 5 分钟)。日志具有时间敏感性,因此这有助于聚焦于相关的时间段。
    • 切换到“Last 15 minutes”(过去 15 分钟),查看你所有的测试日志,因为它们是最近发送的。
    • 若需要精确的时间窗口,可以尝试“Absolute”(绝对)时间范围,以指定确切的开始/结束时间。
  4. 字段分析:

    • 点击任何一条日志消息,查看其字段。每条日志包含多个具有不同信息的字段。
    • 注意自动提取的字段,如 sourceseverity 等。这些是 Graylog 处理日志时创建的。
    • 点击“Quick values”(快速值)标签,查看值的分布情况——这显示了哪些值在你的日志中出现得最频繁。
  5. 保存搜索:

    • 运行一个有用的查询后,点击“Save search”(保存搜索)。当你以后需要重复使用相同的搜索时,这很有帮助。
    • 将其命名为“Sample Log Analysis”(示例日志分析),以便于识别。
    • 它将出现在你的“Saved searches”(已保存的搜索)部分,供你日后访问。
  6. 创建搜索查询快捷方式:

    • 点击“Search”(搜索)→“Edit search shortcuts”(编辑搜索快捷方式)。当你频繁使用某些过滤器时,快捷方式可以节省时间。
    • 添加一个名为“High Severity”(高严重级别)的新快捷方式,查询语句为 severity:[4 TO 7]
    • 现在,你可以从搜索下拉菜单中快速访问这个过滤后的视图。
  7. (可选)尝试以下高级查询,探索更复杂的搜索模式:

    _exists_:severity AND severity:>3  ## 具有严重级别字段且值大于 3 的日志
    message:/(sample|test)/i           ## 正则表达式搜索(不区分大小写)
    NOT severity:5                     ## 排除严重级别为 5 的日志

创建仪表盘

在最后这一步,你将创建一个 Graylog 仪表盘,以可视化并分析你收集到的日志数据。仪表盘是强大的工具,能帮助安全分析师一眼了解系统活动、识别模式,并快速发现潜在的安全问题。

让我们先访问 Graylog 的 Web 界面,在那里创建我们的仪表盘:

  1. 访问 http://127.0.0.1:9000 进入 Graylog 的 Web 界面(用户名:admin,密码:admin)。

  2. 创建一个新的仪表盘:

    • 点击顶部菜单中的“Dashboards”(仪表盘)——这里是管理你所有仪表盘的地方。
    • 点击“Create dashboard”(创建仪表盘)——我们要全新开始创建一个可视化界面。
    • 将其命名为“Security Monitoring Dashboard”(安全监控仪表盘)——选择一个能反映其用途的描述性名称。
    • 点击“Create”(创建)——这将初始化一个空的仪表盘。
  3. 向仪表盘添加小部件(widget)。小部件是显示特定数据可视化效果的独立组件:

    a. 消息计数图表(显示一段时间内传入的日志数量):

    • 点击“Add widget”(添加小部件)→“Message Count”(消息计数)。
    • 进行如下配置:
      • 标题:“Log Volume”(日志量)——为小部件命名,方便参考。
      • 时间范围:“Last 15 minutes”(过去 15 分钟)——显示近期活动。
      • 时间间隔:“Minute”(分钟)——按分钟分组数据,以便清晰呈现趋势。
    • 点击“Save”(保存)。

    b. 快速值(显示字段中最常见的值):

    • 点击“Add widget”(添加小部件)→“Quick Values”(快速值)。
    • 进行如下配置:
      • 标题:“Top Sources”(主要来源)——显示哪些系统正在生成日志。
      • 字段:“source”(来源)——包含日志来源信息的字段。
      • 数据显示方式:“Pie chart”(饼图)——清晰地可视化比例。
    • 点击“Save”(保存)。

    c. 字段统计(汇总数值数据):

    • 点击“Add widget”(添加小部件)→“Field Statistics”(字段统计)。
    • 进行如下配置:
      • 标题:“Severity Levels”(严重级别)——监控日志事件的严重程度。
      • 字段:“severity”(严重级别)——包含严重程度评级的字段。
      • 数据显示方式:“Bar chart”(柱状图)——并排比较数值。
    • 点击“Save”(保存)。
  4. 调整仪表盘布局以实现最佳可视性:

    • 通过拖放小部件来进行组织——将相关的小部件放在彼此附近。
    • 拖动小部件的边缘来调整大小——将重要的可视化部分放大。
    • 完成后点击“Done editing”(完成编辑)——锁定你的布局。
  5. 保存你的仪表盘:

    • 点击右上角的“Save dashboard”(保存仪表盘)——保存你的工作。
    • 添加描述:“Dashboard for monitoring security logs”(用于监控安全日志的仪表盘)——解释其用途。
    • 点击“Save”(保存)。
  6. (可选)为方便起见,将其设为默认仪表盘:

    • 点击仪表盘名称旁边的星形图标。
    • 这样,登录时它将成为你的默认视图,为你在日常检查中节省时间。

总结

在本次实验中,你学习了如何使用 Docker Compose 部署 Graylog,配置了 MongoDB 和 Elasticsearch 等重要服务,并设置了持久化存储。你成功启动了整个服务栈,访问了 Web 界面,并验证了容器的功能,从而搭建起一个集中式日志平台。

本实验还引导你完成了日志输入的配置,使用示例数据进行了测试,并利用 Graylog 的查询功能进行日志分析。你还创建了一个可定制的仪表盘,以可视化日志洞察,展示了 Graylog 在监控和故障排除方面的实际应用。