iT邦幫忙

2026 iThome 鐵人賽

DAY 29
0
Security

從零打造 Wazuh 自動化防禦與威脅狩獵戰情中心系列 第 29 篇

Day 29|Wazuh × Python × Discord:打造 SSH 異常即時警報通知系統

  • 分享至 

  • xImage
  •  

前幾天已經完成 Wazuh Active Response 的設定與測試,讓系統在偵測到 SSH 異常時,可以進一步執行封鎖動作。

不過在實際使用時,我發現還有一個問題:

如果沒有一直開著 Wazuh Dashboard,要怎麼知道系統發生了資安事件?

因此今天決定加入 Discord Webhook 通知功能,透過 Python 讀取 Wazuh 的警報資料,並將 SSH 登入異常資訊自動發送到 Discord。

這樣就不需要一直盯著 Dashboard,也能即時收到資安事件通知。


1. 為什麼選擇 Discord Webhook?

Wazuh Dashboard 雖然可以查看完整的警報資訊,但每次都需要進入介面查詢。

因此我希望建立一個更直接的通知方式。

這次選擇 Discord Webhook,主要是因為設定相對簡單,而且可以直接透過 Python 發送 HTTP 請求,不需要另外架設通知伺服器。

預期的運作流程如下:

SSH 登入失敗
      ↓
Wazuh 偵測異常
      ↓
產生 Alert
      ↓
Python 讀取警報
      ↓
Discord Webhook
      ↓
發送通知

透過這個方式,可以把原本只存在於 Wazuh Dashboard 的警報資訊,轉換成 Discord 訊息。


2. 從 alerts.json 取得警報資訊

Wazuh 會將警報事件記錄在:

/var/ossec/logs/alerts/alerts.json

這份檔案採用 JSON 格式,包含事件的規則、來源 IP、主機資訊及時間等資料。

這次 Python 程式主要需要取得:

  • 受害主機名稱
  • 遭鎖定的登入帳號
  • 攻擊來源 IP
  • SSH 登入失敗次數

接著將這些資訊整理成 Discord 訊息。

整個處理流程如下:

讀取 alerts.json
       ↓
解析 JSON 資料
       ↓
判斷是否為 SSH 異常
       ↓
擷取主機與登入資訊
       ↓
整理警報內容
       ↓
發送 Discord

這樣就可以只針對需要關注的 SSH 事件發送通知,而不是把所有 Wazuh 警報都推送出去。


3. 使用 Python 發送 Discord Webhook

首先在 Discord 頻道中建立 Webhook,取得 Webhook URL。

接著使用 Python 的 requests 套件,將整理好的警報內容發送到指定頻道。

以下使用簡化程式碼示範訊息發送方式:

import os
import requests

webhook_url = os.environ["DISCORD_WEBHOOK_URL"]

message = {
    "content": (
        "🚨 SSH 登入失敗警報 🚨\n"
        "受害主機:kuoyiting-VMware-Virtual-Platform\n"
        "遭鎖定帳號:hacker\n"
        "攻擊者 IP:192.168.212.1\n"
        "已失敗次數:5 次"
    )
}

requests.post(
    webhook_url,
    json=message,
    timeout=10
).raise_for_status()

這段程式主要示範如何透過 Webhook 發送訊息。

實際整合時,通知內容會由 Python 解析 Wazuh 的警報資料後產生,而不是每次都傳送固定文字。

Webhook URL 也應避免直接公開在程式碼中,以免被其他人利用。


4. Discord 警報通知實測

完成 Python 與 Discord Webhook 的整合後,我再次進行 SSH 登入失敗測試,確認通知功能是否正常運作。

這次從 Windows 對 Ubuntu 發起 SSH 連線,並故意輸入錯誤密碼,讓 Wazuh 產生相關警報。

當 Python 偵測到符合條件的事件後,就會將資訊整理並發送到 Discord。

