Next Terminal 實戰:內網無密碼安全登錄

本文首發于 Anyeの小站,點擊閱讀原文體驗更加。

前言

在日常的 HomeLab 或小型私有云環境中,我們常常通過反向代理(如 Nginx、Caddy 等)將內網服務暴露到公網,方便遠程訪問。然而,一旦端口映射開啟、公網可達,安全問題便隨之而來:未經身份驗證的訪問、暴力破解、爬蟲掃描、甚至未授權的數據泄露,都可能悄無聲息地發生。

盡管許多服務本身提供登錄功能,但它們的安全性、認證方式和強度千差萬別。有些甚至沒有賬號體系,只靠 IP 白名單或路徑隱藏,這在現代安全要求下顯得捉襟見肘。

那么,有沒有一種方式,無需修改后端服務代碼,也不依賴其自身權限體系,就能統一接入一層強認證機制?

當然可以,你可以選擇使用傳統的 Nginx 或 Caddy,通過集成 OAuth2 Proxy、Authelia、Keycloak 等中間件來實現統一認證,甚至自建 SSO(如 Logto 等)。這些方案功能強大,適用于企業級部署或需要與現有認證體系(如 LDAP、OAuth、SAML)對接的場景。

但對于個人用戶、小型服務部署而言,它們往往存在以下幾個問題:

  • 配置復雜:涉及多個組件,部署流程繁瑣,調試成本高
  • 依賴繁重:需要運行額外的認證服務,資源占用較高
  • 不支持 WebAuthn 或支持不完善:大多數方案仍以密碼為主,難以原生支持指紋、人臉識別或硬件密鑰等現代認證方式

相比之下,Next Terminal 提供了一個輕量、開箱即用的 WebAuthn 登錄前置方案,將認證機制直接嵌入到反向代理流程中,無需部署額外服務、也無需修改后端應用,僅通過簡單配置即可為你的服務加上一層現代化的訪問控制。

希望通過本文的實踐記錄,帶你體驗一種更簡單、更安全、更優雅的服務接入方式。

基礎知識

WebAuthn

WebAuthn(Web Authentication) 是由 W3C 和 FIDO 聯盟共同制定的一套基于公鑰加密的身份認證標準,目標是替代傳統的用戶名 + 密碼登錄方式,提升網絡身份驗證的安全性與用戶體驗。

用一句話概括它的功能和效果就是:

讓用戶可以用指紋、人臉識別、U 盾、USB 安全密鑰等“硬件”方式登錄網站或服務,而無需輸入密碼。

與傳統認證方式相比,WebAuthn 具有以下幾個顯著優勢:

  • ? 無密碼登錄:用戶無需記憶密碼或擔心被泄露
  • 🔐 抗釣魚:認證過程基于設備生成的私鑰,綁定特定網站,攻擊者無法偽造
  • 🧱 硬件級安全性:可集成指紋、人臉識別、YubiKey 等 FIDO2 安全密鑰
  • 🌍 跨平臺支持廣泛:主流瀏覽器(Chrome、Firefox、Safari 等)與操作系統(Windows Hello、Touch ID、Android)均已支持

在 WebAuthn 中,每個用戶設備會為每個網站生成一對密鑰,私鑰保存在本地或硬件設備中,服務器只保存公鑰。因此,即便服務端數據庫被攻破,攻擊者也無法用公鑰“偽裝”用戶。

Next Terminal

https://next-terminal.typesafe.cn/

Next Terminal 是一款開源的輕量級堡壘機與交互審計系統,旨在為 IT 運維人員和 HomeLab 用戶提供集中的、安全的遠程訪問解決方案。它支持多種遠程訪問協議,包括 RDP、SSH、VNC、Telnet 和 Kubernetes,允許用戶通過統一的 Web 界面管理不同協議下的服務器與設備。

Podman

Podman(意為 Pod Manager)是由紅帽公司主導開發的一款遵循 OCI(Open Container Initiative)標準的開源容器引擎,可用于創建、運行、管理容器、鏡像、存儲卷及 Pod(容器組)等對象 。

