自己搭设开源密码管理工具 bitwarden

简介

Bitwarden是一款自由且开源的密码管理服务,用户可在加密的保管库中存储敏感信息(例如网站登录凭据)。Bitwarden平台提供有多种客户端应用程序,包括网页用户界面、桌面应用,浏览器扩展、移动应用以及命令行界面。[6]Bitwarden提供云端托管服务,并支持自行部署解决方案。[7]

官方服务器可以免费使用,但不包含高级服务。

官网地址

用 Rust 编写的 Bitwarden 服务器 API 的替代实现,与上游 Bitwarden 客户端兼容*,非常适合运行官方资源密集型服务可能不理想的自托管部署。
自己搭设开源密码管理工具 bitwarden_第1张图片

vaultwarden 自己搭设的好处:

  1. 密码仓库在自己手中更安全。
  2. 可以使用无限的账户、组织。
  3. 包含高级功能。

官方仓库

自己搭设开源密码管理工具 bitwarden_第2张图片

准备工作

  1. 在线云服务器
  2. 公网域名
  3. 一把时间

云服务器

我用的阿里云服务器 特价99一年
学生特价服务器
新老客户续费优惠服务器
自己搭设开源密码管理工具 bitwarden_第3张图片
地区选离自己近的
我选择的是centos8

配置安全组

服务器通过端口与外界通信,安全组就是设置哪些端口可以通过。

购买后进入控制台 ecs实例配置安全组
自己搭设开源密码管理工具 bitwarden_第4张图片
没有安全组就创建一个。
点击管理规则,添加入方向规则 22 80 443 分别对应ssh http 和 https通信。其他的根据自己需求添加。出方向默认不用管。
自己搭设开源密码管理工具 bitwarden_第5张图片

设置密码

我这边步骤是先关机,然后通过阿里云控制台修改密码,然后在启动实例。之后就可以通过ssh工具连接了。

域名

vaultwarden 需要通过https使用,所以需要一个域名。
我是在阿里云买的域名。
自己搭设开源密码管理工具 bitwarden_第6张图片
搜索域名,然后选择购买。

购买后需要实名和备案,阿里云一套流程走完。
自己搭设开源密码管理工具 bitwarden_第7张图片

备案通过后,设置dns解析。将域名解析到你的服务器公网ip。
我这里用的cloudflare,需要先在域名提供商(阿里云 域名)设置为cloudflare的dns。

自己搭设开源密码管理工具 bitwarden_第8张图片

然后在cloudflare设置域名解析。

自己搭设开源密码管理工具 bitwarden_第9张图片

设置完之后继续后面的步骤。

配置Vaultwarden

安装docker

安装所需的软件包。yum-utils 提供了 yum-config-manager ,并且 device mapper 存储驱动程序需要 device-mapper-persistent-data 和 lvm2。

sudo yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2

使用以下命令来设置稳定的仓库。

sudo yum-config-manager \
    --add-repo \
    https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安装docker

sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin

启动bitwarden 镜像

docker run --rm -d --name vaultwarden -v /home/bitwarden/:/data/   -e LOG_FILE=/data/vaultwarden.log--restart unless-stopped -p 80:80 vaultwarden/server:latest

启动docker

sudo systemctl start docker

配置反向代理

我使用的caddy2

安装caddy2

dnf install 'dnf-command(copr)'
dnf copr enable @caddy/caddy
dnf install caddy

更改反向代理信息

vi /etc/caddy/Caddyfile

参考下面的内容,配置反向代理。{{your email}}改成你的邮箱,www.exampledomain.com 改成你的域名。
caddy 支持自动配置https 省去了我们的麻烦,只需要写上tls 邮箱即可

www.exampledomain.com {
  log {
    level WARN
    output file "/home/caddy/www.exampledomain.com.log" {
      roll_size 10MB
      roll_keep 10
    }
  }
  log {
    level WARN
    output file "/home/caddy/www.exampledomain.com-error.log" {
      rotate_size 10
      rotate_age 14
      rotate_keep 5
      rotate_compress
    }
  }
  tls "{{your email}}"
  encode gzip

  handle_path "/vaultwarden/*" {
    reverse_proxy "0.0.0.0:80" {
      transport http {
        dial_timeout 2s
        response_header_timeout 30s
      }
      header_up "Host" "{upstream_hostport}"
      header_up "X-Real-IP" "{remote_host}"
    }
  }

  handle {
    respond "Nope!" 404
  }
}

反向代理配置更新

caddy reload --config /etc/caddy/Caddyfile

访问你的 域名/vaultwarden/ 就能看到登陆页面了

自己搭设开源密码管理工具 bitwarden_第10张图片

高级配置

定时备份

vaultwarden中存储了我们的密码,以防万一,设置一个定时备份方便恢复。
使用cron进行备份。/etc/cron.daily/ 目录下的脚本每天会自动执行一次。

vi /etc/cron.daily/backup

输入文件内容

#/bin/bash
bitwardenPath=/home/bitwarden
bitwardenBPath=你的备份目录
bitwardenBTDir=${bitwardenBPath}/tmp/

# bitwarden 备份
mkdir -p  ${bitwardenBTDir}
cp -r   ${bitwardenPath}/* ${bitwardenBTDir}

# 删除不需要备份的数据
rm -rf ${bitwardenBTDir}db.sqlite3-shm
rm -rf ${bitwardenBTDir}send/
rm -rf ${bitwardenBTDir}tmp/

tar -czf  ${bitwardenBPath}/$(date '+%Y%m%d-%H%M').tar.gz -C  ${bitwardenBTDir} .
rm -rf ${bitwardenBTDir}

后续如果需要恢复,就把挂载目录清空解压一个备份文件到里面重启docker即可。

定时更新镜像

vaultwarden 还在持续更新,为了及时用上最新的版本,设置一个定时任务,定时更新镜像。

vi /etc/cron.daily/dockerImageUpdate

脚本内容如下

#/bin/bash
docker run -d --name watchtower --rm -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower --cleanup --run-once

watchtower 自动更新 Docker 容器基础镜像的流程。

多次失败屏蔽ip fail2ban

待续

填坑记录

domain 重启 404

设置domain参数后重启docker,访问就404,暂未搜到解决方法。

绕行方案,删除domain参数,重启docker后通过ip:端口访问admin管理页面设置domain。

TOTP 时区问题

报错如下

发生错误。
Invalid TOTP code! Server time: 2023-11-15 06:46:43 UTC IP: 172.xx.xx.xx

docker镜像内时间错误

启动时将时间挂载进去。

docker run ······ -v /etc/localtime:/etc/localtime ·····

改完之后依旧不行,苦苦寻找解决方案,最后发现存的totp太多了用错了 。

待续

自己搭设开源密码管理工具 bitwarden_第11张图片

你可能感兴趣的:(杂货,资源,rust,教程,密码管理,云服务器,docker)