使用 VaultWarden 搭建个人密码管理器

作者: 王炳明 分类: 工具库 发布时间: 2023-03-25 16:13 热度:763

0. 背景

超过 10 年网龄的我,注册过很多网站帐号,而出于安全方面的考量(避免脱库),每个网站的密码都用不同的复杂的随机密码,这时候一个密码管理器就显得十分有必要,我使用的是 LastPass 免费版,至今已经用了 8 年有余(特意查了下 Item 的最早记录)。

使用 VaultWarden 搭建个人密码管理器

不过最近几年,听到 LastPass 有安全泄露问题的消息越来越多,对于一个软件开发从业者来说,密码的安全是我非常关注的。

使用 VaultWarden 搭建个人密码管理器

可没想到的是,安全带来的代价,却让我最终放弃 LastPass ,可能你无法相信,但事实确实如此。

不知何时开始的,LastPass 经常定期会要求已经授权的设备进行重新授权(事后才知晓的)。

这听起来是一件好事,但给我带来了非常糟糕的使用体验。

有一次印象非常深刻,也是第一次出现这种问题,当时我以为是使用时间太久,输入主密码就可以重新登陆使用,但是那次无论我用密码登陆多少次,都提示我去邮箱重新授权,但死活在 163 邮箱里收不到邮件,我非常的害怕,害怕我这么多年的保险箱就这么没了。这种状态给了我非常大的打击,我非常懊恼当时为什么选择它,也非常纳闷为什么一个产品会越来越用?

直到一次偶然的机会,我登陆了我多年未使用的 QQ ,发现在 QQ 邮箱里有 LastPass 的邮件,原来 LastPass 把邮件发到了这里,但是为什么呢?难道以前设置过安全邮箱?可是过后我在 LastPass 的官网里好像找不到相关的设置(或许是我没有找到)。

重新授权登陆后,由于工作忙,我没有继续跟进这件事了,也没有进行复盘,怎么会遇到这种事情,下次遇到这种事情该如何处理。

以至于到昨天晚上,我需要登陆一些帐号, LastPass 又在关键时刻,罢工了。

是的,它又提示我要重新授权才能使用,可问题是163 邮箱无论如何也收不到授权邮件。由于时间过了太久,不记得之前是发到 QQ 邮箱里去了,我开始又陷入了深深的自责,吃一垫为什么不长智?

幸运的是,由于近期做一些项目,手机上有下载 QQ,经常要登陆 QQ,看到邮箱里的消息,才又回想起之前的种种。

如果不是两次偶然的机会,让我有机会在 QQ 邮箱里看到授权邮件,恐怕我积累多年的 200 百多个密码,就全部丢失了,要知道密码数据对我来说有多么的重要,因为不是所有的帐号都能使用手机重设密码的。

经历了两次生与死的挣扎,害怕这种事情再次发生在自己的身上,于是我开始寻找市面上其他的解决方案,准备迁移数据到其他更好用的工具上。

在开始之前,先梳理了下自己的需求:

  1. 跨平台:浏览器,手机(Android,iOS)、电脑(Windows、MacOS),而且还要不限制设备数
  2. 免费:能免费就尽量用免费的(前提是安全性满足),省点钱毕竟还要还房贷
  3. 安全:这点最重要了,自不必说

使用 VaultWarden 搭建个人密码管理器

综合考量之下,选定了 Bitwarden 这款工具,相对于LastPass的优势,Bitwarden有如下几个优势:

  1. 开源:Bitwarden是一款开源软件,这意味着任何人都可以查看并审查其代码,确保无后门、安全可靠。而LastPass则是一个闭源商业软件。
  2. 更便宜:Bitwarden提供免费和付费的服务计划。对于个人用户来说,它的付费计划要比LastPass便宜,提供的功能也更丰富。
  3. 更好的隐私:与LastPass不同,Bitwarden不会跟踪或出售用户的数据。此外,Bitwarden使用加密技术存储您的数据,并且只有用户拥有解密的密钥。
  4. 跨平台支持:Bitwarden支持iOS、Android、Windows、macOS、Linux等多个平台。而LastPass则仅支持较少的平台。
  5. 无限密码共享:在Bitwarden中,用户可以创建任意数量的密码共享组,并分享其中的密码给其他人,这是LastPass不支持的一个功能
  6. 社区氛围:由于Bitwarden使用范围更广泛,因此它有一个更大的社区,这意味着更好的支持、反馈和开发。它还提供了各种各样的浏览器插件和应用程序,使得我的体验更加完美。:

