惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

雷峰网
雷峰网
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
大猫的无限游戏
大猫的无限游戏
Google DeepMind News
Google DeepMind News
V
V2EX
T
The Blog of Author Tim Ferriss
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Hugging Face - Blog
Hugging Face - Blog
Stack Overflow Blog
Stack Overflow Blog
I
InfoQ
博客园_首页
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Last Week in AI
Last Week in AI
Recent Announcements
Recent Announcements
Vercel News
Vercel News
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
T
Tailwind CSS Blog
美团技术团队
Martin Fowler
Martin Fowler
宝玉的分享
宝玉的分享
Blog — PlanetScale
Blog — PlanetScale
GbyAI
GbyAI
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
J
Java Code Geeks

Anyeの小站

PlayGuard,让你的播放器老实点! Peg - 命令行便签 · 把终端输出钉上布告板 2025 年终总结:折腾不止,热情常青 告别公网暴露风险:mTLS助你构建家里云安全边界 🚀 0 代码部署:Halo 博客与企业门户系统 B站跟随系统深色模式脚本——让你的B站体验更丝滑 【1024抽奖】EdgeOne下线源站防护?这个办法更简单! 全新!Edge 还是卸载不掉?来试试这个! 混元模型玩家必看:CNB API 不限量调用! 1Panel 应用商店如何上架应用 用了 EdgeOne 降本增效,源站却可能裸奔? 降本增效!上云真香! 在线重装 Proxmox VE SSL证书申请老出问题?这套组合直接帮你搞定! 🌐 森屿云:让数字化转型像呼吸一样自然 1Panel v2 首发体验(alpha) Vscode/Code-Server 安装中文包——CI/CD DockerHub Mirror 终极解决方案——零成本,速度超快! 本地跑不动 QwQ?快用 CNB,免费运行满血 QwQ! Docker Push 巨慢?Skopeo 来拯救 2024 年终总结:与 17170 位读者相遇的旅程 云厂 200Mbps 小鸡,家里云的希望 Halo 插件 thyuu-embed 主题样式注入模板 Windows 11 卸载 Edge 小破站 6 级萌新前来挑战硬核会员,答题分享 手机系统杂谈 1Panel 自建邮局 - Docker Mailserver 1Panel 推送 SSL 证书到阿里云、腾讯云 整了几个简洁的单页,欢迎来扒 1Panel 部署 Logto 对接自有平台
Next Terminal 实战:内网无密码安全登录
Anye · 2025-08-04 · via 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

image-YKWk.png

安装 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

image-GuCm.png

安装 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-run

SERVICE_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 1
  RUNNING=\$(/usr/bin/podman-compose ps --quiet)
  if [ -n "\$RUNNING" ]; then
    echo "\${SERVICE_NAME} is running"
    return 0
  else
    echo "\${SERVICE_NAME} is not running"
    return 1
  fi
}
EOF

# 赋予执行权限
chmod +x /etc/init.d/next-terminal

# 添加到默认运行级别
rc-update add next-terminal default

# 启动服务
rc-service next-terminal start

image-koyF.png

此时 Next Terminal 就成功安装了,接下来进入配置阶段。

域名解析

由于后续需要使用多个子域名反代内网服务,这里选择将一个四级泛域名解析到服务器 ip,如:*.nt.anye.xyz ,同时添加一个三级域名供 Next Terminal 面板访问使用,如:nt.anye.xyz

基本配置

初始化

访问 8088 端口打开面板,按照提示进行初始化操作:

image-PQbi.png

进入面板:

image-AUmf.png

配置证书

点击侧边栏 资源管理 - 证书管理 ,这里我将采用本地证书的方式进行演示:

image-svoP.png

点击 新建 - 本地导入

image-Onlm.png

提示:这里也可以采用容器内文件路径的方式进行导入,如:

*证书:/ssl/nt.anye.xyz/cert.crt

*私钥:/ssl/nt.anye.xyz/cert.key

注意需要修改 compose 配置文件以将文件映射到容器中。

这样可以采用诸如 Certimate 等工具自动更新证书,具体可以参考:

https://www.anye.xyz/archives/biEj2Hxb

点击 设为默认

image-ahab.png

系统设置

反向代理服务器

点击 系统设置 - 反向代理服务器 ,点击 启用 ,按需填写添加端口等信息,域名填写面板的域名,如此处:nt.anye.xyz,点击提交:

image-eGlJ.png

身份认证

点击 身份认证,启用通行令牌登陆,外部访问域名填写面板域名,如此处:nt.anye.xyz;允许使用通行令牌的来源填写面板访问链接,如此处:https://nt.anye.xyz ,点击提交。

image-uQQD.png

配置通行密钥

点击右上角进入 个人中心,点击 通行密钥 ,创建:

image-QiMo.png

会唤起系统自带的 WebAuthn 认证程序:

image-coED.png

也可以使用其他兼容的 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