TrueNAS Scale入坑指南No.6——Vaultwarden容器的部署
一、前言
自开始使用网络以后,各种网络密码的管理经历了几个阶段
第一阶段:手记+心记
最早上网的时候还是那种modem拨号的时代,互联网刚开始进入生活,当时默认的IE浏览器并没有现在浏览器记录密码,填充密码功能的,而当时的互联网服务也没那么丰富,最多就是邮箱和qq号。自己记在心里就足够了,根本用不着记录很多密码,找个小本本记下来(太不安全)或者记在心里就够。
第二阶段:开源的本地密码管理软件
后来网络购物兴起,需要记密码的地方开始变多,所以当时我找到了keepass这样的密码管理软件,当时好像可以利用一种叫做ActiveX的机制,加载到IE浏览器中进行自动填充,虽然功能简单,但也足以应付日常使用。
第三阶段:浏览器及浏览器扩展
后来浏览器陆续推出了密码管理功能,而很多支持扩展的浏览器出现可以保存、填充密码的扩展,比如曾经大名鼎鼎的lastpass。
第四阶段:商业的本地密码管理软件
大概在2015年左右,lastpass的密码泄露问题暴露,导致信任危机,我修改了所有互联网上的账户密码,并且选择了商业公司开发的密码管理软件1password和enpass,这些软件可以把密码加密保存在本地,使用时可以通过浏览器扩展读取密码并填充。但因为订阅价格太高我并没有使用多久。
第五阶段:重回开源,拥抱docker,在NAS中部署本地密码管理应用
在docker开始流行之后Bitwarden满足了我对于密码管理的基本需求,不但可以在浏览器中使用,还可以在手机中使用,解决了我需要使用密码的大部分场景,很快就成为我唯一的密码管理工具,一直使用至今。
二、Bitwarden和Vaultwarden
Bitwarden虽然是一个商业公司,但Bitwarden仍然是开放源代码的应用,也支持私有化部署,但并没有提供标准的docker命令进行部署,而是提供了一个安装脚本,虽然应该也可以利用这个脚本在TrueNAS Sclae中部署,但是不太方便日后的管理。
Vaultwarden是基于Bitwarden的开源非官方版本,用Rust语言进行了重写,有标准的docker命令可供参考,因此在TrueNAS Scale上根据命令提供的参数进行部署。而且Vaultwarden可以使用官方的Bitwarden应用,非常适合个人部署使用。
Vaultwarden之前的镜像名称是Bitwarden_rs,为了避免混淆和版权问题,更名为Vaultwarden。原有的Bitwarden_rs已经停止更新。
三、部署Vaultwarden
在dockerhub上搜索“vaultwarden/server”,查看部署代码
docker pull vaultwarden/server:latest
docker run -d --name vaultwarden -v /vw-data/:/data/ -p 80:80 vaultwarden/server:latest
第一行是拉取镜像,第二行是部署命令,官方给的部署命令比较简单,实际上还有一些隐藏设置需要打开。
部署代码登录TrueNAS Scale,首先需要在数据集中为Vaultwarden新建两个数据集。
vaultwarden数据集是为了保存Vaultwarden产生的数据文件,ssl数据集是为了让Vaultwarden能够使用ssl证书文件,我把ssl数据集建立在vaultwarden数据集中。数据集的名称实际上不需要和我设置的完全一样,可以按照你方便的方式来。

我们需要先通过ssh登录或者将ssl数据集共享的方式把ssl证书放入/mnt/pool/docker/vaultwarden/ssl中。
这里,我通过SMB共享的方式,把ssl证书复制进去,记得要给ssl数据集设置好访问权限。完成后记得关闭共享。

接下来把上一篇文章中生成的设备证书复制到ssl数据集中。并把证书和密钥文件名改为certs.pem和key.pem,这样做是为了后面使用方便

回到TrueNAS Scale,从左侧选择“应用”,点击右上角“启动docker镜像”。
部署Vaultwarden应用名称按照命名规则自定义一个,这里我填入的是vaultwarden,镜像名称必须与dockerhub上的名称一致,填入vaultwarden/server。

向下拉,来到“Container Environment Variables”,点击灰色的“添加”按钮为Vaultwarden添加环境变量。
Environment Variable Name中填入变量名:ROCKET_TLS
Environment Variable Value中填入变量值:{certs="/data/ssl/certs.pem",key="/data/ssl/key.pem"}
这样相当于告诉Vaultwarden去调用容器中/data/ssl/中的证书和证书密钥。这里的目录都是指容器内部的目录,我们一会需要将它与TrueNAS Scale的目录做一下映射,才能正常调用。

继续向下拉,来到“Port Forwarding”设置端口映射,“Container Port”中填入容器内部的访问端口,这个端口号只能填80,“Node Port”中填入你日后需要在浏览器中访问时输入的端口,这个端口号要大于9000,我这里填入的是9100。

