雨云搭建 Authelia 统一登录网关

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

前面陆陆续续在雨云上搭了不少自托管应用——网盘、密码库、书签、看板……每个都单独记账号密码,既难记又不安全,有的应用自身还不支持二次验证。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 那条)一定要放行,否则会自己把自己挡在门外,陷入登录死循环。

四、把应用护进来

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

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

合规提醒

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

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

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

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

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

暂无数据