Gately v0.6.6 發佈
2026 年 11 月 12 日
這是一個以安全強化為主的版本,建議所有使用者升級。
安全修復
- 來源請求標頭偽造:此前只刪除訪客自帶的
X-Real-Ip等完全同名的標頭,PHP、WSGI、CGI 一類後端會把X_Forwarded_For、X_Real_IP與正式標頭視為同一個變數,訪客可藉此向後端偽造用戶端位址或存取協定。現在訪客自帶的來源類、來源連接埠類請求標頭連同底線寫法的變體在轉發前一律刪除;轉發驗證的子請求同樣處理,並由 Gately 寫入X-Original-URI,驗證服務依路徑放行時不會再被訪客自帶的值誤導。 - 檔案服務登入限速:WebDAV、FTP、SMB 的密碼驗證此前沒有次數限制。現在同一來源 15 分鐘內失敗 10 次即拒絕至視窗結束(IPv6 以 /64 計算,成功登入不會清零),近期驗證通過的憑證不佔名額,SMB 的匿名試探不計入。
- 還原備份:還原帳號檔案時改用新的工作階段金鑰,舊備份不會讓此後因「登出所有裝置」或登出而撤銷的權杖重新生效;解壓縮總量超過 128 MB 或檔案超過 256 個的備份會被拒絕。
- 其他:nginx 設定匯入限制區塊巢狀深度(深度巢狀的設定會耗盡堆疊導致程序結束);超過 300 位元組的 Host 請求標頭直接回傳 400;登入失敗時寫入稽核與日誌的使用者名稱截斷為 64 個字元。
- 相依套件:Go 1.26.11 標準函式庫安全修復,更新 golang.org/x/net、klauspost/compress、andybalholm/brotli,儲存掛載的 SMB 用戶端改用持續維護的 cloudsoda/go-smb2(GO-2026-5051)。
帳號與工作階段
- 伺服器端工作階段撤銷:登出時撤銷該權杖;「設定 → 帳號與安全 → 登入工作階段」新增「登出所有裝置」(
POST /api/account/sessions/revoke),密碼、Passkey、第三方登入與飛牛閘道登入簽發的工作階段立即全部失效,API 權杖不受影響。 - 對外請求限制(
restrictOutbound,預設關閉):開啟後 Webhook、通知、IP 清單訂閱、DDNS 回呼、更新檢查、第三方登入等由管理員設定的對外請求會拒絕迴環、私有網路、連結本機(含 169.254.169.254)等位址,依解析後的 IP 在每次連線時檢查,重新導向與 DNS 重綁定同樣涵蓋;反向代理上游、網路喚醒、儲存掛載等面向內網的功能不受影響。 - 慢速請求防護:管理連接埠依介面限制請求本體的讀取,一般介面須在 60 秒內傳完;備份還原、升級包與檔案上傳等大檔案介面不限總時長,但須持續傳送並保持每秒 4 KiB 以上的平均速率。
Web 服務
- 分路徑後端去掉前綴(#86):分路徑後端新增「轉發時去掉路徑前綴」,
/api/zyqd/abc發往後端時為/abc,後端位址自帶的路徑接在前面,對應 nginx 的proxy_pass http://後端/;;匯入 nginx 設定時自動轉換。 - 訪客來源連接埠(#83):開啟「新增 X-Forwarded-*」後向後端傳送
X-Real-Port與X-Forwarded-For-Port;Gately 位於 CDN/反向代理之後時,可在全域設定中指定「真實連接埠請求標頭」。 - 雙層 Gately(#81):外層只做 WAF、內層負責登入時,兩層填寫相同的驗證標記金鑰,外層站台開啟「信任後端驗證標記」,內層驗證過的訪客在外層同樣略過 WAF。
備份與還原(#85)
還原設定新增「保留目前管理員帳號」:備份裡的帳號、API 權杖與管理介面的第三方登入設定保持目前值,備份可以不含 account.json,適合把另一台實例的設定遷移過來。詳見 設定 · 備份與還原。
問題修復
- 動態網域(#84):dynv6 記錄的主網域填成
dynv6.net、子網域填xxxx時,同步與刪除服務商記錄不再回傳 404,會自動比對到xxxx.dynv6.net區域。
效能
- 封鎖名單在大量封鎖時增刪不再重建網段清單;站台路由在精確網域未命中時只比較萬用網域;限流與驗證失敗記錄的過期清理改為每秒最多一次。
- 站台基本驗證與 WebDAV 快取驗證通過的 bcrypt 結果 10 分鐘,每個請求的 CPU 開銷從約 85 毫秒降到微秒級。
- 連接埠轉發在無法使用 splice 時重複使用緩衝區;即時連線清單只建構回傳的 500 列;來源類請求標頭清理不再配置記憶體。
- 管理介面的站台統計、Docker 狀態與日誌、終端機工作階段清單在瀏覽器分頁隱藏時停止輪詢。
升級提示
- Docker 拉取新映像後重建容器;OpenWrt 覆蓋安裝新的
.apk/.ipk;飛牛在應用中心手動安裝新版.fpk;其他部署方式可在「系統設定」中線上升級。 - 升級後已登入的工作階段繼續有效;需要讓所有裝置重新登入時使用「登出所有裝置」。