继续下拉,来到“存储”,添加两组映射
/mnt/pool/docker/vaultwarden与容器内部的/data建立映射
/mnt/pool/docker/vaultwarden/ssl与容器内部的/data/ssl建立映射
相当于容器在运行时使用/data中的文件就相当于使用/mnt/pool/docker/vaultwarden中的文件,容器在运行时使用/data/ssl中的文件就相当于使用/mnt/pool/docker/vaultwarden/ssl中的文件。

拉到最后,点击“保存”。等待状态变为绿色的“ACTIVE”,部署就完成了。
四、Vaultwarden其他设定
现在打开https://192.168.0.10:9100,我们就可以以https的方式访问vaultwarden了。
点击下面的创建账户,注册一个新账户。

填写相关信息

注册完成后回到首页登录就可以进入密码管理了,这时候可能会有个问题,局域网中还好,如果你使用的是ddns的方式,其他人知道网址的话也是可以注册的,因此在我们注册完账号之后需要把注册功能关闭掉。来到应用界面,点击vaultwarden右侧的三个小点。在弹出的菜单中选择“编辑”。

在设置环境变量的位置新增一组环境变量:
变量名:SIGNUPS_ALLOWED
变量值:false

设置完成后,拉到最下方点击保存,docker会重新部署。完成之后vaultwarden的注册功能就关闭了。
vaultwarden还有以下的变量可以设置,可以根据需要自行添加或者关闭。
1、变量名:SIGNUPS_DOMAINS_WHITELIST
变量值:gmail.com,qq.com等
作用: 只能用变量名中规定的电子邮件域名注册账号
2、变量名:INVITATIONS_ALLOWED
变量值:true/false
作用: 是否允许邀请用户注册
3、变量名:SIGNUPS_VERIFY
变量值:true/false
作用: 要求新注册用户在成功登录前进行电子邮件验证
4、变量名:SHOW_PASSWORD_HINT
变量值:true/false
作用: 是否开启密码提示
5、变量名:ADMIN_TOKEN
变量名:TOKEN值
作用: 以管理员登录vaultwarden后台,访问地址是你的登录地址+admin/,例如https://192.168.0.10:9100/admin/,访问密码是你设置的token值。
五、Vaultwarden密码填充规则
vaultwarden提供了六种默认的密码自动填充规则。

URI就是你记录在vaultwarden中的填充规则,它包含了一部分的网络地址,但并不一定是你访问网络服务的地址,和我们平时说的url还是有区别的。

基础域:如果URI值为https://www.baidu.com:8080/,则会判断访问的网络地址中是否有baidu.com这样的字段,如果有则自动填充密码。因此如果使用此规则,在你访问https://www.baidu.com:8080/和https://www.baidu.com:9090/时会发现这两个网址都可以自动填充。
主机:如果URI值为https://www.baidu.com:8080/,则会判断访问的网络地址中是否有baidu.com:8080这样的字段,如果有则自动填充密码。因此如果使用此规则,在你访问https://www.baidu.com:8080/和https://www.baidu.com:9090/时会发现只有端口号为8080的网址可以自动填充。
开始于:如果URI值为https://www.baidu.com/path/,则会判断访问的网络地址中是否有https://www.baidu.com/path/这样的字段,如果有则自动填充密码。
正则表达式:在正则表达式规定的格式内匹配,如果访问的网络地址中包含正则表达式规定的字段则自动填充。正则表达式类似与windows里的通配符,这里不做深入探讨了。
精确:URI所有字符必须完全匹配,才能自动填充,这个URI就是你登录页面的网址。
从不:相当于关闭自动填充。
有时候因为规则设置错误,一个登录网址匹配了两条登录信息的话vaultwarden就无法自动填充了
日常使用的互联网服务提供商一般不会用端口来区分服务,当某个网站提供了多种服务,而每种服务都有不同的密码的话,可以使用开始于规则来区分。
而对于自己的NAS往往是用端口区分不同的服务,所以可以使用主机规则来区分。
基础域只针对在一个主域名下只有一种服务的使用场景。
五、下期预告
近年来因为众所周知的原因,经常会居家办公,期间用过很多种远程控制软件例如向日葵、ToDesk、TeamViewer、AnyDesk等,这些商业软件在使用时多少都有些限制,比如设备数量、使用功能、弹窗广告等。因此在寻找替代品的时候发现了RustDesk这款优秀的开源软件。因此下一期介绍如何在TrueNAS Scale中搭建RustDesk服务器。

搓澡于师傅
校验提示文案
purezhang
校验提示文案
番禺靓仔
校验提示文案
KyoFuU
校验提示文案
值友2499083271
校验提示文案
值友2499083271
校验提示文案
KyoFuU
校验提示文案
番禺靓仔
校验提示文案
purezhang
校验提示文案
搓澡于师傅
校验提示文案