你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用 Azure Monitor 代理将 Syslog 和 CEF 消息引入 Microsoft Sentinel

本文介绍如何使用通过 AMA 的 Syslog通过 AMA 的通用事件格式 (CEF) 连接器快速筛选和引入 Syslog 消息,包括来自 Linux 计算机、网络和安全设备及装置的通用事件格式 (CEF) 消息。

这些连接器会在要从中收集 Syslog 和/或 CEF 消息的任何 Linux 计算机上安装 Azure Monitor 代理 (AMA)。 此计算机可以是消息的发起方,也可以是从其他计算机(例如网络或安全设备及装置)收集消息的转发器。 连接器根据定义的数据收集规则 (DCR) 发送代理指令。 DCR 指定要监视的系统以及要收集的日志或消息类型,并定义在引入日志之前要应用于消息的筛选器,以提高性能并实现更高效的查询和分析。

重要

2023 年 2 月 28 日,我们引入了对 CommonSecurityLog 表架构的更改。 根据这些更改,你可能需要查看并更新自定义查询。 有关更多详细信息,请参阅此博客文章中的建议操作部分。 现成内容(检测、搜寻查询、工作簿、分析程序等)已由 Microsoft Sentinel 更新。

概述

Syslog 和 CEF 是记录不同设备和应用程序中的数据的两种常见格式。 它们可帮助系统管理员和安全分析师监视和排查网络问题,并确定潜在的威胁或事件。

什么是 Syslog?

Syslog 是一种标准协议,用于通过网络在不同设备或应用程序之间发送和接收消息。 它最初是为 Unix 系统开发的,但它现在受到各种平台和供应商的广泛支持。 Syslog 消息具有预定义的结构,其中包含优先级、时间戳、主机名、应用程序名称、进程 ID 和消息文本。 可以根据配置和安全要求,通过 UDP、TCP 或 TLS 来发送 Syslog 消息。

什么是通用事件格式 (CEF)?

CEF 或通用事件格式是一种非特定于供应商的格式,用于记录来自网络和安全设备及装置的数据,例如防火墙、路由器、检测和响应解决方案、入侵检测系统,以及其他类型的系统(如 Web 服务器)。 Syslog 的扩展,它专为安全信息和事件管理 (SIEM) 解决方案开发。 CEF 消息具有一个标准标头,其中包含设备供应商、设备产品、设备版本、事件类、事件严重性和事件 ID 等信息。 CEF 消息还具有可变数量的扩展,这些扩展提供了有关事件的其他详细信息,例如源 IP 地址和目标 IP 地址、用户名、文件名或已执行的操作。

Microsoft Sentinel 如何使用 Azure Monitor 代理收集 Syslog 和 CEF 消息

下图演示了使用通过 AMA 的 Syslog通过 AMA 的通用事件格式 (CEF) 连接器在 Microsoft Sentinel 中收集 Syslog 和 CEF 消息的体系结构。

此图显示了从安装了 Azure Monitor 代理 (AMA) 的单个 Linux 虚拟机收集的 Syslog 消息。

Diagram of Syslog collection from single source.

使用 Azure Monitor 代理的数据引入过程使用以下组件和数据流:

  • 日志源:这些是在环境中生成 Syslog 消息的各种 Linux VM。 这些消息由本地 Syslog 守护程序通过 TCP 或 UDP 端口 514 进行收集(或者根据你的偏好通过其他端口进行收集)。

  • 本地 Syslog 守护程序rsyslogsyslog-ng)通过 TCP 或 UDP 端口 514 收集日志消息(或者根据你的偏好通过其他端口进行收集)。 然后,守护程序将这些日志发送到 Azure Monitor 代理(请参阅下方注释)。

  • 通过按照以下说明设置数据连接器,在要从中收集 Syslog 消息的每个 Linux 虚拟机上安装该 Azure Monitor 代理。 代理分析日志,然后将其发送到 Microsoft Sentinel (Log Analytics) 工作区

  • Microsoft Sentinel (Log Analytics) 工作区:此处发送的 Syslog 消息最终出现在 Syslog 表中,你可以在该表中查询日志并对日志执行分析以检测和响应安全威胁。

注意

  • Azure Monitor 代理支持 Syslog RFC 3164 和 5424。

  • 如果要使用 514 以外的端口来接收 Syslog/CEF 消息,请确保 Syslog 守护程序上的端口配置与生成消息的应用程序的端口配置匹配。

  • Syslog 守护程序以两种不同的方式将日志发送到 Azure Monitor 代理,具体取决于 AMA 版本:

    • AMA 版本 1.28.11 及更高版本通过 TCP 端口 28330 接收日志
    • 更低版本的 AMA 通过 Unix 域套接字接收日志。