在這里選擇 Podman 主要是由于其不依賴 Dockerd 守護進程,減少內存占用(如同一容器較 Docker 少用約 20MB/容器),更適合家庭云、小型 VPS 部署環境,空出更多內存供程序使用。

準備工作

  • 具有公網 ip 的服務器一臺
  • 反向代理基本知識
  • 支持 WebAuthn 認證的設備(如 Windows Hello、Touch ID、Android 生物認證等)

正式開始

服務器選型

選擇合適的服務器環境對于 Next Terminal 的穩定運行和性能表現至關重要。在這里我推薦使用 https://buy.cloud.tencent.com/lighthouse 銳馳型套餐,其具有以下優勢:

  • 價格優惠:騰訊云銳馳型輕量應用服務器的起始價格為每月 40 元,提供 2 核 CPU、1 GB 內存、40 GB SSD 云盤和 200M 峰值帶寬,適合個人用戶和小型部署使用。
  • 不限流量:該配置不限公網流量,雖然不保證帶寬,但是實際測試情況可以保證高帶寬瞬時使用。
  • 網絡優勢:BGP 網絡,眾多地域可選擇,能夠有效降低網絡延遲。

當然,如果你有別的選擇,也可以參考后續的教程進行部署,本文將采用下述配置進行演示:

image-JZAf.png

重裝系統

這里選擇將系統 dd 成 Alpine,參考該項目命令:

https://cnb.cool/bin456789/reinstall

curl -O https://cnb.cool/bin456789/reinstall/-/git/raw/main/reinstall.sh || wget -O reinstall.sh $_
bash reinstall.sh alpine
reboot

請在此添加圖片描述

安裝 Podman

根據官方文檔,采用以下命令進行安裝,參考:https://wiki.alpinelinux.org/wiki/Podman

# 安裝 Podman、podman-compose、curl和iptables
apk add podman podman-compose curl iptables# 啟用 cgroups
rc-update add cgroups# 啟動 cgroups
rc-service cgroups start

請在此添加圖片描述

安裝 Next Terminal

根據官網文檔,獲取配置:https://docs.next-terminal.typesafe.cn/install/container-install.html#%E4%BD%BF%E7%94%A8-podman-%E5%AE%89%E8%A3%85

curl -sSL https://f.typesafe.cn/next-terminal/docker-compose-postgres-aliyun.yml > docker-compose.yml
curl -sSL https://f.typesafe.cn/next-terminal/config-postgres.yaml > config.yaml

由于 Podman 沒有守護進程,需要運行下述命令配置開機自啟動:

# 創建 openrc 服務文件
cat <<EOF > /etc/init.d/next-terminal
#!/sbin/openrc-runSERVICE_NAME="next-terminal"PROJECT_DIR="$(pwd)"description="Service of \${SERVICE_NAME}"depend() {need net
}start() {ebegin "Starting \${SERVICE_NAME}"cd "\${PROJECT_DIR}" || return 1/usr/bin/podman-compose up -d && eend 0 || eend 1
}stop() {ebegin "Stopping \${SERVICE_NAME}"cd "\${PROJECT_DIR}" || return 1/usr/bin/podman-compose down && eend 0 || eend 1
}restart() {ebegin "Restarting \${SERVICE_NAME}"cd "\${PROJECT_DIR}" || return 1/usr/bin/podman-compose down && /usr/bin/podman-compose up -d && eend 0 || eend 1
}status() {cd "\${PROJECT_DIR}" || return 1RUNNING=\$(/usr/bin/podman-compose ps --quiet)if [ -n "\$RUNNING" ]; thenecho "\${SERVICE_NAME} is running"return 0elseecho "\${SERVICE_NAME} is not running"return 1fi
}
EOF# 賦予執行權限
chmod +x /etc/init.d/next-terminal# 添加到默認運行級別
rc-update add next-terminal default# 啟動服務
rc-service next-terminal start

請在此添加圖片描述

此時 Next Terminal 就成功安裝了,接下來進入配置階段。

域名解析

