iT邦幫忙

2026 iThome 鐵人賽

DAY 7
1
AI 自動化

從漏洞告警到 AI 決策:Wazuh × RAG × n8n 實作自動化資安漏洞驗證與智慧通報系列 第 7 篇

Day 07 : 讓系統主動敲門-認識 Webhook 與架設 FastAPI 接收站

  • 分享至 

  • xImage
  •  

昨天我們見識到了 Wazuh 4.8.0 抓漏洞的威力,儀表板上滿滿的圖表看起來非常專業。但現實的資安維運中,我們不可能 24 小時盯著網頁看。要實現真正的自動化,第一步就是要把這些告警從 Wazuh 系統裡「抓」出來。

說到系統間的資料傳遞,最常見的方式有兩種:一種是 API Polling(輪詢),就像我們不斷去問 Wazuh「有新漏洞了嗎?」,這不僅沒效率也非常浪費資源。
另一種則是 Webhook,它就像是我們給 Wazuh 留了一支電話:「如果有掃到中高風險的漏洞,不用等我問,直接打這支電話通知我,並把資料傳過來。」

我們接下來的架構,就是要實作 Webhook 的接收端。


為什麼選擇 FastAPI?

在處理資安日誌這種高頻率的資料時,接收速度非常重要。FastAPI 顧名思義就是「快」,加上它的程式碼寫起來極度簡潔,用來當作 Webhook 的接收站真的再適合不過了。對於資工系的學生來說,這種 Python 框架的學習曲線相對友善,能讓我們把心力專注在資料流的邏輯上,而不是被複雜的底層架構卡死。

準備開發環境 (PowerShell 提速小技巧)
為了加快開發節奏,我們可以直接打開 PowerShell,用幾行指令快速搞定今天的檔案建置,這比用滑鼠慢慢點擊右鍵新增快上不少:

# 進入我們之前建好的專案目錄
cd secops-project

# 進入 backend 資料夾並建立 Python 檔案
cd backend
New-Item main.py

動手寫一個最簡單的接收站

今天我們不寫太複雜的邏輯,只要確保程式能順利啟動、並且能接收 POST 請求就好。如果你是用 VS Code,可以直接在終端機輸入 code . 打開專案,然後在 main.py 裡貼上這短短十幾行程式碼:

from fastapi import FastAPI, Request
import uvicorn

app = FastAPI(title="SecOps Backend API")

# 建立一個 POST 路由,準備用來接收 Wazuh 送來的資料
@app.post("/webhook/wazuh")
async def receive_wazuh_alert(request: Request):
    # 先單純把收到的請求轉成 JSON 格式
    payload = await request.json()
    
    # 簡單印出提示,證明我們真的有收到東西!
    print("!收到一筆來自 Webhook 的資料!")
    
    # 回傳成功狀態給發送方 (Wazuh)
    return {"status": "success", "message": "Alert received"}

if __name__ == "__main__":
    # 啟動伺服器,監聽 8000 port
    uvicorn.run(app, host="0.0.0.0", port=8000)

寫好之後,在終端機輸入這行指令安裝必備套件:

pip install fastapi uvicorn

接著執行程式:

python main.py

只要看到終端機印出 Application startup complete.,就代表我們的接收站已經架設完畢,隨時準備接聽 Wazuh 打來的電話了。

成功的畫面像是這樣
image

今天我們用比較輕鬆的節奏,把後端 API 的地基打好了。把大任務切成小碎塊來解,實作起來會踏實很多。現在接收站已經開張,明天我們就要回到 Wazuh 去設定轉發規則,讓它真正把漏洞告警打到這支 API 裡!


上一篇
Day 06 : 喚醒掃描雷達!啟用 Wazuh 漏洞偵測(Vulnerability Detector)
下一篇
Day 08 : 實作主動式威脅告警-設定 Wazuh Webhook 與 FastAPI 介接
系列文
從漏洞告警到 AI 決策:Wazuh × RAG × n8n 實作自動化資安漏洞驗證與智慧通報 共 11 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言