分享方式:


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

重要

許多設備與裝置的記錄收集現在都透過下列項目支援:透過 AMA 的常見事件格式 (CEF)、透過 AMA 的 Syslog,或透過 Microsoft Sentinel 中 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 代理程式可能會遭到封鎖。