说干就干,从晚上 11 点开始查看文档,开始部署 Bitwarden,遇到了一些小问题,整到了凌晨一点,终于自己部署了下,以下是自己的部署过程,给有需要的朋友们可以做个参考

1. 前置知识

Bitwarden是一个强大的密码管理工具,它有着丰富的功能和强大的加密保护机制,同时也有易于使用的界面和跨平台支持。

  1. 加密存储:Bitwarden将所有的密码和账户信息加密后存储在云端或本地设备,并使用256位AES加密和PBKDF2 SHA-256哈希算法保护数据安全。每个用户都有自己的主密码,这是唯一能够解锁其加密数据的密码。
  2. 跨平台支持:Bitwarden提供了多种客户端应用程序,包括Windows、macOS、Linux、iOS和Android,以及浏览器扩展程序和Web应用程序,用户可以在各种平台上使用Bitwarden。
  3. 密码生成器:Bitwarden内置了随机密码生成器,可以生成更加复杂和安全的密码,这些密码包括数字、字母、符号等。
  4. 自动填充:Bitwarden能够自动填充登录凭据,用户无需手动输入用户名和密码。
  5. 分享和协作:Bitwarden允许用户与家人、朋友和同事共享密码和敏感信息。同时也可以创建组织并邀请团队成员进行协作。
  6. 多语言支持:Bitwarden支持多种语言,包括英语、中文、法语、德语、日语、韩语、西班牙语等。用户可以选择自己习惯的语言来使用。
  7. 开源授权:Bitwarden是一个开源软件,采用AGPLv3授权协议,用户可以自由分发和修改其代码。同时,Bitwarden使用了透明的开发过程,定期发布安全审计报告以保证安全性。

在搜索 Bitwarden 的使用时,还会经常看到 Vaultwarden 和 bitwarden_rs ,它们与 Bitwarden 是什么关系呢?

Bitwarden

  • 有专门开发团队运营的密码管理器,大部分功能是免费的,部分高级是收费的(如目录同步、SSO、群组、自定义角色以及基于企业组织层面的 Duo Security 两步登录)
  • 可以私有部署,但对对服务器的要求高,使用 .net 开发,用的是mssql,内存必需大于2G,对于小内存机器来说是跑不起来的。

Vaultwarden

  • Vaultwarden 是第三方开发的,并没有像Bitwarden那样的社区规模,但它也有自己的贡献者群体在维护和改进。
  • 可以私有部署,但比官方更轻量,使用 Rust 编写,改用 SQLite 数据库(现在也支持 MySQL 和 PostgreSQL),运行时只需要 10M 内存,可以说对硬件基本没有要求。
  • 以前的 bitwarden_rs,为了区分于官方的版本,特意改的名字

对比之下,Vaultwarden 优势非常的明显,建议大家和我一样,无脑使用 VaultWarden即可。

1. 私有部署

部署 Bitwarden 的方法有很多,使用 docker 是最方便的,一条命令即可

“`shell 
docker run -d –name vaultwarden \
–restart=always \
-e WEBSOCKET_ENABLED=true \
-e SIGNUPS_ALLOWED=true \
-e DOMAIN=https://vault.youdomain.com \
-e ADMIN_TOKEN=<you_master_password> \
-v /data/bitwarden/:/data/ \
-p 8080:80 \
-p 3012:3012 \
vaultwarden/server:latest

<pre><code class="">上面用到的参数有

“`shell
# 启用或禁用新用户注册:true启用,false禁用
SIGNUPS_ALLOWED=false

# 设置web访问域名,必须使用 https
DOMAIN=https://vault.yourdomain.com

# 是否启用WebSocket通知:true启用,false禁用
WEBSOCKET_ENABLED=true

# 启用管理后台并设置token,默认为空不启用,设置token后则启用
ADMIN_TOKEN=XXXXXXXXXXXX

还有更多的参数,可根据自己的需要进行设置

# 设置日志路径
LOG_FILE=data/access.log

# 日志级别选项:trace、debug、info、warn、error 以及 off
LOG_LEVEL=warn
EXTENDED_LOGGING=true

# 设置SQLites数据库存储路径及数据库名
DATABASE_URL=data/vaultwarden.db

# 是否启用web客户端:true启用,false禁用
WEB_VAULT_ENABLED=true

# 修改线程,默认为10,若用户多可修改为更大,一般默认不需要设置
ROCKET_WORKERS=20

