Featured image of post Vaultwarden 自托管密码管理:Bitwarden 兼容 + 轻量部署

Vaultwarden 自托管密码管理:Bitwarden 兼容 + 轻量部署

Vaultwarden(原 bitwarden_rs)容器化部署、Nginx 反代(WebSocket + /admin)、Robots 屏蔽、客户端使用

密码多了记不住、用一个密码到处用又不安全,密码管理器就成了现代数字生活的刚需。1Password / LastPass 是闭源 SaaS,价格不菲、数据出境也有合规风险。Bitwarden 是开源免费的密码管理器,官方有 SaaS 版也可以自托管——但官方服务端是 .NET + MSSQL,重型不友好。Vaultwarden(原 bitwarden_rs)是 Bitwarden 服务端的第三方 Rust 重写版,完全兼容官方客户端资源占用只有官方的 1/10——一个容器、单文件二进制、SQLite 存储,1C1G 都能跑。这篇文章讲清楚部署、反代、客户端使用。

阅读对象:想给团队/个人自托管密码管理器、又想用 Bitwarden 官方客户端体验的同学
覆盖范围:Vaultwarden 容器化部署、Nginx 反代(WebSocket + /admin)、Robots 屏蔽、客户端使用

一、背景

项目状态特点
Bitwarden 官方服务端闭源、.NET + MSSQL重型、SaaS 也用
Vaultwarden(原 bitwarden_rs活跃Rust 重写、Bitwarden 兼容、SQLite
Bitwarden 客户端闭源客户端 / 开源 SDK全平台(Win/macOS/Linux/iOS/Android/浏览器)

重要时间线

  • 2021-04-27:bitwarden_rs 项目更名为 Vaultwarden(因为 Bitwarden 官方要求改名)
  • 后续社区全力投入 Vaultwarden 维护,Bitwarden 官方也认可 Vaultwarden 兼容客户端

兼容客户端:Vaultwarden 部署后,所有 Bitwarden 官方客户端(桌面、移动、浏览器扩展)都能直接连接 Vaultwarden 服务端。

二、容器化部署

2.1 拉镜像

1
docker pull vaultwarden/server:1.25.1-alpine

Alpine 版 ~50MB,比 Debian 版小 5 倍。

2.2 最简启动

1
2
3
4
5
6
docker run -d \
  --name vaultwarden \
  --restart=always \
  -v /home/docker/vaultwarden/data:/data \
  -p 8087:80 \
  vaultwarden/server:1.25.1-alpine

访问 http://{{HOST}}:8087 看 Web 界面(其实 Web 端用得少,主要用客户端)。

2.3 数据持久化

/data 目录存 SQLite 数据库 + 附件,必须挂出来

2.4 启用管理后台(可选)

容器内 /data/config.json

1
2
3
{
  "admin_token": "{{ADMIN_TOKEN}}"
}

重启 Vaultwarden 后,访问 https://{{DOMAIN}}/admin,输入 {{ADMIN_TOKEN}} 进入管理后台:

  • 查看注册用户数
  • 邀请新用户
  • 删除用户
  • 查看系统状态

生产环境强烈建议开启:方便清退离职员工、清异常账号。

2.5 禁用注册(生产环境)

默认任何人都能注册。要么手动邀请(管理后台生成邀请链接),要么关掉:

1
2
3
{
  "disable_signup": true
}

关掉后只有管理后台邀请的邮箱能注册,安全得多。

2.6 关闭 Web Vault(可选)

如果你只用客户端、不需要 Web 端:

1
2
3
{
  "web_vault_enabled": false
}

减少攻击面。

三、Nginx 反向代理

Vaultwarden 涉及 WebSocket(实时通知)+ HTTPS(官方客户端要求) + /admin(管理后台) + /notifications/hub(实时通知):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
server {
    listen 443 ssl;
    server_name vault.example.com;

    ssl_certificate     /www/cert/vault.example.com/fullchain.pem;
    ssl_certificate_key /www/cert/vault.example.com/privkey.pem;

    # 客户端上传
    client_max_body_size 128M;

    # Vaultwarden 主服务
    location / {
        proxy_pass http://127.0.0.1:8087;
        proxy_http_version    1.1;
        proxy_cache_bypass    $http_upgrade;
        proxy_set_header Upgrade            $http_upgrade;
        proxy_set_header Connection         "upgrade";
        proxy_set_header Host               $host;
        proxy_set_header X-Real-IP          $remote_addr;
        proxy_set_header X-Forwarded-For    $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto  $scheme;
        proxy_set_header X-Forwarded-Host   $host;
        proxy_set_header X-Forwarded-Port   $server_port;
    }

    # 实时通知(WebSocket)
    location /notifications/hub {
        proxy_pass http://127.0.0.1:3012;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }

    # 通知协商
    location /notifications/hub/negotiate {
        proxy_pass http://127.0.0.1:8087;
    }

    # 管理后台
    location /admin {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_pass http://127.0.0.1:8087;
    }

    # 屏蔽搜索引擎
    location = /robots.txt {
        root /home/wwwroot/Bitwarden;
    }
}

/notifications/hub 必须用 WebSocket:客户端实时同步密码变更(多设备)依赖 WebSocket,缺了同步会有延迟。 robots.txt 屏蔽:Vaultwarden 路径不应当被搜索引擎收录,避免泄露用户邮箱前缀(注册验证邮件 URL)。 HTTPS 必须:Bitwarden 官方客户端要求 HTTPS,明文 HTTP 客户端拒绝连接。

3.1 /admin 必须 IP 白名单

/admin 是高权限入口,建议加 IP 白名单:

1
2
3
4
5
6
location /admin {
    allow 192.168.0.0/16;     # 内网网段
    allow 10.0.0.0/8;
    deny all;
    # ... proxy 配置同上
}

四、客户端使用

4.1 桌面 / 移动客户端

https://bitwarden.com/download/ 下载对应平台客户端,安装过程和官方 SaaS 一样

首次配置:

  • 服务器 URL:填 https://vault.example.com不是官方 https://vault.bitwarden.com
  • 邮箱 + 密码注册(如果开了 disable_signup,先用管理后台邀请)
  • 登录后自动同步

4.2 浏览器扩展

Chrome / Edge / Firefox 都有 Bitwarden 官方扩展,安装后点"设置 → 服务器 URL"填自托管地址。

4.3 客户端特性

  • 密码自动填充
  • 跨设备同步(WebSocket 实时)
  • TOTP 双因素认证
  • 密码生成器
  • 安全审计(弱密码、重复密码、泄露检查)
  • 附件 / 文件存储
  • 紧急访问(指定信任人)

五、备份与安全

5.1 备份

  • SQLite 数据库/data/db.sqlite3):每周 sqlite3 .backup 或直接 cp
  • 附件目录/data/attachments):增量备份到 OSS
  • config.json:包含 admin_token,单独保管

