[已弃用] 排查 CEF 或 Syslog 数据连接器的问题

重要

现在,Microsoft Sentinel 中的“通过 AMA 的通用事件格式 (CEF)”、“通过 AMA 的 Syslog”或“通过 AMA 的自定义日志”数据连接器支持从许多设备收集日志。 如需详细信息,请参阅查找 Microsoft Sentinel 数据连接器

注意

本文中提到了 CentOS,这是一个已达到生命周期结束 (EOL) 状态的 Linux 发行版。 请相应地考虑你的使用和规划。 有关详细信息,请参阅 CentOS 生命周期结束指南

本文介绍用于为 Microsoft Sentinel 验证 CEF 或 Syslog 数据连接器并排查其故障的常见方法。

例如,如果日志消息未显示在 Syslog 或 CommonSecurityLog 表中,则数据源可能没有正确连接。 你的数据未被接收到可能还有其他原因。

连接器部署失败的其他表现包括 security_events.conf 或 security-omsagent.config.conf 文件丢失,或者 rsyslog 服务器没有侦听端口 514

有关更多信息,请参阅使用通用事件格式连接外部解决方案使用 Syslog 从基于 Linux 的源收集数据

如果使用与本文中所述过程不同的方法部署了连接器,并且遇到问题,我们建议你放弃相应部署并重新开始,这一次请按照本文中的说明进行操作。

本文介绍了如何对采用 Log Analytics 代理的 CEF 或 Syslog 连接器进行故障排除。 有关通过 Azure Monitor 代理 (AMA) 引入 CEF 日志的故障排除信息,请查看有关 Common Event Format (CEF) via AMA 连接器的说明。

重要

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

如何使用本文

如果本文中的信息仅与 Syslog 相关,或者仅与 CEF 连接器相关,则会在单独的选项卡中显示。 请确保使用连接器类型所对应的正确选项卡上的说明。

例如,如果要对 CEF 连接器进行故障排除,请从验证 CEF 连接开始。 如果要对 Syslog 连接器进行故障排除,请首先验证数据连接器的先决条件

验证 CEF 连接

部署日志转发器配置安全解决方案以向其发送 CEF 消息后,请使用本部分中的步骤验证安全解决方案与 Microsoft Sentinel 之间的连接性。

此过程仅适用于 CEF 连接,与 Syslog 连接无关。

  1. 确保你已满足以下先决条件:

    • 必须在日志转发器计算机上拥有提升的权限 (sudo)。

    • 必须在日志转发器计算机上安装 python 2.7 或 3 。 使用 python --version 命令进行检查。

    • 在此过程中的某个时间点,你可能需要工作区 ID 和工作区主键。 可以在工作区资源的“代理管理”下找到它们。

  2. 从 Microsoft Sentinel 导航菜单中打开“日志”。 使用 CommonSecurityLog 架构运行一个查询,检查是否可接收来自安全解决方案的日志

    可能需要大约 20 分钟的时间,日志才会开始显示在 Log Analytics 中

  3. 如果查询中未显示任何结果,请验证安全解决方案是否在生成日志消息。 或者,尝试执行一些操作来生成日志消息,并验证消息是否会转发到指定的 Syslog 转发器计算机。

  4. 若要检查安全解决方案、日志转发器和 Microsoft Sentinel 之间的连接,请在日志转发器上运行以下脚本(使用工作区 ID 代替占位符)。 此脚本检查守护程序是否正在侦听正确的端口,转发配置是否正确以及是否有任何内容阻止守护程序与 Log Analytics 代理之间的通信。 它还会发送模拟消息“TestCommonEventFormat”以检查端到端连接。

    sudo wget -O cef_troubleshoot.py https://raw.githubusercontent.com/Azure/Azure-Sentinel/master/DataConnectors/CEF/cef_troubleshoot.py&&sudo python cef_troubleshoot.py [WorkspaceID]
    
    • 你可能会收到一条消息,指示你运行命令以更正与“计算机”字段的映射有关的问题。 有关详细信息,请参阅验证脚本中的说明

    • 你可能会收到一条消息,指示你运行命令以更正与“解析 Cisco ASA 防火墙日志”有关的问题。 有关详细信息,请参阅验证脚本中的说明

