Authelia 自托管单点登录(SSO)与多因子(MFA)认证部署
Authelia 是一款开源的开源身份验证网关,提供统一登录门户(Single Sign-On, SSO)与多因子二次验证(MFA / TOTP / Duo / WebAuthn 安全密钥),常与 Nginx / Traefik / Caddy 或 Cloudflare Tunnel 联动,保护自托管服务防范公网爆破。
一、 部署架构与目录设计
推荐采用 Docker Compose 配合 Redis(保存 Session 状态)与 SQLite(保存凭据和 MFA 密钥)的极简部署方案,放入系统的 cf-gateway 全局 Docker 网络中,无需外网暴露任何端口。
# 创建部署工作目录
mkdir -p ~/authelia/config二、 编写 docker-compose.yml
在 ~/authelia/docker-compose.yml 中写入以下内容:
version: '3.8'
services:
authelia:
image: authelia/authelia:latest
container_name: authelia
restart: unless-stopped
environment:
- TZ=Asia/Shanghai
volumes:
- ./config:/config
networks:
- cf-gateway
depends_on:
- authelia-redis
authelia-redis:
image: redis:alpine
container_name: authelia-redis
restart: unless-stopped
volumes:
- ./redis-data:/data
networks:
- cf-gateway
networks:
cf-gateway:
external: true三、 主配置文件 (config/configuration.yml)
在 ~/authelia/config/configuration.yml 中写入最小化配置:
theme: dark
jwt_secret: '[REDACTED_RANDOM_STRING_32_CHARS]'
default_redirection_url: https://auth.yourdomain.com
server:
host: *.*.*.0
port: 9091
log:
level: info
authentication_backend:
password_reset:
disable: true
file:
path: /config/users_database.yml
session:
name: authelia_session
secret: '[REDACTED_RANDOM_STRING_32_CHARS]'
expiration: 3600 # 1小时自动过期
inactivity: 300 # 5分钟无操作自动锁定
domain: yourdomain.com # 替换为你自己的主域名
redis:
host: authelia-redis
port: 6379
storage:
local:
path: /config/db.sqlite
notifier:
filesystem:
filename: /config/notifications.txt四、 用户与密码 Hash 生成
使用 Authelia 官方命令行生成 Argon2 加密密码,写入 config/users_database.yml:
# 生成密码的 Argon2 哈希值
docker run --rm authelia/authelia:latest authelia crypto hash generate argon2 --password '你的安全密码'在 ~/authelia/config/users_database.yml 中录入用户:
users:
admin:
disabled: false
displayname: "系统管理员"
password: "$argon2id$v=19$m=65536,t=3,p=4$..." # 粘贴上面生成的加密串
email: admin@yourdomain.com
groups:
- admins
- dev五、 启动服务与 Cloudflare Tunnel 映射
1. 启动容器
cd ~/authelia && docker compose up -d2. 绑定 Cloudflare Tunnel 反线
在 Cloudflare Zero Trust 控制台的主机名路由中添加:
- Subdomain:
auth(如auth.yourdomain.com) - Type:
HTTP - URL:
authelia:9091(直接使用容器名在cf-gateway内部网络中通信,无需暴露宿主机端口)
⚖️ 逆向防守与安全避坑 (Inversion)
- 密钥安全性:
jwt_secret和session.secret必须使用至少 32 位的随机高强度字符串,切勿使用弱口令,否则可被黑客伪造身份 Cookie。 - 时钟同步依赖:使用基于时间的两步验证(TOTP,如 Google Authenticator)极其依赖 VPS 系统的精确时间。必须确保已经部署了 Chrony 高精度时间同步,否则会导致 TOTP 动态验证码永远报错失败。
- 数据备份:SQLite 数据库
config/db.sqlite包含了用户已绑定的 MFA 2FA 密匙,需纳入自动备份范围。
相关链接
- DockerCompose工作流与更新 容器构建与三步法平滑升级
- Debian系统安全加固与优化 Chrony 时间同步与防爆破
- Ignis自托管Obsidian部署 同类 zero-trust 接入架构