在前幾天的文章中,我們已經介紹 Wazuh 的 Decoder(解碼器),了解如何將原始日誌解析成結構化資料。
不過,Decoder 主要負責解析日誌,並不會單獨決定哪些事件需要觸發安全警報。
這時候就需要透過 Rules(規則),判斷日誌是否符合特定的安全條件。
Wazuh 本身提供許多內建規則,但在實際企業環境中,可能會遇到特殊的應用程式或自訂日誌格式,因此需要自行建立規則。
Wazuh 的規則主要使用 XML 格式撰寫,常見的組成如下:
| 元素 | 功能 |
|---|---|
<group> |
將相關規則分類 |
<rule> |
定義一條偵測規則 |
id |
規則的唯一識別碼 |
level |
警報嚴重程度,範圍為 0~16 |
<decoded_as> |
指定要比對的 Decoder |
<field> |
比對解析後的特定欄位 |
<description> |
規則觸發時顯示的描述 |
例如:
<group name="custom_app,">
<rule id="100100" level="5">
<decoded_as>custom_app</decoded_as>
<field name="status">failed</field>
<description>
Application login failed
</description>
</rule>
</group>
這條規則代表:
當 Wazuh 收到由 custom_app Decoder 解析的日誌,且 status 欄位為 failed 時,就會觸發等級 5 的警報。
接下來示範如何建立一條偵測登入失敗事件的規則。
sudo nano /var/ossec/etc/rules/local_rules.xml
這個檔案主要用來存放使用者自行建立的規則,避免直接修改系統內建規則。
2. 新增規則內容
假設系統會產生以下日誌:
2026-10-18 10:30:00 custom_app: user=admin status=failed
若已經透過自訂 Decoder 將日誌解析成 user 與 status 欄位,就可以建立以下規則:
<group name="custom_app,authentication_failed,">
<rule id="100101" level="7">
<decoded_as>custom_app</decoded_as>
<field name="status">^failed$</field>
<description>
Failed login detected in custom application
</description>
</rule>
</group>
其中:
完成規則設定後,可以使用 Wazuh 提供的 wazuh-logtest 工具進行測試。
sudo /var/ossec/bin/wazuh-logtest
2026-10-18 10:30:00 custom_app: user=admin status=failed
**Phase 2: Completed decoding.
name: 'custom_app'
status: 'failed'
user: 'admin'
**Phase 3: Completed filtering (rules).
id: '100101'
level: '7'
description: 'Failed login detected in custom application'
測試結果主要分成三個階段:
| 階段 | 功能 |
|---|---|
| Phase 1 | 預先解析日誌,辨識時間與來源等資訊 |
| Phase 2 | 使用 Decoder 解析日誌欄位 |
| Phase 3 | 比對 Rules,判斷是否觸發警報 |
如果 Phase 2 已成功解析欄位,但 Phase 3 沒有符合預期的規則,就需要檢查 Rule 的條件設定。
確認規則測試成功後,可以重新啟動 Wazuh Manager,讓新規則套用至實際日誌處理流程。
sudo systemctl restart wazuh-manager
接著檢查服務狀態:
sudo systemctl status wazuh-manager
若服務正常運作,代表 Manager 已成功啟動。
需要注意的是,wazuh-logtest 測試成功不代表實際日誌已經被收集。若要在 Dashboard 中看到警報,還必須確認日誌來源已正確設定,且事件確實被 Wazuh 接收。
| 問題 | 可能原因 | 解決方式 |
|---|---|---|
| 規則沒有觸發 | Decoder 名稱不一致 | 確認 decoded_as 設定 |
| 欄位無法比對 | Decoder 未成功解析欄位 | 使用 logtest 檢查 Phase 2 |
| 規則載入失敗 | XML 格式錯誤 | 檢查標籤是否完整 |
| Manager 無法啟動 | 規則設定有誤 | 查看 Manager 日誌 |
| Dashboard 沒有警報 | 日誌未被收集或規則未觸發 | 確認日誌收集與規則設定 |
如果 Wazuh Manager 發生問題,可以透過以下指令查看日誌:
sudo tail -n 50 /var/ossec/logs/ossec.log
藉由錯誤訊息,可以進一步確認是否存在規則格式或載入問題。