CEF 验证脚本说明

以下部分介绍了 rsyslog 守护程序syslog-ng 守护程序的 CEF 验证脚本。

rsyslog 守护程序

对于 rsyslog 守护程序,CEF 验证脚本将运行以下检查:

  1. 检查文件
    /etc/opt/microsoft/omsagent/[WorkspaceID]/conf/omsagent.d/security_events.conf
    是否存在并有效。

  2. 检查文件是否包含以下文本:

    <source>
        type syslog
        port 25226
        bind 127.0.0.1
        protocol_type tcp
        tag oms.security
        format /(?<time>(?:\w+ +){2,3}(?:\d+:){2}\d+|\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.[\w\-\:\+]{3,12}):?\s*(?:(?<host>[^: ]+) ?:?)?\s*(?<ident>.*CEF.+?(?=0\|)|%ASA[0-9\-]{8,10})\s*:?(?<message>0\|.*|.*)/
        <parse>
            message_format auto
        </parse>
    </source>
    
    <filter oms.security.**>
        type filter_syslog_security
    </filter>
    
  3. 使用以下命令检查是否已按预期配置对 Cisco ASA 防火墙事件的解析:

    grep -i "return ident if ident.include?('%ASA')" /opt/microsoft/omsagent/plugin/security_lib.rb
    
    • 如果存在解析方面的问题,脚本将生成一条错误消息,指示你手动运行以下命令(使用工作区 ID 代替占位符)。 该命令可确保实现正确分析,并将重启代理。

      # Cisco ASA parsing fix
      sed -i "s|return '%ASA' if ident.include?('%ASA')|return ident if ident.include?('%ASA')|g" /opt/microsoft/omsagent/plugin/security_lib.rb && sudo /opt/microsoft/omsagent/bin/service_control restart [workspaceID]
      
  4. 使用以下命令检查 syslog 源中的“计算机”字段是否已正确映射到 Log Analytics 代理中:

    grep -i "'Host' => record\['host'\]"  /opt/microsoft/omsagent/plugin/filter_syslog_security.rb
    
    • 如果存在映射方面的问题,脚本将生成一条错误消息,指示你手动运行以下命令(使用工作区 ID 代替占位符)。 该命令可确保实现正确映射,并将重启代理。

      # Computer field mapping fix
      sed -i -e "/'Severity' => tags\[tags.size - 1\]/ a \ \t 'Host' => record['host']" -e "s/'Severity' => tags\[tags.size - 1\]/&,/" /opt/microsoft/omsagent/plugin/filter_syslog_security.rb && sudo /opt/microsoft/omsagent/bin/service_control restart [workspaceID]
      
  5. 检查计算机上是否存在任何可能阻止网络流量的安全增强功能(例如主机防火墙)。

  6. 检查 syslog 守护程序 (rsyslog) 是否已正确配置为将被标识为 CEF 的消息发送到 TCP 端口 25226 上的 Log Analytics 代理:

    配置文件:/etc/rsyslog.d/security-config-omsagent.conf

    if $rawmsg contains "CEF:" or $rawmsg contains "ASA-" then @@127.0.0.1:25226
    
  7. 重启 syslog 守护程序和 Log Analytics 代理:

    service rsyslog restart
    
    /opt/microsoft/omsagent/bin/service_control restart [workspaceID]
    
  8. 检查是否建立了必需的连接:用于接收数据的 tcp 514、用于 syslog 守护程序和 Log Analytics 代理之间的内部通信的 tcp 25226:

    netstat -an | grep 514
    
    netstat -an | grep 25226
    
  9. 检查 syslog 守护程序是否在端口 514 上接收数据,以及代理是否在端口 25226 上接收数据:

    sudo tcpdump -A -ni any port 514 -vv
    
    sudo tcpdump -A -ni any port 25226 -vv
    
  10. 将 MOCK 数据发送到 localhost 上的端口 514。 通过运行以下查询,应在 Microsoft Sentinel 工作区中观察到此数据:

    CommonSecurityLog
    | where DeviceProduct == "MOCK"
    

守护程序

