身分驗證、工作階段與服務範圍
fn-knock 的身分驗證用來保護閘道後方的服務,不等同於 Docker 或 OpenWrt 管理介面的存取密碼。前者決定訪客能否通過閘道;後者只保護管理後台入口。
一次登入會經過哪些流程
從非本機來源存取受保護服務時,通常會經過下列步驟:
- 閘道依映射規則判斷該服務是否需要身分驗證,並檢查是否已有來源授權,或目前 Host 的進階驗證臨時憑據。
- 若沒有其他放行路徑,登入頁面會執行已啟用的人機驗證。
- 依登入模式完成身分驗證。
- 建立工作階段,並依工作階段設定決定是否授權目前 IP。
- 存取 Host 或受保護的協定映射時,再檢查該憑據的服務範圍。
區域網路、Loopback 與其他私有網路來源預設屬於本地豁免,不會完整經過上述流程,憑據的服務範圍也不會用來限制這些來源。驗證公網存取時,請使用真實的外部網路。
登入重新導向遭暫停時
當身分驗證頁面偵測到目標指回目前驗證頁、同一目標持續發生重新導向迴圈,或返回位址不安全時,會暫停自動重新導向並顯示提示。此時請勿反覆重新整理驗證頁;請回到原始服務 Host 重新發起存取,再依序檢查身分驗證 Host、根網域與 Cookie Scope、存取通訊協定,以及前置 Proxy 傳遞的 Host、X-Forwarded-Host 與 X-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 的權限。
匯入與匯出憑據
驗證設定 → 更多操作 → 匯入/匯出憑證 會依目前的登入模式運作:
| 目前模式 | 匯出內容 |
|---|---|
| TOTP | TOTP Secret、名稱與權限 |
| 帳號密碼 | 帳號、密碼雜湊、權限以及關聯的 TOTP Secret |
匯入檔案必須是 JSON,管理頁面的上限為 512 KB。匯入時會合併可識別的記錄,並略過相同 ID、相同使用者名稱、相同 Secret 或檔案內的重複項目;Passkey 與外部帳號綁定不會還原。匯出內容足以用來登入,應比照 .knock 系統備份的等級妥善保護。
進階驗證不是登入方式
當請求命中來源、路徑、Header、Query 或 HTTP 方法規則時,子網域進階驗證會簽發僅限目前 Host 使用的臨時憑據。它不會建立系統登入工作階段、不會產生登入後 IP 授權,也不會繼承或修改 TOTP、Passkey、OIDC 與帳號密碼的服務範圍。
這是一條獨立的放行路徑:即使目前瀏覽器工作階段的服務範圍不包含該 Host,只要請求符合進階驗證規則,仍可取得目前 Host 的臨時存取權。因此,不要用它替既有憑據「再加一道限制」;若要限縮憑據範圍,應直接修改該憑據本身的服務範圍。規則設定請參閱子網域進階驗證。
建議設定順序
- 設定一種主要登入方式,並準備至少一組備援憑據。
- 為需要隔離的人員或裝置建立獨立憑據。
- 替每組憑據設定可存取的子網域範圍。
- 再替常用裝置綁定 Passkey、QQ 或其他外部帳號登入。
- 最後調整工作階段有效時間、
記住我與登入後 IP 授權原則。
