在前幾天的實作中,我們成功利用 FastAPI 攔截並解析了 Wazuh 的告警日誌。現在,威脅情報已經整整齊齊地存放在 Python 的變數裡了。
接下來面臨的問題是:我們該怎麼把這些情報發出去?
傳統的做法是直接在 FastAPI 裡面寫發送請求的程式碼,例如直接寫 Code 去呼叫 LINE Messaging API。但這樣會帶來一個問題——每次想要更換通知管道,或者想修改推播訊息的排版,我們都必須修改 Python 程式碼並重新啟動伺服器。在企業級的 SecOps 架構中,我們通常會追求「解耦(Decoupling)」,讓負責「解析資料」的後端與負責「發送通知」的流程完全分開。
今天,我們要引入這套專案的最後一塊核心拼圖:n8n。這是一款強大且開源的自動化工作流工具,能讓我們用「拉節點」的視覺化方式,輕鬆串接各種第三方通訊軟體。
你可能聽過 Zapier 或 Make 等自動化工具,它們雖然好用,但免費版通常有嚴格的執行次數限制,而且將企業機敏的資安日誌直接傳到外部雲端也有資安疑慮。
n8n 最大的優勢在於:它開源且支援本地端 Docker 部署。這意味著我們可以把它架設在自己的內網,資料不會外流,而且執行次數完全沒有限制。這對於每天可能產生大量告警的資安監控系統來說,絕對是首選。
還記得我們在 Day 03 建立的 secops-project 資料夾嗎?裡面有一個為今天準備好的 n8n 子目錄。請打開 PowerShell,跟著以下步驟進行部署:
cd C:\Users\user\secops-project\n8n
New-Item docker-compose.yml
YAML
version: "3.8"
services:
n8n:
image: docker.n8n.io/n8nio/n8n:latest
container_name: secops-n8n
restart: unless-stopped
ports:
- "5678:5678"
environment:
- N8N_HOST=0.0.0.0
- N8N_PORT=5678
- N8N_PROTOCOL=http
- NODE_ENV=production
# 設定時區,確保通知的時間戳記正確
- GENERIC_TIMEZONE=Asia/Taipei
volumes:
# 掛載本地資料夾以保存工作流設定,避免重啟後資料遺失
- n8n_data:/home/node/.n8n
volumes:
n8n_data:
這段配置非常輕量,我們將 n8n 的服務綁定在主機的 5678 Port,並設定了台北時區(這對於資安事件發生時間的準確度非常重要),同時利用 Volume 確保我們畫好的工作流不會因為容器關閉而消失。
docker compose up -d
稍等幾十秒,讓系統拉取映像檔並啟動容器。
啟動完成後,打開瀏覽器輸入:http://localhost:5678
第一次進入 n8n 時,系統會要求你建立一組管理員帳號(Set up owner account)。因為這只是在我們自己電腦上的本地端測試,你可以隨意設定一組好記的 Email 與密碼,甚至跳過後續的行銷問卷調查。
登入後,你就會看到一個乾淨、充滿無限可能的畫布(Canvas)。這就是我們未來幾天要大展身手的地方。
在我們開始畫工作流之前,讓我們先釐清目前為止建立起來的「微服務架構」:
透過這樣職責分明的架構,未來無論是掃描規則改變、後端解析邏輯優化,或是想新增其他的通知管道,我們都只需要修改對應的組件,而不用牽一髮動全身。
今天我們順利把 n8n 的地基打好了。明天,我們就要正式在畫布上拉出第一條工作流,並把 FastAPI 的資料成功轉發進來,一路推播到 LINE 上!我們明天見!