跳至正文

身分驗證、工作階段與服務範圍

fn-knock 的身分驗證用來保護閘道後方的服務,不等同於 Docker 或 OpenWrt 管理介面的存取密碼。前者決定訪客能否通過閘道;後者只保護管理後台入口。

一次登入會經過哪些流程

從非本機來源存取受保護服務時,通常會經過下列步驟:

  1. 閘道依映射規則判斷該服務是否需要身分驗證,並檢查是否已有來源授權,或目前 Host 的進階驗證臨時憑據。
  2. 若沒有其他放行路徑,登入頁面會執行已啟用的人機驗證。
  3. 依登入模式完成身分驗證。
  4. 建立工作階段,並依工作階段設定決定是否授權目前 IP。
  5. 存取 Host 或受保護的協定映射時,再檢查該憑據的服務範圍。

區域網路、Loopback 與其他私有網路來源預設屬於本地豁免,不會完整經過上述流程,憑據的服務範圍也不會用來限制這些來源。驗證公網存取時,請使用真實的外部網路。

登入重新導向遭暫停時

當身分驗證頁面偵測到目標指回目前驗證頁、同一目標持續發生重新導向迴圈,或返回位址不安全時,會暫停自動重新導向並顯示提示。此時請勿反覆重新整理驗證頁;請回到原始服務 Host 重新發起存取,再依序檢查身分驗證 Host、根網域與 Cookie Scope、存取通訊協定,以及前置 Proxy 傳遞的 HostX-Forwarded-HostX-Forwarded-Proto。Edge 平台不應快取登入或重新導向回應。

登入模式

模式可用方式適用情境
TOTP 登入模式TOTP;完成綁定後可使用 Passkey、QQ 與其他外部帳號個人使用,或需要硬體/生物辨識快速登入
帳號密碼登入模式使用者名稱與密碼多人共用,且需要獨立帳號

兩種模式可在 驗證設定 中切換。切換前,系統會檢查必要的密碼或 TOTP 是否已就緒;切換後,由未啟用方式建立的工作階段必須重新登入。

切換操作會同步帳號名稱、權限與關聯的 TOTP;重複執行不會重複建立帳號,也不會重設已設定的密碼或複製快速登入綁定。切換至帳號密碼模式前,每個對應建立的帳號都必須設定密碼;切回 TOTP 模式前,每個帳號都必須關聯至仍然存在的 TOTP。確認切換後,系統會銷毀由停用登入方式所建立的工作階段:

切換目標將失效的工作階段
帳號密碼模式TOTP、Passkey 與 OIDC 工作階段
TOTP 模式帳號密碼工作階段

憑據與權限的關係

  • TOTP 是可自訂名稱的身分憑據,可限制它能存取的子網域與協定映射;與其關聯的 Passkey、QQ 與其他 OIDC 登入方式會繼承相同範圍。
  • 帳號密碼模式下的帳號也能設定服務範圍。
  • 服務範圍設為 自訂 時,權限視窗會分別列出受保護的子網域、內建選擇頁,以及已啟用驗證的 TCP/UDP 協定映射。未選取任何範圍項目時,該憑據無法進入任何受保護入口;內建選擇頁 /__select__ 也必須單獨選取。
  • 對於開啟 要求登入 的 Host,有效的手動來源授權可獨立放行;登入後自動建立的 IP 授權,通常能讓同一來源繼續存取。自動授權不會覆蓋瀏覽器目前攜帶的服務範圍拒絕;沒有可用的來源授權時,閘道才會繼續依工作階段與憑據範圍判斷。
  • 登入後的自動 IP 授權由 系統設定 → 工作階段 控制。它是以來源 IP 放行的路徑,不是憑據範圍控制;若手動允許清單設得過寬,該來源即使未透過瀏覽器登入,也可能直接進入受保護的 Host。
  • 服務範圍受限的登入憑據不會建立可放行任意 Host 或原始連接埠的通用自動 IP 授權,以免來源 IP 擴大憑據範圍。這包括受限的 TOTP、其關聯的 Passkey/OIDC,以及服務範圍受限的帳號密碼帳號;這些憑據不適合用於直連模式的自動放行。
  • 自訂範圍可以例外選取特定協定映射。登入後 IP 授權未停用時,系統會依精確的 TCP/UDP + 對外連接埠 與目前來源 IP 建立範圍內授權,有效時間沿用工作階段設定;它不會放行未選取的協定映射,也不會變成通用 IP 允許清單。

管理介面密碼不是閘道登入憑證

Docker、OpenWrt 等部署方式會先要求設定管理介面密碼。此密碼保護的是 7991 管理入口;它不會自動成為訪客登入閘道服務的帳號,也不能取代 TOTP 或帳號密碼驗證。

在使用獨立管理介面密碼的平台上,如果子網域映射中加入 fn-knock 管理介面,身分驗證清單會顯示 管理介面 權限。為特定 TOTP 或帳號啟用後,該身分透過受保護的子網域存取管理介面時,可免除第二次輸入介面密碼;這不會開放原始 7991 連接埠,也不會讓該身分取得未選取服務 Host 的權限。

匯入與匯出憑據

驗證設定 → 更多操作 → 匯入/匯出憑證 會依目前的登入模式運作:

目前模式匯出內容
TOTPTOTP Secret、名稱與權限
帳號密碼帳號、密碼雜湊、權限以及關聯的 TOTP Secret

匯入檔案必須是 JSON,管理頁面的上限為 512 KB。匯入時會合併可識別的記錄,並略過相同 ID、相同使用者名稱、相同 Secret 或檔案內的重複項目;Passkey 與外部帳號綁定不會還原。匯出內容足以用來登入,應比照 .knock 系統備份的等級妥善保護。

進階驗證不是登入方式

當請求命中來源、路徑、Header、Query 或 HTTP 方法規則時,子網域進階驗證會簽發僅限目前 Host 使用的臨時憑據。它不會建立系統登入工作階段、不會產生登入後 IP 授權,也不會繼承或修改 TOTP、Passkey、OIDC 與帳號密碼的服務範圍。

這是一條獨立的放行路徑:即使目前瀏覽器工作階段的服務範圍不包含該 Host,只要請求符合進階驗證規則,仍可取得目前 Host 的臨時存取權。因此,不要用它替既有憑據「再加一道限制」;若要限縮憑據範圍,應直接修改該憑據本身的服務範圍。規則設定請參閱子網域進階驗證

建議設定順序

  1. 設定一種主要登入方式,並準備至少一組備援憑據。
  2. 為需要隔離的人員或裝置建立獨立憑據。
  3. 替每組憑據設定可存取的子網域範圍。
  4. 再替常用裝置綁定 Passkey、QQ 或其他外部帳號登入。
  5. 最後調整工作階段有效時間、記住我 與登入後 IP 授權原則。

QQ 群組:1081609274