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

本文介绍如何使用通过 AMA 的 Syslog通过 AMA 的通用事件格式 (CEF) 连接器快速筛选和引入 Syslog 消息,包括来自 Linux 计算机、网络和安全设备及装置的通用事件格式 (CEF) 消息。 若要详细了解这些数据连接器,请参阅适用于 Microsoft Sentinel 的 Syslog via AMA 和 Common Event Format (CEF) via AMA 连接器

先决条件

在开始之前,你必须配置资源以及本部分所述的相应权限。

Microsoft Sentinel 先决条件

  • 必须启用相应的 Microsoft Sentinel 解决方案 - Syslog 和/或通用事件格式. 有关更多信息,请参阅发现和管理 Microsoft Sentinel 的现成内容

  • 你的 Azure 帐户必须具有以下 Azure 基于角色的访问控制 (Azure RBAC) 角色:

    内置角色 范围 原因
    - 虚拟机参与者
    - 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 守护程序。

  • 日志源(安全设备)必须配置为将其日志消息发送到日志转发器的 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 中进行通信:

设置数据连接器

选择相应的选项卡以查看有关 syslog 或 CEF 的说明。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    屏幕截图显示“通过 AMA 的 CEF 连接器”页。

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

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

    屏幕截图显示“基本信息”选项卡中的 DCR 详细信息。

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

定义资源 (VM)

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

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

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

    显示设置 DCR 时如何选择资源的屏幕截图。

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

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

注意

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

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

    显示设置 DCR 时如何选择日志级别的屏幕截图。

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

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

    屏幕截图显示如何查看 DCR 的配置并创建它。

  • 连接器将在创建 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 收集器:”下显示的命令行

    连接器页上命令行的屏幕截图。

    也可以从此处复制:

    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