https://ithelp.ithome.com.tw/upload/images/20261012/20184260V3p7QanjcP.png

從實際截圖可以看到,Discord Bot 成功顯示以下資訊:

欄位 通知內容
警報類型 SSH 登入失敗警報
受害主機 kuoyiting-VMware-Virtual-Platform
遭鎖定帳號 hacker
攻擊者 IP 192.168.212.1
已失敗次數 5 次

這次最重要的成果,就是成功將原本 Wazuh 偵測到的 SSH 異常資訊,轉換成 Discord 可以直接閱讀的通知。

不需要再進入 Dashboard 一筆一筆查看,也能快速知道是哪台主機受到登入嘗試,以及攻擊來源為何。

另外,通知中的「已失敗次數」是程式整理後顯示的結果,不一定等同於 Wazuh 自訂 Rule 的觸發門檻。


5. 使用 Docker Sidecar 讓通知程式持續運作

完成基本的通知測試後,還有一個問題需要處理。

如果每次都要手動執行 Python 程式,通知功能就無法持續運作。

因此我進一步嘗試透過 Docker Compose,讓 Python 通知程式以 Sidecar 的方式常駐執行。

整體架構如下:

       Wazuh Manager
             │
             │
         alerts.json
             │
             ▼
       Python Sidecar
             │
             │ HTTP POST
             ▼
       Discord Webhook
             │
             ▼
       Discord 警報通知

透過共用掛載目錄,Python 容器可以讀取 Wazuh 產生的警報檔案,並持續監控新增事件。

當出現符合條件的 SSH 警報時,就會自動發送 Discord 通知。

這樣就不需要每次都手動啟動 Python 程式,也讓通知功能更適合長時間運作。


6. 整合 Active Response 與 Discord 通知

完成 Discord Webhook 後,整個系統已經不只是單純的 SSH 偵測工具。

目前可以將警報後續處理分成兩個方向:

             SSH 登入異常
                   ↓
              Wazuh Alert
                   │
          ┌────────┴────────┐
          │                 │
          ▼                 ▼
   Active Response        Python
          │                 │
          ▼                 ▼
    firewall-drop     Discord Webhook
          │                 │
          ▼                 ▼
     封鎖來源 IP        發送警報通知

Active Response 負責執行自動防禦動作。

Python 與 Discord Webhook 則負責通知管理者。

兩個功能雖然用途不同,但都能利用 Wazuh 產生的警報資訊,讓系統從單純的事件偵測,進一步具備自動化處理能力。


今日總結

今天成功將 Python 與 Discord Webhook 整合進 Wazuh,建立 SSH 異常事件的通知功能。

在實際測試中,Discord Bot 已經能夠顯示:

🚨 SSH 登入失敗警報 🚨

受害主機:kuoyiting-VMware-Virtual-Platform
遭鎖定帳號:hacker
攻擊者 IP:192.168.212.1
已失敗次數:5 次

這次實作讓我了解到,Wazuh 的警報資料不只能在 Dashboard 中查看,也可以透過 Python 進一步處理,整合到其他通知平台。

從前面的 SSH 異常偵測、Active Response 自動封鎖,到今天的 Discord 警報推播,整個系統已經逐漸具備資安事件偵測、回應與通知的基本流程。


Day 30 預告

30 天 Wazuh 實戰總結:從環境建置到自動化資安防禦

最後一天將回顧這 30 天的實作成果,包括 Wazuh 環境建置、FIM 檔案監控、SSH 異常偵測、自訂 Rule、Active Response 與 Discord 警報通知。

同時也會整理過程中遇到的問題,以及未來可以繼續延伸的資安自動化方向。


上一篇
Day 28|Active Response 實戰驗證:SSH 連線終於被阻擋了!
下一篇
Day 30|30 天 Wazuh 實戰總結:從零開始打造自動化資安防禦系統
系列文
從零打造 Wazuh 自動化防禦與威脅狩獵戰情中心 共 30 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言