
Homelab 對外開放,router firewall 點解唔夠:CrowdSec 分層防守
由封 port、分析 request 到自動封 IP,講清三層各自做咩
NAS、自架相簿、Home Assistant 一開 remote access,好多人第一個反應都係:「router 有 firewall,應該夠啦?」問題係 firewall 只識得按連線狀態、IP、port 同協定放行或者截停。當你刻意開放 HTTPS,或者用 Pangolin 建立由內向外嘅 tunnel,合法格式嘅 HTTP request 已經過咗第一關,之後要靠 reverse proxy、登入系統同應用本身處理。
XDA 作者實際見到咩
XDA 作者 Shekhar Vaidya 將公開服務放喺 Pangolin 後面,再喺 VPS 嘅 Traefik 加入 CrowdSec。佢話系統運行近一星期後,Traefik 查詢 CrowdSec 超過 8,000 次,當中約 38 個 request 俾 bouncer 擋低。本機亦錄得約 205 次偵測,而 dashboard 顯示超過 32,000 個來自 CrowdSec Central API 嘅 ban decision。
呢組數字只代表作者嗰套服務、設定同短期流量。38 次封鎖唔等於 38 次成功入侵,仲唔代表有人專登針對佢。 公開 IP 長期都有 scanner、bot、撞密碼工具同 CVE 探測器周圍試門口;至於 32,000 個社群 ban,主要係下載返嚟嘅封鎖決定,唔代表嗰批 IP 全部曾經連到作者部機。

圖片:Wikimedia Commons — Slick(CC0)
Router firewall 冇失職,只係睇唔到 HTTP 行為
作者屋企條寬頻喺 CGNAT 後面,Pangolin 嘅 Newt connector 主動連去有公開 IP 嘅 VPS,再由 Traefik 接收外來 request。咁行法之下,屋企部 Omada ER605 見到嘅主要係一條由內向外建立嘅連線,網上掃描亦先到 VPS。屋企 router 根本未必睇到每個公開 HTTP request,自然亦判斷唔到條 URL 似唔似漏洞探測。
VPS firewall 照樣重要:佢可以只留低 80、443,收起 SSH、database 同管理介面。不過 HTTPS request 去到已開放嘅 443,就輪到 Traefik 分流、驗證同記錄。呢度要補多句,reverse proxy 本身唔會自動修補後端 app;相簿系統或者 NAS 管理頁有漏洞,照樣要更新、限制權限同加多重驗證。
CrowdSec 入面其實有偵測同執行兩部分
CrowdSec Security Engine 會讀 Traefik access log,用 scenario 分析掃描、暴力登入、異常頻率等行為;AppSec 模式就可以直接分析同過濾支援嘅 web server 收到嘅 HTTP request。偵測結果經 Local API 變成 decision,跟住由 bouncer 喺 Traefik、iptables 或其他位置執行封鎖。裝咗引擎但冇 bouncer,只會見到 alert;裝咗 bouncer但讀錯 log,就只剩社群名單可以參考。
作者個設定用 Traefik plugin 做 bouncer,亦因為漏咗換走示例 API key,令六個公開服務一度全部失效約十分鐘。呢個插曲幾有代表性:安全 middleware 擺喺所有 request 必經位置,一個 key、container health check 或設定檔出錯,影響可以大過後端單一服務死機。部署時要預留 bypass、rollback 同獨立管理入口。
社群名單有代價,誤封亦要預
CrowdSec 官方文件寫明,Security Engine 預設會向 Central API 傳送合資格 alert 嘅 metadata,當中包括觸發咗邊個 scenario、時間、machine ID、來源 IP 同可用嘅地理資料;用戶可以退出分享。自訂、改動過或者手動建立嘅 scenario,未連接 Console 時一般唔會照常上傳。
共享來源 IP 可以令其他節點提早擋住已知惡意流量,不過 IP 會轉手、住宅寬頻會共用出口,CDN、VPN 同正常 scanner 亦可能撞中規則。CrowdSec 有白名單、simulation mode 同 false-positive 分類,實際部署仍然要睇 alert 原始 log。官方聲稱自家名單經整理,但第三方名單連官方都冇保證完全冇誤封。
對外開放前,跟呢張清單執一次
**先減少公開面:**只畀自己或家人用嘅服務,優先設成 Pangolin private resource、VPN 或強制登入;管理頁、SSH、database 同 CrowdSec Local API 唔好直接公開。**再核對來源 IP:**前面有 CDN、load balancer 或另一層 proxy,就只信任指定 forwardedHeaders.trustedIPs,唔好長開信任所有 forwarded header,否則攻擊者有機會偽造來源 IP,令偵測同封鎖對錯人。
**跟住驗證成條鏈:**確認 Traefik access log 有真實 client IP、CrowdSec parser 有成功讀取、scenario 有觸發、bouncer 有查 decision,仲要幫 log 做 rotation。先用 simulation 或短時間 ban 測試,將固定管理 IP 加入白名單,再測 rollback。最後固定兼容版本、備份設定,同時更新公開 app、開多重驗證及限制登入次數,唔好用 CrowdSec 代替基本保養。
如果你只用 NAS app 偶爾返屋企攞檔,保持服務私有通常簡單過長期公開。真係要畀外人瀏覽相簿或者用自架服務,router firewall、reverse proxy、身份驗證、更新同 CrowdSec 呢類自動偵測工具就要一齊顧,仲要定期翻查誤封同失效情況。
參考來源
- XDA Developers — I put a crowd-sourced firewall in front of my exposed homelab, and it started blocking attacks on day one — original report
- CrowdSec Security Engine Overview — 核對 Security Engine、Local API、AppSec、社群名單同 bouncer 嘅分工
- CrowdSec Central API Introduction — 核對預設上傳嘅 signal metadata、來源 IP、machine ID 同退出安排
- CrowdSec Whitelists — 核對預設私人網絡白名單、誤封處理同自訂白名單用途
- Pangolin CrowdSec Community Guide — 核對 Pangolin、Traefik access log、bouncer、測試方法同 Docker port 風險;頁面註明屬社群指南
- CrowdSec Traefik Bouncer — 核對 reverse proxy 後面取得真實 client IP 同 trusted IP range 嘅要求
- Traefik EntryPoints Documentation — 核對 forwarded headers、trustedIPs 同 insecure mode 設定
本文根據原文及公開資料整理;資料有出入時,以原文及官方資料為準。







