[已淘汰] 針對 CEF 或 Syslog 資料連接器進行疑難排解
重要
許多設備與裝置的記錄收集現在都透過下列項目支援:透過 AMA 的常見事件格式 (CEF)、透過 AMA 的 Syslog,或透過 Microsoft Sentinel 中 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 監視器代理程式 (AMA) 擷取 CEF 記錄的相關疑難排解資訊,請檢閱 透過 AMA 的常見事件格式 (CEF) 連接器指示。
重要
在 2023 年 2 月 28 日,我們介紹了 CommonSecurityLog 資料表結構描述的變更。 在這項變更之後,您可能需要檢閱和更新自訂查詢。 如需詳細資訊,請參閱此部落格文章中的 建議動作章節。 Microsoft Sentinel 已更新現成的內容 (偵測、搜捕查詢、活頁簿、剖析器等)。
如何使用此文章
當本文中的資訊僅與 Syslog 或 CEF 連接器相關時,它會以個別索引標籤呈現。 請務必使用適用於您連接器類型之正確索引標籤上的相關指示。
例如,如果您要針對 CEF 連接器進行疑難排解,請從驗證 CEF 連線能力開始。 如果您要針對 Syslog 連接器進行疑難排解,請從驗證您的資料連接器必要條件開始。
驗證 CEF 連線能力
當您部署記錄轉寄站且設定安全性解決方案並向其傳送 CEF 訊息之後,請使用此節的步驟來驗證您的安全性解決方案與 Microsoft Sentinel 之間的連線能力。
此程序僅適用於 CEF 連線,且與 Syslog 連線「無關」。
確定您已滿足下列必要條件:
您在記錄轉寄站機器上必須具有提升的權限 (sudo)。
您必須在記錄轉寄站機器上安裝 Python 2.7 或 3。 使用
python --version
命令來檢查。您在此程序中的某個階段,可能會需要工作區識別碼和工作區主索引鍵。 您可以在工作區資源的 [代理程式管理] 底下找到它們。
從 Microsoft Sentinel 導覽功能表,開啟 [記錄]。 使用 CommonSecurityLog 結構描述執行查詢,以查看您是否正從安全性解決方案接收記錄。
可能需要大約 20 分鐘,您的記錄才會開始出現在 Log Analytics 中。
如果您沒有看到查詢的任何結果,請確認您的安全性解決方案正在產生記錄訊息。 或者,嘗試採取一些動作來產生記錄訊息,並確認訊息已轉送至您指定的 Syslog 轉寄站電腦。
在記錄轉寄站上執行下列指令碼 (套用工作區識別碼來取代預留位置),以檢查安全性解決方案、記錄轉寄站和 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]
CEF 驗證指令碼說明
下一節描述適用於 rsyslog 精靈和 syslog-ng 精靈的 CEF 驗證指令碼。
rsyslog 精靈
針對 rsyslog 精靈,CEF 驗證指令碼會執行下列檢查:
檢查檔案
/etc/opt/microsoft/omsagent/[WorkspaceID]/conf/omsagent.d/security_events.conf
存在且有效。檢查檔案包括下列文字:
<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>
使用下列命令來檢查剖析 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]
使用下列命令,在 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]
檢查機器上是否有任何安全性增強功能可能會封鎖網路流量 (例如主機防火牆)。
檢查 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
重新啟動 syslog 精靈和 Log Analytics 代理程式:
service rsyslog restart /opt/microsoft/omsagent/bin/service_control restart [workspaceID]
檢查已建立必要連線:TCP 514 用於接收資料,TCP 25226 則用於 syslog 精靈與 Log Analytics 代理程式之間的內部通訊:
netstat -an | grep 514 netstat -an | grep 25226
檢查 syslog 精靈是否正在連接埠 514 上接收資料,而代理程式正在連接埠 25226 上接收資料:
sudo tcpdump -A -ni any port 514 -vv sudo tcpdump -A -ni any port 25226 -vv
將 MOCK 資料傳送至 localhost 上的連接埠 514。 透過執行下列查詢,應該可在 Microsoft Sentinel 工作區中觀察此資料:
CommonSecurityLog | where DeviceProduct == "MOCK"
syslog-ng 精靈
針對 syslog-ng 精靈,CEF 驗證指令碼會執行下列檢查:
檢查檔案
/etc/opt/microsoft/omsagent/[WorkspaceID]/conf/omsagent.d/security_events.conf
存在且有效。檢查檔案包括下列文字:
<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>
使用下列命令來檢查剖析 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]
使用下列命令,在 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]
檢查機器上是否有任何安全性增強功能可能會封鎖網路流量 (例如主機防火牆)。
檢查 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);};
重新啟動 syslog 精靈和 Log Analytics 代理程式:
service syslog-ng restart /opt/microsoft/omsagent/bin/service_control restart [workspaceID]
檢查已建立必要連線:TCP 514 用於接收資料,TCP 25226 則用於 syslog 精靈與 Log Analytics 代理程式之間的內部通訊:
netstat -an | grep 514 netstat -an | grep 25226
檢查 syslog 精靈是否正在連接埠 514 上接收資料,而代理程式正在連接埠 25226 上接收資料:
sudo tcpdump -A -ni any port 514 -vv sudo tcpdump -A -ni any port 25226 -vv
將 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
疑難排解作業系統問題
此節描述如何針對必然衍生自作業系統設定的問題進行疑難排解。
針對作業系統問題進行疑難排解:
如果您尚未這麼做,請驗證您使用的是支援的作業系統和 Python 版本。 如需詳細資訊,請參閱 CEF 必要條件。
如果您的虛擬機器位於 Azure 中,請驗證網路安全性群組 (NSG) 允許透過連接埠 514 傳送來自您記錄用戶端 (傳送者) 的輸入 TCP/UDP 連線。
驗證封包是否抵達 Syslog 收集器。 若要擷取抵達 Syslog 收集器的 syslog 封包,請執行:
tcpdump -Ani any port 514 and host <ip_address_of_sender> -vv
執行下列其中一項動作:
如果您未看到任何封包抵達,請確認 NSG 安全性群組權限和 Syslog 收集器的路由路徑。
如果您看到封包抵達,請確認它們並未遭到拒絕。
如果您看到封包遭到拒絕,請確認 IP 資料表並未封鎖連線。
若要確認封包未遭到拒絕,請執行:
watch -n 2 -d iptables -nvL
驗證 CEF 伺服器是否正在處理記錄。 請執行:
tail -f /var/log/messages or tail -f /var/log/syslog
所有正在處理的 CEF 記錄都會以純文字顯示。
確認 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。
請執行:
sestatus
狀態會顯示為下列其中一個:
disabled
. 連線至 Microsoft Sentinel 時,支援此設定。permissive
. 連線至 Microsoft Sentinel 時,支援此設定。enforced
. 不支援此設定,而且您必須停用狀態,或將它設定為permissive
。
如果狀態目前設定為
enforced
,請暫時將它關閉,以確認這是否為封鎖程式。 請執行:setenforce 0
注意
此步驟只會在伺服器重新開機之前關閉 SELinux。 修改 SELinux 設定,使其保持關閉。
若要驗證變更是否成功,請執行:
getenforce
應傳回
permissive
狀態。
重要
當系統重新開機時,此設定更新會遺失。 若要將此設定永久更新為 permissive
,請修改 /etc/selinux/config 檔案,並將 SELINUX
值變更為 SELINUX=permissive
。
如需詳細資訊,請參閱 RedHat 文件 (英文)。
封鎖的防火牆原則
此程序描述如何驗證防火牆原則是否正封鎖從 Rsyslog 精靈到 OMS 代理程式的連線,以及如何視需要加以停用。 此程序與 CEF 和 Syslog 資料連接器有關。
執行下列命令來驗證 IP 資料表中是否有任何拒絕,其能指出防火牆原則正在捨棄的流量:
watch -n 2 -d iptables -nvL
若要讓防火牆原則保持啟用,請建立原則規則以允許連線。 視需要新增規則,透過作用中的防火牆允許 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
若要建立規則,以經由作用中的防火牆允許 TCP/UDP 連接埠 25226 和 25224,請視需要新增規則。
若要安裝防火牆原則編輯器,請執行:
yum install policycoreutils-python
將防火牆規則新增至防火牆原則。 例如:
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
驗證已新增例外狀況。 請執行:
sudo firewall-cmd --direct --get-rules ipv4 filter INPUT
重新載入防火牆。 請執行:
sudo firewall-cmd --reload
注意
若要停用防火牆,請執行:sudo systemctl disable firewalld
Linux 和 OMS 代理程式相關問題
如果此文章之前所述的步驟無法解決您的問題,您可能會在 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 代理程式可能會遭到封鎖。