# 显示密码提示:true启用,false禁用
SHOW_PASSWORD_HINT=false

# 设置SMTP
SMTP_HOST=smtp.test.com
SMTP_FROM=test@test.com
SMTP_PORT=465
SMTP_USERNAME=test@test.com
SMTP_PASSWORD=password
# 自v1.25.0起,不再设置SMTP_SSL和SMTP_EXPLICIT_TLS,使用SMTP_SECURITY替代,它有以下选项:starttls、force_tls和off。
# 465端口使用force_tls,587端口使用starttls,25端口使用off。
SMTP_SECURITY=force_tls

# 启用或禁用邀请:true启用,false禁用
INVITATIONS_ALLOWED=false

# 启用或禁用分享发送功能,默认开启,启用true,禁用false
SENDS_ALLOWED=false

2. 反向代理

2.1 域名解析

后端的 Bitwarden 服务已经成功运行,前端如何访问呢?

有两种方法:

  1. 直接使用 https://{ip}:{password}​ 访问 web
  2. 申请个域名,使用 https://{domain}​ 访问 web

使用 ip 访问,记得去设置安全组,开放端口

使用域名访问,可以使用子域名,省得再申请域名,个人推荐使用域名,使用上更方便。

在云厂商上设置好 DNS 解析后,还需要设置下 nginx 的反向代理,才可以使用域名进行访问。

2.2 反向代理

找到你的 nginx 配置文件路径,假设是 /usr/local/nginx/conf/nginx.conf,添加如下配置,并重启 nginx 服务。

# 'upstream' 指令确保你有一个 http/1.1 连接
# 这里启用了 keepalive 选项并拥有更好的性能
#
# 此处定义服务器的 IP 和端口。
upstream vaultwarden-default {
  zone vaultwarden-default 64k;
  server 127.0.0.1:8080;
  keepalive 2;
}
upstream vaultwarden-ws {
  zone vaultwarden-ws 64k;
  server 127.0.0.1:3012;
  keepalive 2;
}

# 将 HTTP 重定向到 HTTPS
server {
    listen 80;
    listen [::]:80;
    server_name pwd.iswbm.com;
    return 301 https://hostrequest_uri;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name pwd.iswbm.com;

    # 根据需要指定 SSL 配置
    ssl_certificate /etc/letsencrypt/live/iswbm.com/cert.pem;
    ssl_certificate_key /etc/letsencrypt/live/<you_domain>/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/<you_domain>/cert.pem;

    client_max_body_size 128M;

    location / {
      proxy_http_version 1.1;
      proxy_set_header "Connection" "";

      proxy_set_header Host host;
      proxy_set_header X-Real-IPremote_addr;
      proxy_set_header X-Forwarded-For proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Protoscheme;

      proxy_pass http://vaultwarden-default;
    }

    location /notifications/hub/negotiate {
      proxy_http_version 1.1;
      proxy_set_header "Connection" "";

      proxy_set_header Host host;
      proxy_set_header X-Real-IPremote_addr;
      proxy_set_header X-Forwarded-For proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Protoscheme;

      proxy_pass http://vaultwarden-default;
    }

    location /notifications/hub {
      proxy_http_version 1.1;
      proxy_set_header Upgrade http_upgrade;
      proxy_set_header Connection "upgrade";

      proxy_set_header Hosthost;
      proxy_set_header X-Real-IP remote_addr;
      proxy_set_header Forwardedremote_addr;
      proxy_set_header X-Forwarded-For proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Protoscheme;

      proxy_pass http://vaultwarden-ws;
    }

    # 除了 ADMIN_TOKEN 之外,还可以选择添加额外的身份验证
    # 删除下面的 '#' 注释并创建 htpasswd_file 以使其处于活动状态
    #
    #location /admin {
    #  # 参阅: https://docs.nginx.com/nginx/admin-guide/security-controls/configuring-http-basic-authentication/
    #  auth_basic "Private";
    #  auth_basic_user_file /path/to/htpasswd_file;
    #
    #  proxy_http_version 1.1;
    #  proxy_set_header "Connection" "";
    #
    #  proxy_set_header Host host;
    #  proxy_set_header X-Real-IPremote_addr;
    #  proxy_set_header X-Forwarded-For proxy_add_x_forwarded_for;
    #  proxy_set_header X-Forwarded-Protoscheme;
    #
    #  proxy_pass http://vaultwarden-default;
    #}
}

3. 创建帐号

设置好反向代理后,就可以使用域名直接登陆 BitWarden,首次登陆,要先创建帐户