设置数据连接器

设置“通过 AMA 的 Syslog”连接器

“通过 AMA 的 Syslog”连接器的设置过程分为两个部分:

  1. 安装 Azure Monitor 代理并创建数据收集规则 (DCR)

  2. 如果要使用日志转发器从其他计算机收集日志,请在日志转发器上运行“安装”脚本,以将 Syslog 守护程序配置为侦听来自其他计算机的消息,并打开所需的本地端口。

先决条件

  • 必须启用相应的 Microsoft Sentinel 解决方案 - Syslog 和/或通用事件格式.

  • Azure 帐户必须具有以下角色/权限:

    内置角色 范围 原因
    - 虚拟机参与者
    - Azure Connected Machine
       资源管理员
  • 虚拟机
  • 虚拟机规模集
  • 已启用 Azure Arc 的服务器
  • 部署代理
    包含以下操作的任何角色:
    Microsoft.Resources/deployments/*
  • 订阅
  • 资源组
  • 现有数据收集规则
  • 部署 Azure 资源管理器模板
    监视参与者
  • 订阅
  • 资源组
  • 现有数据收集规则
  • 创建或编辑数据收集规则

日志转发器先决条件

如果要从日志转发器收集消息,则以下附加先决条件适用:

  • 必须具有指定的 Linux VM(日志转发器)才能收集日志

  • 如果日志转发器不是 Azure 虚拟机,则必须在其上安装 Azure Arc Connected Machine 代理

  • 必须在 Linux 日志转发器 VM 上安装 Python 2.7 或 3。 使用 python --versionpython3 --version 命令进行检查。 如果使用 Python 3,请确保将其设置为计算机上的默认命令,或者使用“python3”命令而不是“python”命令运行下面的脚本。

  • 日志转发器必须启用 syslog-ngrsyslog 守护程序。

  • 有关日志转发器的空间要求,请参阅 Azure Monitor 代理性能基准。 你还可以查看此博客文章,其中包括可缩放引入的设计

  • 日志源(安全设备)必须配置为将其日志消息发送到日志转发器的 Syslog 守护程序,而不是发送到其本地 Syslog 守护程序。

避免数据引入重复

将相同的设备用于 Syslog 和 CEF 消息可能导致 CommonSecurityLog 和 Syslog 表之间出现数据引入重复。

要避免这种情况,请使用以下方法之一:

  • 如果源设备启用了目标设备的配置:在以 CEF 格式将日志发送到日志转发器的每台源计算机上,编辑 Syslog 配置文件来移除用于发送 CEF 消息的设备。 这样一来,使用 CEF 发送的设备就不会也使用 Syslog 发送。 请确保在后续步骤中配置的每个 DCR 分别使用 CEF 或 Syslog 的相关设备。

    若要查看如何排列 DCR 以从同一代理引入 Syslog 和 CEF 消息的示例,请参阅本文后面的同一 DCR 中的 Syslog 和 CEF 流

  • 如果不适合更改源设备的设施:使用引入时间转换从 Syslog 流中筛选出 CEF 消息来避免重复,如下面的查询示例所示。 数据将从收集器计算机发送两次到工作区。

    source |
    where ProcessName !contains "CEF"
    

日志转发器安全注意事项

确保根据组织的安全策略配置计算机的安全性。 例如,你可以根据企业网络安全策略配置网络,并根据自己的要求更改守护程序中的端口和协议。 为了改进计算机安全配置,请在 Azure 中保护 VM,或查看这些网络安全最佳做法

如果设备通过 TLS 发送 Syslog 和 CEF 日志(例如由于日志转发器位于云中),则需要配置 Syslog 守护程序(rsyslogsyslog-ng)以在 TLS 中进行通信:

安装 AMA 并创建数据收集规则 (DCR)

可以通过以下两种方式之一执行此步骤:

  • Microsoft Sentinel 门户中部署和配置通过 AMA 的 Syslog 数据连接器。 使用此设置可以创建、管理和删除每个工作区的 DCR。 AMA 将自动安装在连接器配置中选择的 VM 上。
    —或—
  • 将 HTTP 请求发送到日志引入 API。 使用此设置可以创建、管理和删除 DCR。 此选项比门户更灵活。 例如,使用 API 可以按特定日志级别进行筛选,而使用 UI 则只能选择最低日志级别。 缺点是,必须在创建 DCR 之前在日志转发器上手动安装 Azure Monitor 代理。

选择下面的相应选项卡以查看每种方式的说明。

打开连接器页并启动 DCR 向导

  1. 打开 Azure 门户,导航到 Microsoft Sentinel 服务。

  2. 从导航菜单中选择“数据连接器”

  3. 在“搜索”框中键入“Syslog”。 在结果中,选择“通过 AMA 的 Syslog”连接器。

  4. 在详细信息窗格中选择“打开连接器页面”

  5. 在“配置”区域中,选择“+ 创建数据收集规则”

    Screenshot showing the CEF via AMA connector page.

  6. 在“基本信息”选项卡上

    • 键入 DCR 名称。
    • 选择订阅。
    • 选择要定位 DCR 的资源组。

    Screenshot showing the DCR details in the Basic tab.

  7. 选择“下一步: 资源”。

定义资源 (VM)

在“资源”选项卡中,选择要安装 AMA 的计算机,在本例中为日志转发器计算机。 (如果列表中未显示日志转发器,则可能未安装 Azure Connected Machine 代理。)

  1. 使用可用的筛选器或搜索框查找日志转发器 VM。 可以展开列表中的订阅以查看其资源组,并展开资源组以查看其 VM。

  2. 选择要在其中安装 AMA 的日志转发器 VM。 (将鼠标悬停在 VM 名称上方时,旁边会显示复选框。)

    Screenshot showing how to select resources when setting up the DCR.

  3. 查看更改并选择“下一步: 收集>”

选择设施和严重性并创建 DCR

注意

将相同的设备用于 Syslog 和 CEF 消息可能会导致数据引入重复。 了解如何避免数据引入重复

  1. 在“收集”选项卡中,为每个设施选择最低日志级别。 选择日志级别后,Microsoft Sentinel 会收集所选级别和其他更高严重性级别的日志。 例如,如果选择 LOG_ERR,Microsoft Sentinel 会收集 LOG_ERR、LOG_CRIT、LOG_ALERT 和 LOG_EMERG 级别的日志。

    Screenshot showing how to select log levels when setting up the DCR.

  2. 查看所做的选择,然后选择“下一步: 查看 + 创建”

  3. 在“查看 + 创建”选项卡中选择“创建”。

    Screenshot showing how to review the configuration of the DCR and create it.

  • 连接器将在创建 DCR 时选择的计算机上安装 Azure Monitor 代理。

  • 创建 DCR 并安装代理时,你将在 Azure 门户中看到通知。

  • 选择连接器页上的“刷新”以查看列表中显示的 DCR

工具和日志级别部分的示例

查看这些工具和日志级别设置示例。 字段 name 包含筛选器名称。

对于 CEF 消息引入,"streams" 的值应该为 "Microsoft-CommonSecurityLog",而不是 "Microsoft-Syslog"

此示例从 crondaemonlocal0local3uucp 工具收集 WarningErrorCriticalAlertEmergency 日志级别的事件:

    "dataSources": {
      "syslog": [
        {
        "name": "SyslogStream0",
        "streams": [
          "Microsoft-Syslog"
        ],
        "facilityNames": [ 
          "cron",
          "daemon",
          "local0",
          "local3", 
          "uucp"
        ],
        "logLevels": [ 
          "Warning", 
          "Error", 
          "Critical", 
          "Alert", 
          "Emergency"
        ]
      }
    ]
  }
同一 DCR 中的 Syslog 和 CEF 流

此示例演示如何在同一 DCR 中收集 Syslog 和 CEF 消息。

请参阅本文前面的避免数据引入重复,详细了解使用单个代理和 DCR 引入 Syslog 和 CEF 消息时要采取的步骤。

DCR 收集以下对象的 CEF 事件消息:

  • authprivmark 工具,日志级别为 InfoNoticeWarningErrorCriticalAlertEmergency
  • daemon 工具,日志级别为 WarningErrorCriticalAlertEmergency

它收集以下对象的 Syslog 事件消息:

  • kernlocal0local5news 工具,日志级别为 CriticalAlertEmergency
  • mailuucp 工具,日志级别为 Emergency
    "dataSources": {
      "syslog": [
        {
          "name": "CEFStream1",
          "streams": [ 
            "Microsoft-CommonSecurityLog"
          ],
          "facilityNames": [ 
            "authpriv", 
            "mark"
          ],
          "logLevels": [
            "Info",
            "Notice", 
            "Warning", 
            "Error", 
            "Critical", 
            "Alert", 
            "Emergency"
          ]
        },
        {
          "name": "CEFStream2",
          "streams": [ 
            "Microsoft-CommonSecurityLog"
          ],
          "facilityNames": [ 
            "daemon"
          ],
          "logLevels": [ 
            "Warning", 
            "Error", 
            "Critical", 
            "Alert", 
            "Emergency"
          ]
        },
        {
          "name": "SyslogStream3",
          "streams": [ 
            "Microsoft-Syslog"
          ],
          "facilityNames": [ 
            "kern",
            "local0",
            "local5", 
            "news"
          ],
          "logLevels": [ 
            "Critical", 
            "Alert", 
            "Emergency"
          ]
        },
        {
          "name": "SyslogStream4",
          "streams": [ 
            "Microsoft-Syslog"
          ],
          "facilityNames": [ 
            "mail",
            "uucp"
          ],
          "logLevels": [ 
            "Emergency"
          ]
        }
      ]
    }

运行“installation”脚本

“installation”脚本实际上不会安装任何内容,但它会在日志转发器上正确配置 Syslog 守护程序以收集日志。

  1. 在连接器页中,通过选择旁边的“复制”图标来复制“运行以下命令安装并应用 CEF 收集器:”下显示的命令行

    Screenshot of command line on connector page.

    也可以从此处复制:

    sudo wget -O Forwarder_AMA_installer.py https://raw.githubusercontent.com/Azure/Azure-Sentinel/master/DataConnectors/Syslog/Forwarder_AMA_installer.py&&sudo python Forwarder_AMA_installer.py
    
  2. 登录到刚刚安装 AMA 的日志转发器计算机。

  3. 粘贴在上一步中复制的命令以启动 installation 脚本。
    该脚本将 rsyslogsyslog-ng 守护程序配置为使用所需的协议,并重启守护程序。 该脚本打开端口 514 以侦听 UDP 和 TCP 协议中的传入消息。 若要更改此设置,请根据计算机上运行的守护程序类型参考 Syslog 守护程序配置文件:

    • Rsyslog:/etc/rsyslog.conf
    • Syslog-ng:/etc/syslog-ng/syslog-ng.conf

    注意

    为了避免代理在完整磁盘方案中无法正常运行,建议将 syslog-ngrsyslog 配置设置为不存储无用的日志。 完整磁盘方案会干扰已安装的 AMA 正常运行。 详细了解 RSyslogSyslog-ng

测试连接器

  1. 若要验证 Syslog 守护程序是否正在 UDP 端口上运行并且 AMA 是否正在侦听,请运行以下命令:

    netstat -lnptv
    

    应会看到 rsyslogsyslog-ng 守护程序正在侦听端口 514。

  2. 若要捕获从记录器或连接的设备发送的消息,请在后台运行以下命令:

    tcpdump -i any port 514 -A -vv &
    
  3. 完成验证后,建议停止 tcpdump:键入 fg,然后按 Ctrl+C

  4. 若要发送演示消息,请执行以下操作之一:

    • 使用 netcat 实用工具。 在此示例中,该实用工具读取通过 echo 命令发布的数据,数据换行开关已关闭。 然后,该实用工具将数据写入本地主机上的 UDP 端口 514,且不会超时。 若要执行 netcat 实用工具,可能需要安装一个附加的包。

      echo -n "<164>CEF:0|Mock-test|MOCK|common=event-format-test|end|TRAFFIC|1|rt=$common=event-formatted-receive_time" | nc -u -w0 localhost 514
      
    • 使用记录器。 此示例以 CEF RFC 格式通过端口 514 将严重性级别为 Warning 的消息写入本地主机上的 local 4 工具。 使用 -t--rfc3164 标志是为了遵守所需的 RFC 格式。

      logger -p local4.warn -P 514 -n 127.0.0.1 --rfc3164 -t CEF "0|Mock-test|MOCK|common=event-format-test|end|TRAFFIC|1|rt=$common=event-formatted-receive_time"
      
  5. 若要验证是否已正确安装连接器,请使用以下命令之一运行故障排除脚本:

    • 对于 CEF 日志,请运行:

       sudo wget -O Sentinel_AMA_troubleshoot.py https://raw.githubusercontent.com/Azure/Azure-Sentinel/master/DataConnectors/Syslog/Sentinel_AMA_troubleshoot.py&&sudo python Sentinel_AMA_troubleshoot.py --cef
      
    • 对于 Cisco 自适应安全设备 (ASA) 日志,请运行:

      sudo wget -O Sentinel_AMA_troubleshoot.py https://raw.githubusercontent.com/Azure/Azure-Sentinel/master/DataConnectors/Syslog/Sentinel_AMA_troubleshoot.py&&sudo python Sentinel_AMA_troubleshoot.py --asa
      
    • 对于 Cisco Firepower 威胁防御 (FTD) 日志,请运行:

      sudo wget -O Sentinel_AMA_troubleshoot.py https://raw.githubusercontent.com/Azure/Azure-Sentinel/master/DataConnectors/Syslog/Sentinel_AMA_troubleshoot.py&&sudo python Sentinel_AMA_troubleshoot.py --ftd