雨云搭建 Authelia 统一登录网关

用雨云 KVM 云服务器部署 Authelia 统一登录网关:Nginx auth_request 给 Vaultwarden/Cloudreve 等自托管应用加 SSO 与 TOTP 二次验证
发布于
22

前面陆陆续续在雨云上搭了不少自托管应用——网盘、密码库、书签、看板……每个都单独记账号密码,既难记又不安全,有的应用自身还不支持二次验证。Authelia 是一个开源认证网关,放在反向代理前面,给多个内部应用提供统一登录(SSO)和 TOTP 二次验证。本文在雨云 KVM 云服务器上部署 Authelia,并通过 Nginx 的 auth_request 把 Vaultwarden、Cloudreve 等应用护在身后,做到”一次登录、处处通行”。

为什么需要统一认证网关

  • 一处登录,处处通行:多个应用共享一套账号和会话,不用每个都登一遍。
  • 统一开 2FA:很多轻量应用自身没有二次验证,交给网关统一做 TOTP,安全水位整体拉高。
  • 集中防护:弱口令、爆破、会话过期都在网关这一层处理,后面的应用可以关掉各自的公网暴露。
  • 和监控类工具不重叠:它管的是”谁能进”,不是”网站在不在”(那是 Uptime Kuma 的事)。

一、架构与前置

典型架构是:用户 → Nginx 反向代理 → Authelia 校验 → 后端应用。

前置准备:

  1. 一台雨云 KVM 云服务器(优惠码 admin01 五折,7 天无理由退款),系统 Debian 12,到手先按 VPS 到手第一件事 做安全初始化。
  2. 已经跑好 Nginx 反代(可参考 手动搭建 LNMP 或后面用 Portainer 管容器),并且你的应用已经通过域名访问。
  3. 新手选型看 VPS 怎么选不踩坑

Authelia 自身监听 9091,它不直接对外服务页面,而是由 Nginx 通过子请求调用。

二、用 Docker 跑起 Authelia

目录与 docker-compose.yml 示例:

services:
  authelia:
    image: authelia/authelia:latest
    container_name: authelia
    restart: unless-stopped
    volumes:
      - ./config:/config
    ports:
      - "9091:9091"
    environment:
      - TZ=Asia/Shanghai

config/configuration.yml 关键点(节选):

theme: dark
jwt_secret: 换成随机长字符串
session:
  secret: 换成另一个随机长字符串
  expiration: 1h
  inactivity: 30m
access_control:
  default_policy: deny
  rules:
    - domain: auth.example.com
      policy: bypass          # 登录页自身放行
    - domain: app.example.com
      policy: one_factor      # 至少密码
    - domain: secret.example.com
      policy: two_factor      # 强制二次验证
totp:
  issuer: 雨云自托管

用户可以直接写在 config/users_database.yml 里(演示够用),生产也可接 LDAP/OpenID。生成随机密钥用:

openssl rand -hex 32

三、Nginx 接入 auth_request

在 Nginx 的 server 块里,先放一段 Authelia 登录页与校验端点的转发:

location /authelia {
    internal;
    proxy_pass http://127.0.0.1:9091;
    proxy_set_header Host $host;
}
location /authelia/ {
    proxy_pass http://127.0.0.1:9091/;
}

然后给需要保护的应用加一行校验(以 Vaultwarden 密码库Cloudreve 网盘 为例):

location / {
    auth_request /authelia;
    error_page 401 =302 https://auth.example.com/?rd=$scheme://$http_host$request_uri;
    proxy_pass http://127.0.0.1:应用端口;
}

注意:Authelia 的登录域名(上面 bypass 那条)一定要放行,否则会自己把自己挡在门外,陷入登录死循环。

四、把应用护进来

按上面的模板,把 VaultwardenCloudreve、甚至 Nextcloud 网盘 的 location 都加上 auth_request。效果:

  • 访客先被弹到统一登录页,输密码 + TOTP;
  • 通过后带上会话 Cookie,才能进后端应用;
  • 后端应用可以只监听内网或 127.0.0.1,进一步缩小攻击面。

合规提醒

认证网关只用于保护你自己部署、拥有合法权限的应用,使用时注意:

  1. 遵守《网络安全法》及相关规定,不将认证机制用于突破任何网络管控或他人系统的鉴权。
  2. JWT 密钥、session 密钥、2FA 恢复码都属于高敏感凭据,不要写进会公开的地方,定期轮换。
  3. 仅对授权范围内的应用启用保护,不要对无关第三方服务做中间人式拦截。

常见问题(FAQ)

Authelia 和 Fail2ban 能不能一起用?
可以。Fail2ban 守 SSH 等端口,Authelia 守应用层登录,两者层级不同、互不冲突,建议都开。
用户多了怎么管理?
演示用 users_database.yml 够用;人多建议接 LDAP 或 OpenID Connect,统一在目录里增删账号,Authelia 只做校验。
后端应用必须改代码吗?
不用。Authelia 通过反向代理的 auth_request 工作,后端应用无感知,这也是它比逐个应用各接登录省事的地方。
雨云优惠码 admin01 怎么用?
下单页优惠码输入框填 admin01 即享五折,以结算页显示为准。Authelia 极轻,入门版 1 核 1G 套餐足够,支持 7 天无理由退款,可先试跑再决定。

本文由作者原创/授权发布于极跃圈(jiyueip.com)未经许可,禁止转载。题图来自Unsplash,基于CC0协议。

声明:极跃圈(JIYUEIP.com)内网友所发表的所有内容及言论仅代表其本人,并不反映任何极跃圈(JIYUEIP.com)之意见及观点。

0 讨论
热门最新
总结
暂无总结
0 / 600

用雨云 KVM 云服务器 Docker 部署 AList,把阿里/天翼/115/本地等存储聚合成一个目录树,支持 WebDAV 挂载。含访客权限、网盘令牌与优惠码 admin01 五折。

用雨云 KVM 云服务器 Docker 自建 Heimdall 导航页,聚合图床/监控/Wiki/Git 等自托管服务入口,配 HTTPS 与访问保护。含卡片整理与优惠码 admin01 五折。

用雨云 KVM 云服务器 Docker 自建 Vaultwarden(Bitwarden 轻量服务端),告别明文记密码与商业月费,数据存自己机器。含 Nginx 反代 HTTPS、备份与优惠码 admin01 五折。

用雨云 KVM 云服务器 Docker 自建 BookStack 团队文档/wiki,BookStack+MySQL 部署、Nginx 反代 HTTPS、书架层级与权限。含默认密码坑、413 上传限制与优惠码 admin01 五折。

用雨云 KVM 云服务器 Docker 自建 Flarum 开源论坛,Flarum+MySQL 部署、Nginx 反代 HTTPS、扩展与版块管理。含 SMTP 必配、FORUM_URL 坑与优惠码 admin01 五折。