共用方式為


[已淘汰] 針對 CEF 或 Syslog 資料連接器進行疑難排解

重要

許多設備與裝置的記錄收集現在都由 Microsoft Sentinel 支援,方式包括:透過 AMA 的常見事件格式 (CEF)、透過 AMA 的 Syslog,或透過 AMA 資料連接器的自訂記錄。 如需詳細資訊,請參閱尋找您的 Microsoft Sentinel 資料連接器

警告

本文參考 CentOS,這是已達生命週期結束 (EOL) 狀態的 Linux 發行版本。 請據此考慮您的使用方式和規劃。 如需詳細資訊,請參閱 CentOS 生命週期結束指導

此文章描述針對適用於 Microsoft Sentinel 的 CEF 或 Syslog 資料連接器進行驗證及疑難排解的常見方法。

例如,如果您的記錄訊息未出現在 SyslogCommonSecurityLog 資料表中,您的資料來源可能無法正確連線。 未收到您的資料也可能有其他的原因。

失敗連接器部署的其他徵兆包括當 security_events.conf 或遺失 security-omsagent.config.conf 檔案時,或 rsyslog 伺服器未接聽埠 514 時。

如需詳細資訊,請參閱使用常見事件格式連線至外部解決方案使用 Syslog 從 Linux 型來源收集資料

如果您使用與列出的程序不同的方法來部署連接器,而且發生問題時,建議您取消部署並重新開始,這次請遵循列出的指示。

本文說明如何使用 Log Analytics 代理程式針對 CEF 或 Syslog 連接器進行疑難排解。 如需透過 Azure 監視器代理程式 (AMA) 擷取 CEF 記錄的相關疑難排解資訊,請檢閱 透過 AMA 的常見事件格式 (CEF) 連接器指示。

重要

2023 年 2 月 28 日,我們介紹了 CommonSecurityLog 資料表結構描述的變更。 在這項變更之後,您可能需要檢閱和更新自訂查詢。 如需詳細資訊,請參閱此部落格文章中的 建議動作章節。 Microsoft Sentinel 已更新內建內容(偵測、狩獵查詢、活頁簿、剖析器等)。

如何使用此文章

當本文中的資訊僅與 Syslog 或 CEF 連接器相關時,它會以個別索引標籤呈現。 確保使用適用於您的連接器類型的正確標籤上的指示。

例如,如果您要針對 CEF 連接器進行疑難排解,請從驗證 CEF 連線能力開始。 如果您要針對 Syslog 連接器進行疑難排解,請從驗證您的資料連接器必要條件開始。

驗證 CEF 連線能力

當您部署記錄轉寄站設定安全性解決方案並向其傳送 CEF 訊息之後,請使用此節的步驟來驗證您的安全性解決方案與 Microsoft Sentinel 之間的連線能力。

此程序僅適用於 CEF 連線,且與 Syslog 連線「無關」

  1. 確定您已滿足下列必要條件:

    • 您必須在日誌轉送器上具有提升的權限 (sudo)。

    • 您必須在記錄轉寄站機器上安裝 Python 2.73。 使用 python --version 命令來檢查。

    • 您在此程序中的某個階段,可能會需要工作區識別碼和工作區主索引鍵。 您可以在工作區資源的 [代理程式管理] 底下找到它們。

  2. 從 Microsoft Sentinel 導覽功能表,開啟 日誌。 使用 CommonSecurityLog 結構描述執行查詢,以查看您是否正從安全性解決方案接收記錄。

    可能需要大約 20 分鐘,您的記錄才會開始出現在 Log Analytics 中。

  3. 如果您沒有看到查詢的任何結果,請確認您的安全性解決方案正在產生記錄訊息。 或者,嘗試採取一些動作來產生記錄訊息,並確認訊息已轉送至您指定的 Syslog 轉寄站電腦。

  4. 在日誌轉發器上執行下列腳本,以檢查您的安全性解決方案、日誌轉發器和 Microsoft Sentinel 之間的連線能力。請將工作區識別碼套用到預留位置。 此指令碼會檢查精靈是否正在接聽正確的連接埠、轉送是否已正確設定,以及沒有任何項目會封鎖精靈與 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
    
    • 如果發生剖析問題,指令碼將產生錯誤訊息,指示您手動執行下列命令 (套用工作區識別碼以取代預留位置)。 此命令可確保正確剖析並重新啟動代理程式。

      # 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. 使用下列命令,檢查 Log Analytics 代理程式中是否已正確對應 syslog 來源中的 電腦 欄位:

    grep -i "'Host' => record\['host'\]"  /opt/microsoft/omsagent/plugin/filter_syslog_security.rb
    
    • 如果發生對應問題,指令碼將產生錯誤訊息,指示您手動執行下列命令 (套用工作區識別碼以取代預留位置)。 此命令可確保正確對應並重新啟動代理程式。

      # 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 用於接收資料,TCP 25226 則用於 syslog 精靈與 Log Analytics 代理程式之間的內部通訊:

    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 精靈

針對 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
    
    • 如果發生剖析問題,指令碼將產生錯誤訊息,指示您手動執行下列命令 (套用工作區識別碼以取代預留位置)。 此命令可確保正確剖析並重新啟動代理程式。

      # 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. 請使用以下命令檢查 Log Analytics 代理程式中 syslog 來源的 [電腦] 欄位是否已正確對應。

    grep -i "'Host' => record\['host'\]"  /opt/microsoft/omsagent/plugin/filter_syslog_security.rb
    
    • 如果發生映射問題,指令碼將產生錯誤訊息,指示您手動執行下列命令 (用工作區識別碼替換預留位置)。 此命令可確保正確對應並重新啟動代理程式。

      # 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 (使用 regex) 的訊息透過 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 用於接收資料,TCP 25226 則用於 syslog 精靈與 Log Analytics 代理程式之間的內部通訊:

    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 埠接收來自 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 資料連接器時,此程序便與您相關。

注意

適用於 CEF 和 Syslog 的 Microsoft Sentinel 支援僅包括 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 代理程式可能會遭到封鎖。