Anubis 深度解析:以策略和工作量證明保護自架網站
分析 Anubis 如何作為反向代理判斷請求、向可疑用戶端發出瀏覽器工作量證明,並說明策略、部署、監控、無障礙、安全和誤擋代價。
專案定位與關注理由
Anubis 是部署在來源站前的開源 Web 防護代理,讓大量自動抓取承擔計算成本,同時讓符合策略的訪客進入網站。本次抓取有 20,826 個 Star,近 30 天約 23 次提交,最新版本為 v1.25.0。它因 AI 資料抓取壓力受到關注,但維護者也將它視為高摩擦手段,不能只因熱門就安裝。
情境與關鍵能力
它適合文件站、程式碼託管、個人服務或公共社群在機器人尖峰下保護有限 CPU、頻寬與資料庫連線。策略可允許、拒絕、挑戰或調整請求權重,辨識已知機器人和自訂路徑;通過挑戰的用戶端取得簽署通行憑證。Prometheus 指標可觀察挑戰、失敗、策略命中與流量。
請求處理與工作量證明
請求先依序經過策略規則。ALLOW 直接通過,DENY 拒絕,CHALLENGE 進入驗證,WEIGH 調整後續難度。挑戰頁在瀏覽器計算符合目標的結果,伺服器以較低成本驗證,成功後簽發有時效的憑證。這會把大量抓取成本移到用戶端,卻不能證明訪客真實身分,也無法保證腳本永遠解不開。
技術棧與整合方式
核心服務以 Go 撰寫,挑戰介面使用 Preact,策略用 YAML 設定。通行憑證涉及簽章與 JWT,文件說明 Ed25519 金鑰和工作階段設定。它通常放在 nginx、Caddy、HAProxy、Traefik 或 Kubernetes 入口和來源站之間,也能用容器、系統套件或服務執行。必須正確設定可信代理標頭、真實用戶端位址和目標 URL。
最小部署路徑
先選擇官方支援的容器映像或平台套件,在隔離環境讓 Anubis 代理測試站點,設定目標服務、監聽位址和金鑰。接著配置外層 TLS 與反向代理標頭,從預設策略開始,只替已驗證的搜尋引擎、監控和內部網路加入最小允許規則。上線前測試首頁、API、靜態資源、登入、無 JavaScript 用戶端和快取。
效益與實際代價
工作量證明讓伺服器驗證成本低,卻提高批量用戶端的累積成本,也能避免依賴託管防護商。代價是首次載入延遲、行動裝置耗電、JavaScript 需求、無障礙問題和誤擋;進階抓取器仍可完成挑戰。難度太低沒有保護效果,太高會傷害真實使用者,因此規則維護與監控比安裝本身更重要。
安全、隱私與授權
Anubis 不可直接信任公網傳來的 `X-Forwarded-For`,只有明確的上游代理能提供用戶端位址。金鑰要持久保存並限制權限,管理和除錯端點不得公開,日誌及指標也應避免敏感查詢。挑戰 Cookie 不是帳戶登入;來源站仍需驗證、授權、修補和限速。專案採 MIT,部署者也要評估計算挑戰對隱私、能耗與公平存取的影響。