对于 syslog-ng 守护程序,CEF 验证脚本将运行以下检查:

  1. 检查文件
    /etc/opt/microsoft/omsagent/[WorkspaceID]/conf/omsagent.d/security_events.conf
    是否存在并有效。

  2. 检查文件是否包含以下文本:

    <source>
        type syslog
        port 25226
        bind 127.0.0.1
        protocol_type tcp
        tag oms.security
        format /(?<time>(?:\w+ +){2,3}(?:\d+:){2}\d+|\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.[\w\-\:\+]{3,12}):?\s*(?:(?<host>[^: ]+) ?:?)?\s*(?<ident>.*CEF.+?(?=0\|)|%ASA[0-9\-]{8,10})\s*:?(?<message>0\|.*|.*)/
        <parse>
            message_format auto
        </parse>
    </source>
    
    <filter oms.security.**>
        type filter_syslog_security
    </filter>
    
  3. 使用以下命令检查是否已按预期配置对 Cisco ASA 防火墙事件的解析:

    grep -i "return ident if ident.include?('%ASA')" /opt/microsoft/omsagent/plugin/security_lib.rb
    
    • 如果存在解析方面的问题,脚本将生成一条错误消息,指示你手动运行以下命令(使用工作区 ID 代替占位符)。 该命令可确保实现正确分析,并将重启代理。

      # Cisco ASA parsing fix
      sed -i "s|return '%ASA' if ident.include?('%ASA')|return ident if ident.include?('%ASA')|g" /opt/microsoft/omsagent/plugin/security_lib.rb && sudo /opt/microsoft/omsagent/bin/service_control restart [workspaceID]
      
  4. 使用以下命令检查 syslog 源中的“计算机”字段是否已正确映射到 Log Analytics 代理中:

    grep -i "'Host' => record\['host'\]"  /opt/microsoft/omsagent/plugin/filter_syslog_security.rb
    
    • 如果存在映射方面的问题,脚本将生成一条错误消息,指示你手动运行以下命令(使用工作区 ID 代替占位符)。 该命令可确保实现正确映射,并将重启代理。

      # Computer field mapping fix
      sed -i -e "/'Severity' => tags\[tags.size - 1\]/ a \ \t 'Host' => record['host']" -e "s/'Severity' => tags\[tags.size - 1\]/&,/" /opt/microsoft/omsagent/plugin/filter_syslog_security.rb && sudo /opt/microsoft/omsagent/bin/service_control restart [workspaceID]
      
  5. 检查计算机上是否存在任何可能阻止网络流量的安全增强功能(例如主机防火墙)。

  6. 检查 syslog 守护程序 (syslog-ng) 是否已正确配置为将被标识为 CEF(使用正则表达式)的消息发送到 TCP 端口 25226 上的 Log Analytics 代理:

    • 配置文件:/etc/syslog-ng/conf.d/security-config-omsagent.conf

      filter f_oms_filter {match(\"CEF\|ASA\" ) ;};destination oms_destination {tcp(\"127.0.0.1\" port(25226));};
      log {source(s_src);filter(f_oms_filter);destination(oms_destination);};
      
  7. 重启 syslog 守护程序和 Log Analytics 代理:

    service syslog-ng restart
    
    /opt/microsoft/omsagent/bin/service_control restart [workspaceID]
    
  8. 检查是否建立了必需的连接:用于接收数据的 tcp 514、用于 syslog 守护程序和 Log Analytics 代理之间的内部通信的 tcp 25226:

    netstat -an | grep 514
    
    netstat -an | grep 25226
    
  9. 检查 syslog 守护程序是否在端口 514 上接收数据,以及代理是否在端口 25226 上接收数据:

    sudo tcpdump -A -ni any port 514 -vv
    
    sudo tcpdump -A -ni any port 25226 -vv
    
  10. 将 MOCK 数据发送到 localhost 上的端口 514。 通过运行以下查询,应在 Microsoft Sentinel 工作区中观察到此数据:

    CommonSecurityLog
    | where DeviceProduct == "MOCK"
    

验证数据连接器先决条件

使用以下部分检查 CEF 或 Syslog 数据连接器先决条件。

将 Azure 虚拟机用作 CEF 收集器

如果使用 Azure 虚拟机作为 CEF 收集器,请验证以下内容:

  • 在部署通用事件格式数据连接器 Python 脚本之前,请确保虚拟机尚未连接到现有的 Log Analytics 工作区。 可以在 Log Analytics 工作区虚拟机列表中找到此信息,表中将连接到 Syslog 工作区的 VM 列为“已连接”。

  • 确保 Microsoft Sentinel 已连接到正确的 Log Analytics 工作区,并安装了 SecurityInsights 解决方案。

    有关详细信息,请参阅步骤 1:部署日志转发器

  • 请确保计算机的大小正确,至少满足最低要求的先决条件。 有关详细信息,请参阅 CEF 先决条件

本地或非 Azure 虚拟机

如果为数据连接器使用的是本地计算机或非 Azure 虚拟机,请确保已在新安装的受支持的 Linux 操作系统上运行安装脚本:

提示

也可以在 Microsoft Sentinel 的通用事件格式数据连接器页面找到这个脚本。

sudo wget -O cef_installer.py https://raw.githubusercontent.com/Azure/Azure-Sentinel/master/DataConnectors/CEF/cef_installer.py&&sudo python cef_installer.py <WorkspaceId> <Primary Key>

启用 CEF 设施和日志严重性集合

Syslog 服务器(rsyslog 或 syslog-ng)转发相关配置文件中定义的任何数据,这些数据由 Log Analytics 工作区中定义的设置自动填充。

请务必添加想要将其引入 Microsoft Sentinel 的设施和严重性日志级别的相关详细信息。 配置过程可能需要大约 20 分钟的时间。

有关详细信息,请参阅部署脚本解释

例如,对于 rsyslog 服务器,运行以下命令以显示 Syslog 转发的当前设置,并查看对配置文件的任何更改:

cat /etc/rsyslog.d/security-config-omsagent.conf

在这种情况下,对于 rsyslog,应显示类似于以下内容的输出:

if $rawmsg contains "CEF:" or $rawmsg contains "ASA-" then @@127.0.0.1:25226

排查并解决操作系统问题

此部分介绍如何排查并解决自操作系统配置派生出来的问题。

若要排查并解决操作系统问题,请执行以下操作

  1. 如果没有进行过操作,请验证你使用的操作系统和 Python 版本是否受支持。 有关详细信息,请参阅 CEF 先决条件

  2. 如果虚拟机位于 Azure 中,请验证网络安全组 (NSG) 是否允许在端口 514 上建立来自日志客户端 (Sender) 的入站 TCP/UDP 连接。

  3. 验证数据包是否到达 Syslog 收集器。 若要捕获到达 Syslog 收集器的 syslog 数据包,请运行:

    tcpdump -Ani any port 514 and host <ip_address_of_sender> -vv
    
  4. 执行下列操作之一:

    • 如果未看到任何数据包到达,请确认 NSG 安全组权限以及指向 Syslog 收集器的路由路径。

    • 如果看到有数据包到达,请确认它们不会被拒绝。

    如果看到被拒绝的数据包,请确认 IP 表没有阻止连接。

    若要确认数据包不会被拒绝,请运行:

    watch -n 2 -d iptables -nvL
    
  5. 验证 CEF 服务器是否正在处理日志。 运行:

    tail -f /var/log/messages or tail -f /var/log/syslog
    

    任何正在处理的 CEF 日志均以纯文本显示。

  6. 请确认 rsyslog 服务器正在侦听 TCP/UDP 端口 514。 运行:

    netstat -anp | grep syslog
    

    如果有任何 CEF 或 ASA 日志发送到 Syslog 收集器,应会看到 TCP 端口 25226 上已建立的连接。

    例如:

    0 127.0.0.1:36120 127.0.0.1:25226 ESTABLISHED 1055/rsyslogd
    

    如果连接被阻止,可能是与 OMS 代理的 SELinux 连接被阻止,或者是防火墙进程被阻止。 请进一步使用相关说明来确定问题。

SELinux 阻止与 OMS 代理的连接

此过程介绍如何确认 SELinux 当前是否处于 permissive 状态,或是否阻止与 OMS 代理的连接。 当操作系统是 RedHat 或 CentOS 的分发并且同时适用于 CEF 和 Syslog 数据连接器时,此过程是相关的。

注意

Microsoft Sentinel 对 CEF 和 Syslog 的支持仅包括 FIPS 强化。 目前不支持其他强化方法(如 SELinux 或 CIS)。

  1. 运行:

    sestatus
    

    状态将显示为以下其中之一:

    • disabled。 此配置支持连接到 Microsoft Sentinel。
    • permissive。 此配置支持连接到 Microsoft Sentinel。
    • enforced。 不支持此配置,必须禁用状态或将其设置为 permissive
  2. 如果状态当前设置为 enforced,则暂时将其关闭以确认这是否为阻止程序。 运行:

    setenforce 0
    

    注意

    此步骤仅在服务器重新启动之前关闭 SELinux。 修改 SELinux 配置以将其保持关闭状态。

  3. 若要验证更改是否成功,请运行:

    getenforce
    

    应返回 permissive 状态。

重要

重新启动系统时,此设置更新将丢失。 若要将此设置永久更新为 permissive,请修改 /etc/selinux/config 文件,将 SELINUX 值更改为 SELINUX=permissive

有关详细信息,请参阅RedHat 文档

阻止的防火墙策略

此过程介绍如何验证防火墙策略是否阻止从 Rsyslog 守护程序到 OMS 代理的连接,以及根据需要禁用它的方法。 此过程与 CEF 和 Syslog 数据连接器都相关。

  1. 运行以下命令来验证 IP 表中是否有拒绝项,这些拒绝项表示防火墙策略丢弃的流量:

    watch -n 2 -d iptables -nvL
    
  2. 若要使防火墙策略保持启用状态,请创建一个策略规则以允许连接。 根据需要添加规则,以使 TCP/UDP 端口 25226 和 25224 能够通过活动防火墙。

    例如:

    Every 2.0s: iptables -nvL                      rsyslog: Wed Jul  7 15:56:13 2021
    
    Chain INPUT (policy ACCEPT 6185K packets, 2466M bytes)
     pkts bytes target     prot opt in     out     source               destination
    
    
    Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
     pkts bytes target     prot opt in     out     source               destination
    
    
    Chain OUTPUT (policy ACCEPT 6792K packets, 6348M bytes)
     pkts bytes target     prot opt in     out     source               destination
    
  3. 若要创建规则以使 TCP/UDP 端口 25226 和 25224 能够通过活动防火墙,请根据需要添加规则。

    1. 若要安装防火墙策略编辑器,请运行:

      yum install policycoreutils-python
      
    2. 将防火墙规则添加到防火墙策略。 例如:

      sudo firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -p tcp --dport 25226  -j ACCEPT
      sudo firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -p udp --dport 25224  -j ACCEPT
      sudo firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -p tcp --dport 25224  -j ACCEPT
      
    3. 验证是否添加了例外。 运行:

      sudo firewall-cmd --direct --get-rules ipv4 filter INPUT
      
    4. 重新加载防火墙。 运行:

      sudo firewall-cmd --reload
      

注意

若要禁用防火墙,请运行:sudo systemctl disable firewalld

如果本文前面所述的步骤无法解决问题,则 OMS 代理与 Microsoft Sentinel 工作区之间可能存在连接问题。

在这种情况下,请验证以下内容以继续故障排除:

  • 确保在 Syslog 收集器上能够看到到达 TCP/UDP 端口 514 的数据包

  • 确保可以看到日志被写入到本地日志文件(/var/log/messages 或 /var/log/syslog)

  • 确保可以看到数据包在端口 25226 上流动

  • 确保虚拟机通过 TCP 与端口 443 建立出站连接,或者可以连接到 Log Analytics 终结点

  • 确保可以通过防火墙策略从 CEF 收集器访问所需的 URL。 有关详细信息,请参阅 Log Analytics 代理防火墙要求

运行以下命令,确定代理是否与 Azure 成功通信,或者 OMS 代理是否被阻止连接到 Log Analytics 工作区。

Heartbeat
 | where Computer contains "<computername>"
 | sort by TimeGenerated desc

如果代理成功通信,则会返回日志条目。 否则,OMS 代理可能会受阻。