使用 VaultWarden 搭建个人密码管理器

输入邮箱 等其他相关信息,密码千万记住,主密码提示最好写下,省得忘记主密码。

帐号创建完成后,跳转到登陆界面输入主密码进行登陆

使用 VaultWarden 搭建个人密码管理器

登陆后的界面如下

使用 VaultWarden 搭建个人密码管理器

4. 数据迁移

万事具备,只剩迁移,VaultWarden 对于市面上的几乎所有的密码管理器都提供数据导入功能,你听过的没听过的都支持,应该有几十种,包括:

  • LastPass
  • 1Password
  • KeePass
  • Chrome & Firefox & Safari
  • 等等

我之前的主要平台是 LastPass ,在如下位置就可以将密码导出为 csv 格式

使用 VaultWarden 搭建个人密码管理器

回到 https://vault.youdomain.com 选择工具 – 导入数据

使用 VaultWarden 搭建个人密码管理器

5. 客户端

Bitwarden 提供了全平台的客户端软件,以下是常用的一些平台客户端,附上了链接,可以直接下载

未在此列的平台,可前往官网进行下载:https://bitwarden.com/download

以 Chrome 插件和 iOS 为例,介绍下用法

Chrome 插件

安装完成后,先点击左上角的设置私人服务器(https://vault.youdomain.com)后

使用 VaultWarden 搭建个人密码管理器

再使用邮箱登陆,就能连接到自己的密码库啦~

使用 VaultWarden 搭建个人密码管理器

iOS 客户端

在 App Store 安装后,也是和上面一样,先设置私人服务器,也就是前面设置的域名。再输入主密码,就可以登陆上自己的密码管理器。

为了在手机上有更好的体验,需要设置一下,开启自动填充。

设置​ -> 密码​ -> 密码选项​,允许 BitWarden 做为密码的填充源

使用 VaultWarden 搭建个人密码管理器

其他平台

若你手上有其他的设备,方法都是类似的,可自行设置。

‍6. 高级功能

安全报告

Bitwarden 还会生成一系列的安全报告,以保护用户密码的安全。

使用 VaultWarden 搭建个人密码管理器

它会将密码以及邮箱地址与已经公开的,被泄露的数据库中的内容进行对比,并找出这些不安全的密码,另外也会与你自己的密码库中的密码进行对比,防止一个密码被重复使用多次。它能够找到那些非常容易被破解的密码,在自动填写的域名中未使用 https 的,以及网站有两步验证但并未被启用的,并进行提醒,增加密码的安全程度。

测试了下自己的密码,有很多都是有高危风险,这两天就要统一整改下。

使用 VaultWarden 搭建个人密码管理器

账户保护

除了普通的账号密码,以及两步验证(必须通过网页端开启)外,Bitwarden 还通过 “指纹短语”(fingerprint phrase)来保护帐号安全。每个帐号都有一个固定的,由 5 个英语单词组成的指纹短语,且不会改变。可以通过验证指纹短语,来判断所连接到正确的的 Bitwarden 服务器。或用来验证添加到组织中的帐号是否为正确的帐号。

使用 VaultWarden 搭建个人密码管理器

它还支持通过修改 KDF 迭代来防止主密码遭到暴力破解。

使用 VaultWarden 搭建个人密码管理器

其他一些安全措施,别的密码管理软件也具有,像后台自动锁定,禁止截图等等,这里就不展开细说了。

总而言之,它所提供的功能非常丰富,在生成管理密码外,还有一系列保护账户安全的功能,

7. 说在最后

私有部署 BitWarden ,不仅自己可以用,也可以给家里人使用,但注册好后,请及时将关闭 web 功能,或者关闭注册功能。

虽然数据和隐私完全掌握在自己的手里,但这一切的前提是安全,服务器的安全需要自己维护,若有没有安全方面的经验,最好去学习一下,明哥这边给一些基本的建议:

  • 服务器禁止密码登陆,只开启使用密钥登陆
  • 及时升级软件,避免三方软件的安全漏洞
  • 对数据进行定期的备份,防止数据误删除
  • 限制不必要的端口,安全组别乱开

总之,便利与安全是两个是相互对抗,只能平衡,不能消除,使用 BitWarden 一定要注意做好安全措施。

8. 参考文档

  • BitWarden 帮助中心 – 中文版:https://help.ppgg.in/
  • BitWarden 客户端下载中心:https://bitwarden.com/download/

文章有帮助,请作者喝杯咖啡?

发表评论