由于后續需要使用多個子域名反代內網服務,這里選擇將一個四級泛域名解析到服務器 ip,如:*.nt.anye.xyz ,同時添加一個三級域名供 Next Terminal 面板訪問使用,如:nt.anye.xyz

基本配置

初始化

訪問 8088 端口打開面板,按照提示進行初始化操作:

請在此添加圖片描述

進入面板:

請在此添加圖片描述

配置證書

點擊側邊欄 資源管理 - 證書管理 ,這里我將采用本地證書的方式進行演示:

請在此添加圖片描述

點擊 新建 - 本地導入

請在此添加圖片描述

提示:這里也可以采用容器內文件路徑的方式進行導入,如:
*證書:/ssl/nt.anye.xyz/cert.crt
*私鑰:/ssl/nt.anye.xyz/cert.key
注意需要修改 compose 配置文件以將文件映射到容器中。
這樣可以采用諸如 Certimate 等工具自動更新證書,具體可以參考:
https://www.anye.xyz/archives/biEj2Hxb

點擊 設為默認:

請在此添加圖片描述

系統設置

反向代理服務器

點擊 系統設置 - 反向代理服務器 ,點擊 啟用 ,按需填寫添加端口等信息,域名填寫面板的域名,如此處:nt.anye.xyz,點擊提交:

請在此添加圖片描述

身份認證

點擊 身份認證,啟用通行令牌登陸,外部訪問域名填寫面板域名,如此處:nt.anye.xyz;允許使用通行令牌的來源填寫面板訪問鏈接,如此處:https://nt.anye.xyz ,點擊提交。

請在此添加圖片描述

配置通行密鑰

點擊右上角進入 個人中心,點擊 通行密鑰 ,創建:

請在此添加圖片描述

會喚起系統自帶的 WebAuthn 認證程序:

請在此添加圖片描述

也可以使用其他兼容的 WebAuthn 認證:

請在此添加圖片描述

添加后,即可使用指紋 🫆 進行登陸 Next Terminal 。這里建議同時配置 雙因素認證。

Web 資產

鋪墊了這么多,終于進入了反向代理的環節:

點擊側邊欄 資源管理 - Web資產 ,點擊新建:

請在此添加圖片描述

按照正常添加反向代理的內容進行填寫,如此處:

域名:反向代理后用于訪問的域名

入口路徑(可選):為 Next Terminal 跳轉時攜帶的路徑

目標服務器:源站訪問鏈接

請在此添加圖片描述

點擊保存。

此時四級泛域名解析就派上了用場,每次添加內網服務時,不需要再去 DNS 服務商那里解析服務器 ip,同時避免了 DNS 掃描可能會暴露的內網服務。

測試

新建窗口訪問創建的反向代理進行測試,未授權的情況下會跳轉到 Next Terminal 認證頁面,可以使用通行密鑰實現秒登陸。

請在此添加圖片描述

確保安全訪問:

請在此添加圖片描述

更進一步,你還可以配置訪客用戶,將資產按需進行分配,這在需要朋友進行幫助時,起到授權訪問,防止橫移的效果,避免遠程電腦產生的文件泄露等問題。

請在此添加圖片描述

后記

在本文中只提到了 Next Terminal 其中的一個用途,它還有更多的資產管理功能,功能豐富,界面美觀,也未嘗不可嘗試,可以訪問其官網了解更多功能:https://next-terminal.typesafe.cn/,如果您有意向選擇其專業版,歡迎使用我的推廣鏈接

https://license.typesafe.cn/pricing?code=NTKNtV7FDP

請在此添加圖片描述

請在此添加圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/91959.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/91959.shtml
英文地址,請注明出處:http://en.pswp.cn/web/91959.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

WebSocket斷線重連機制:保障實時通信的高可用性

一、為什么需要斷線重連&#xff1f;WebSocket雖提供全雙工通信能力&#xff0c;但實際環境中連接穩定性受多重威脅&#xff1a;??網絡層波動??&#xff1a;Wi-Fi切換、4G/5G信號抖動&#xff08;觸發onclose事件&#xff09;??服務端異常??&#xff1a;服務器宕機、主…

