Vaultwarden折腾指北
关于云密码管理软件
云密码管理软件这一块,我一直使用的是1password, 使用1password的体验非常不错, 被人诟病的手机应用端自从更新到1password 8以后也很不错。导致我本次决定迁移到Vaultwarden的原有:
- 前段时间信用卡莫名其妙的收到了一笔境外的扣款,想了半天终于想起来是1password (年费订阅..还特地致电去冻了卡)。
- 去年Lastpass的云存储设施遭黑客入侵,大量客户保险库敏感数据疑遭泄露。让我意识到数据还是握在自己手里合适。
- 说起来你们可能不信,我没有用过Docker,都是服务本地直接安装。
安装过程
云服务提供商是腾讯云,感觉最近一段时间很少看到腾讯阿里做力度非常大的活动了。考虑到1password和其他服务订阅的成本,一年续费的价格也就没有显得很贵。
安装Docker
官方提供了非常好的手册来参考,这里还是简单的说一下
- 更新
apt
索引以及安装apt
对HTTPS的支持
1 | sudo apt-get update |
- 添加Docker的GPG key
1 | sudo mkdir -m 0755 -p /etc/apt/keyrings |
- 设置repository
1 | echo \ |
剩下的步骤就是更新apt
索引和安装了
1 | sudo apt-get update |
安装Vaultwarden
简单介绍一下Vaultwarden,就是一个非官方Rust版本的服务端,这目前算是个人用Bitwarden的最优解决方案,因为它不是那么消耗服务器性能,项目地址:Link。感兴趣的可以去翻一翻,里面有Wiki会对本章节的部分内容做完整的解释。
为了方便,这里使用 docker-compose
启动服务,在上文的Docker安装中已经涵盖,如果没有可能要自己安装。
- 首先创建一个
yml
文件这里我叫vaultwarden.yml
1 | version: '3.1' |
这里对其中的几个参数做一下解释这些配置可以参考Wiki和个人需求做修改
SIGNUPS_ALLOWED
:是否允许注册新用户INVITATIONS_ALLOWED
:是否允许邀请用户,注:在admin界面中可以邀请用户ADMIN_TOKEN
:访问admin界面需要的tokenLOG_FILE
:输出日志文件的路径SHOW_PASSWORD_HINT
:密码提示volumes
:将本地磁盘的映射到Docker中,ports
也同理
在你配置好所有文件之后便可以启动Vaultwarden
1 | sudo docker compose -f vaultwarden.yml up -d |
但是这还没完,因为在配置文件中我们将本地的2081映射到了Docker的80端口,这里我使用Cloudflare
+ Nginx
反向代理到2081端口,以及完成HTTPS的证书配置
Nginx配置
HTTPS证书的配置这里不再多说,已经有很多方案可以解决这一个问题,这里列出反代部分的Nginx配置文件:
1 | location / { |
安全配置
由于Vaultwarden
在登录界面没有设置验证码等手段来防止bot进行密码爆破,官方提供了fail2ban
来解决这一问题。加上我们使用了Cloudflare
,这使得本地封锁IP失效,需要使用fail2ban
自带的action来实现和Cloudflare
的联动。这里有一篇文章可以用作参考。
Fail2ban action设置
默认的的action文件存储在/etc/fail2ban/action.d
里,其中就包含了官方对于CF支持的action,我们打开cloudflare.conf,做如下修改
1 | [Init] |
注意,这里用到的是GlobalAPIKEY,所以你需要自信考虑承担这个风险。
Fail2ban Filter设置
这部分的设置在Wiki中也有提及,可以去Wiki自行参考。
进入 /etc/fail2ban/filter.d
目录,新建 vaultwarden.local
:
1 | [INCLUDES] |
新建 vaultwarden-admin.local
:
1 | [INCLUDES] |
这两个配置文件分别为应用界面和admin界面。
Fail2ban Jail设置
进入 /etc/fail2ban/jail.d
目录,新建 vaultwarden-admin.local
,这里要注意的是log的位置以及刚才的action
1 | [vaultwarden] |
新建vaultwarden.local
:
1 | # /etc/fail2ban/jail.d/vaultwarden.local |
注:这里port
可能不是那么重要,因为在Cloudflare
上是全Ban,但是我还是保留了。
启动fail2ban
1 | sudo systemctl start fail2ban |
到此为止,你就获得了一个自己掌握数据的密码管理软件,并且使用Cloudflare
在武装保护它。至于说数据的备份和恢复,抽时间在写吧。