家庭服务器搭建vaultwarden(一)
本文最后更新于:2 年前
介绍
作为一名信息安全爱好者,保护好自己的个人信息是必不可少的,其中的一个重要环节就是保护自己的密码。但是每个平台的密码都不一样,怎么记住那么多密码呢?这时候就需要用到密码管理软件了。因为前段时间,付费密码管理软件–lastpass
被黑客脱库,因此让我对公有的密码管理服务更加不放心了。正巧有一次在tg群里吹水时,了解到还有bitwarden
这款开源免费、可自行搭建服务端,并且支持多平台的密码管理软件,于是便想着用自己家里的虚拟服务器搭建一个试试。但是,官方的bitwarden
使用SQL server
存储数据,对于服务器配置要求太高,我便采用了同样开源免费、用Rust
语言重写服务端、更轻巧的第三方密码管理软件–vaultwarden
。
项目地址:https://github.com/dani-garcia/vaultwarden
这可能是全网唯一一篇用自己家里的服务器搭建vaultwarden
的教程了。网上的教程大多用公有云的vps搭建,但是国内vps需要备案才能使用,费时费力不说还有泄露隐私的风险;除此之外就是使用家里的群晖nas搭建,但是我的nas配置太低,而且ARM
架构不支持docker
,所以我只能忍痛放弃这条路。因为国内的家庭宽带不像vps一样开放了80和443端口,服务器设置Nginx
反向代理也不像群晖nas那样简单方便,所以我踩了不少坑。下面我将亲自示范如何搭建一个开源的密码管理平台vaultwarden
,搭建自己的私人密码库,让账号密码更安全。
正文
准备
首先,你需要一台安装好docker
和docker-compose
的Linux
服务器,并且购买一个域名。对于家庭宽带而言,你需要拥有一个公网ip地址,并且域名需要提前配置好ddns
(我的往期文章中讲过阿里云的配置方法,其它域名服务商也类似,都是通过调用api来更新域名解析)。你可以采用命令安装,但是我为了省事,使用了宝塔面板安装(也可以使用宝塔面板的国际版–aapanel
,更安全)。完事后拉取vaultwarden
的镜像,因为我的宝塔面板拉取镜像的功能有问题,所以只能使用命令拉取了:
1 |
|
踩坑
拉取完成后不要急,先安装Nginx
并创建一个网站,点击“添加站点”,“创建站点”里面填写你购买好的域名,一定要带上端口号。这里的局域网http
端口我为了避免以后可能的冲突,就没有填写80,而是填了一个比较大的作为http
端口。PHP
版本选择“纯静态”,其它的全部不创建,完成后点“提交”:
接着,在根目录下创建一个文件夹vw-data
,用于存放vaultwarden
的数据,再去刚才创建的网站,把网站目录改成你创建的这个文件夹。当然,你也可以用创建网站时自动生成的网站目录,但下图“挂载卷“中的“服务器目录”也要改成自动生成的网站目录,即/www/wwwroot/abc.com/
。准备就绪后,去创建对应的docker
容器,画红框的按照截图里面的填就行:
注意:这里的服务器端口要和前面创建网站填写的一样,创建网站和创建容器这两步千万不能反过来,否则会报“端口被占用”的错误!
由于vaultwarden
的网页端必须要通过https
访问,才能创建账号,所以我们必须要配置SSL
证书。根据官方文档中的说明,采用docker
挂载SSL
证书的方式无法使用自动同步的功能,所以我们采用Nginx
反向代理的方式。点击你创建的网站右侧的”设置“,再点左侧的”SSL”,申请证书或者填写已有的证书即可,建议申请通配符证书。
再点击左侧栏中的“反向代理”,点击”添加反向代理“,”目标URL“填写http://127.0.0.1:前面你设置的局域网http端口
,其它的不用填,提交后再点击“配置文件”,把其替换为以下内容:
1 |
|
同样,这里的局域网https
端口我为了避免以后可能的冲突,也没有填写443,而是前往左侧栏中的“配置文件”,把红框中的443端口替换成了其它的:
修改完成后,别忘记重载Nginx
配置,或者直接重启Nginx
。
最后去你家光猫或者路由器后台设置一下端口转发(有的路由器叫“端口映射”),就可以了,记住外网端口不能填80和443。经过我这样一波操作,理论上用https://域名:外网非标准https端口
应该是可以访问的,但实际上怎么都打不开网页端。
这时,就让我隆重介绍这次折腾的主角–Nginx Proxy Manager
!
正道
说到底,Nginx Proxy Manager
其实就是一个图形化的管理面板。我们同样采用docker-compose
安装,在/root
目录下新建一个文件夹npm
(也可以叫其它名字),并在npm
文件夹下创建一个docker-compose.yml
文件,内容填写:
1 |
|
使用命令docker-compose up -d
创建Nginx Proxy Manager
容器,局域网内用http://局域网ip:4637
访问Nginx Proxy Manager
后台,默认账号和密码如下:
1 |
|
进入后台以后最好修改一下邮箱和密码,其中邮箱是用来提醒你更新SSL
证书的。点击最上面菜单里的”Hosts”,再选择下拉框里的”Proxy Hosts”:
点右边的”Add Proxy Host”,下面的内容按照截图里面的填写:
其中vaultwarden
容器的ip可以在宝塔面板里看到。
再接着设置SSL
证书,可以用自己申请好的,也可以用Nginx Proxy Manager
提供的申请证书功能,我使用的是自己申请好的。点击上方菜单中的”SSL Certificates”,再选择”Add SSL Certificate”下拉框中的”Custom”:
设置完证书后再回到刚才设置反向代理的页面,选择刚才上传的证书:
这里不建议开启”Force SSL”(强制https)选项,因为实测非标准端口开启此功能后会出现一些问题。
最后去你家光猫或者路由器后台设置一下端口转发(有的路由器叫“端口映射”),就可以了,记住外网端口不能填80和443。
在电脑浏览器中输入https://自己的域名:外网https端口
,完美访问:
还没完,点击“创建账号”创建你自己的账号后,如果你不想其他人使用你的密码库,记得一定要关闭用户注册功能。当然,关闭以后你也可以发邮件邀请其他人注册,只不过要配置SMTP
服务器。
怎么关闭呢?先删除你创建的vaultwarden
容器,不用担心刚才创建的账户密码没了,因为它们被存放在了服务器的挂载目录中,也就是我设置的/vw-data
。删掉之后再创建docker容器,还是使用vaultwarden/server:latest
镜像,但这次不需要设置映射端口了,而且下面的“环境变量”中需要填写以下内容:
1 |
|
启动容器后,如果容器ip改变了,记得去Nginx Proxy Manager
面板中修改一下,否则会无法访问。在电脑浏览器中输入https://自己的域名:外网https端口/admin
,输入生成的ADMIN_TOKEN
,即可在后台设置域名、SMTP
服务器、二步验证等信息。
思考
当然,自建密码管理器也有风险,从网络安全的角度来说,把端口暴露到外网增加了攻击面,也增加了被黑客入侵的风险。为此我尝试过把“自托管服务”中的“服务器URL”改为局域网ip,同步时就打开wireguard VPN
连接密码服务器,但是实际操作后发现并不能如我想的实现。下面以安卓手机端登录为例。
- 当我填写
http://局域网ip:局域网端口
并登录时,报错如下:
- 当我填写
https://局域网ip:局域网端口
登录时,报错如下:
总结
在下篇教程中,我将教大家如何实现一些进阶玩法,例如定时备份,让你的数据多一层保障。
好了,以上就是关于如何搭建vaultwarden
的全部教程了,如果还有疑问或者不清楚的,欢迎在评论区留言,我会尽量帮助你们。我们下期再见!