低空三維多物理場耦合風洞試驗,保證飛行器的性能安全是低空飛行的底線,是低空經濟發展的基礎

風墻\風矩陣開發背景&#xff1a;2024年被稱為中國低空經濟產業發展元年&#xff0c;國家發改委提出“無安全、不低空”原則&#xff0c;要求低空經濟產業在技術研發、適航認證、運營管理各環節優先保障安全。目前無人機及其他低空飛行器技術已深度融入軍事、民用與工業領域&am…

中文基于Qwen3-235B-2507蒸餾數據集的操作

中文基于Qwen3-235B-2507蒸餾數據集的操作 flyfish 方式1 from datasets import load_dataset from transformers import AutoTokenizer# -------------------------- 配置參數 -------------------------- TOKENIZER_PATH "/media/models/models/Qwen/Qwen3-8B/" #…

論文閱讀筆記:《Dataset Distillation by Matching Training Trajectories》

論文閱讀筆記&#xff1a;《Dataset Distillation by Matching Training Trajectories》1.動機與背景2.核心方法&#xff1a;軌跡匹配&#xff08;Trajectory Matching&#xff09;3.實驗與效果4.個人思考與啟發主體代碼算法邏輯總結一句話總結&#xff1a; 這篇論文通過讓合成…

STM32標準庫的工程創建

一.所需文件說明 1.啟動文件startup_xxxx.s 作用&#xff1a;初始化堆棧指針、復位向量、中斷向量表&#xff0c;執行 SystemInit() 后跳轉到 main()。 位置&#xff1a;Libraries/CMSIS/Device/ST/STM32Fxx/Source/Templates/arm/ 文件名&#xff1a; startup_stm32f10x_l…

k8s ceph sc 設置文件系統格式化參數

前言 默認的 sc 文件系統 inode 太少,對于小文件場景,往往會出現容量沒滿,inode 已經用盡的情況,本文說明如何設置 inode。 說明 本文使用的是 rook-ceph 部署的 ceph 作為存儲后端。 xfs 文件系統 sc 創建帶格式化參數的 xfs 文件系統的 sc allowVolumeExpansion: t…

關于Npm和Nvm的用法

npm是個什么東西 npm是什么 node package managernodejs包管理工具處理復雜的包的管理的問題那么使用npm以后就不需要從前端引入相應的代碼和文件等。 npm相關的命令 查看版本npm -v 更新npm install npm5.4.0 更新到最新版本npm install npmlatest 初始化項目 npm ini…

MyBatis高效查詢:簡化JDBC開發實戰

Mybatis MyBatis 是一款優秀持久層(DAO)框架&#xff0c;用于簡化 JDBC 開發 &#xff0c;原是 Apache 開源項目 iBatis&#xff0c;經歷遷移改名&#xff0c;2010 年從 Apache 遷到 Google Code 并改名&#xff0c;2013 年 11 月遷至 GitHub&#xff0c;官網為 https://mybati…

系統信息及進程管理命令

系統信息及進程管理 一、系統信息查看 常用命令&#xff1a;uname、hostnam、hostnamectl、uptime、df、du、free、lscpu 1、uname (1)、命令簡介 uname 是一個在 Unix 和類 Unix 系統&#xff08;如 Linux、macOS&#xff09;中常用的命令行工具&#xff0c;用于顯示系統信息。…

【Z字形變換】

代碼思路分析&#xff1a;Z 字形變換 1. 邊界情況處理 if (r 1 || r > n) return s;r 1&#xff1a;只有一行&#xff0c;直接返回原字符串&#xff08;無需變換&#xff09;。r > n&#xff1a;行數大于等于字符串長度&#xff0c;每行只有一個字符&#xff0c;直接返…

VBA中類的解讀及應用第二十五講:把源數據賦給類利用類完成查找

《VBA中類的解讀及應用》教程【10165646】是我推出的第五套教程&#xff0c;目前已經是第一版修訂了。這套教程定位于最高級&#xff0c;是學完初級&#xff0c;中級后的教程。類&#xff0c;是非常抽象的&#xff0c;更具研究的價值。隨著我們學習、應用VBA的深入&#xff0c;…