5.2 安全建议

  1. 强制 HTTPS——客户端拒绝明文 HTTP
  2. 管理后台 IP 白名单——见 3.1
  3. 强 admin_token——32+ 位随机字符串
  4. 开启 2FA——所有用户强制开启二次验证(管理后台可设)
  5. 禁用注册——disable_signup: true,只邀请
  6. 定期审计——/admin 看活跃用户、清退离职员工
  7. fail2ban——/admin 加 fail2ban 防止爆破

六、踩坑清单

  1. 客户端连不上——HTTPS 没配 / 证书错误 / 客户端服务器 URL 填错
  2. 同步延迟——/notifications/hub WebSocket 没配,缺实时推送
  3. /admin 502——config.json 没挂出来或 admin_token 没设
  4. 数据丢失——/data 没挂出来,容器销毁即丢
  5. 附件上传失败——client_max_body_size 默认 1M,调成 128M
  6. 被搜索引擎收录——/robots.txt 没配,路径暴露到 Google
  7. 多人协作看不到——disable_signup: true 后只用管理后台邀请,Organization 功能需要付费

七、参考资料

  • Vaultwarden 官方仓库:https://github.com/dani-garcia/vaultwarden
  • Vaultwarden 文档:https://github.com/dani-garcia/vaultwarden/wiki
  • Bitwarden 客户端:https://bitwarden.com/download/
  • Bitwarden 自托管文档:https://bitwarden.com/help/install-on-premise/

下一步

使用 Hugo 构建
主题 StackJimmy 设计