Vue3核心語法進階(Hook)

Vue3 自定義 Hook&#xff1a;讓你的代碼像樂高一樣“可復用”&#xff01;大家好&#xff0c;我是你們的前端小伙伴&#xff01;上一篇我們聊了 Vue3 的生命周期&#xff0c;今天咱們繼續深入 Vue3 的核心利器——自定義 Hook&#xff08;Custom Hook&#xff09;。如果你已經…

工控領域協議之Modbus

Modbus 是一種通信協議&#xff0c;用于工業自動化領域中的設備之間的通信。它是一種串行通信協議&#xff0c;廣泛應用于連接不同設備、傳感器和執行器的工業控制系統。 Modbus 在工業控制系統、自動化設備、能源管理系統等領域得到廣泛應用。 Modbus 協議的基本特點&#xff…

大件垃圾識別 mAP↑28%:陌訊多模態融合算法實戰解析

一、行業痛點&#xff1a;大件垃圾識別的現實困境在城市環衛智能化轉型過程中&#xff0c;大件垃圾&#xff08;如廢舊家具、電器等&#xff09;的自動化識別與分揀成為關鍵環節。據住建部《城市環境衛生發展報告》顯示&#xff0c;傳統人工分揀模式下大件垃圾識別準確率不足 6…

vk框架或者普通函數封裝的一些函數可以拿取使用【會持續更新】

1.身份證校驗【通用】/*** function isIDCard* description 判斷是否為有效的身份證號碼。* param {string} idCard - 待驗證的身份證號碼。* returns {boolean} 返回驗證結果。*/ pubFun.isIDCard function (idCard) {// 身份證號碼為15位或者18位&#xff0c;15位時全為數字…

如何給Word和WPS文檔添加密碼或取消密碼

要保護Word和WPS文檔&#xff0c;可以為它們加密&#xff0c;加密有兩類&#xff1a;打開密碼和修改密碼。密碼設置有兩個入口&#xff0c;一個是在另存為&#xff0c;一個是在文件菜單。Word和WPS文字的路徑略有不同&#xff0c;微軟Office和WPS的其他套件也是如此操作。一、W…

uni-app項目gitignore文件示例

uni-app 忽略以下文件和目錄 DS_Store 忽略 UniApp 編譯生成的小程序相關目錄 unpackage/ uni_modules/ 忽略編輯器自動生成的文件 idea/ vscode/ 忽略日志文件 logs/ 忽略臨時文件 temp/ 忽略構建工具自動生成的文件 build/ 忽略 npm 安裝的包文件 package-lock.json yarn.loc…

LeetCode 135:分糖果

LeetCode 135&#xff1a;分糖果問題本質與核心挑戰 給定孩子的評分數組&#xff0c;需滿足 “每個孩子至少1顆糖果&#xff0c;相鄰評分高的孩子糖果更多”&#xff0c;求最少糖果總數。核心挑戰&#xff1a; 相鄰約束是雙向的&#xff08;左→右和右→左都需滿足&#xff09;…

【QT】安裝與配置

個人主頁&#xff1a;Guiat 歸屬專欄&#xff1a;QT 文章目錄1. QT簡介與準備工作1.1 什么是QT1.2 QT的版本選擇1.3 系統要求檢查2. QT安裝方式詳解2.1 官方在線安裝器2.2 離線安裝包2.3 包管理器安裝3. Windows平臺安裝配置3.1 Windows安裝步驟3.2 環境變量配置3.3 Visual Stu…

Java從入門到精通 - 算法、正則、異常

算法、正則、異常 此筆記參考黑馬教程&#xff0c;僅學習使用&#xff0c;如有侵權&#xff0c;聯系必刪 文章目錄算法、正則、異常1. 常見算法1.1 簡單認識算法1.1.1 什么是算法&#xff1f;1.1.2 為什么要學習算法&#xff1f;1.2 排序算法1.2.1 冒泡排序1.2.1.1 實現冒泡排…