Password manager bitwarden service setup
bitwarden支持自托管和官网托管,官网服务服务器在境外,访问速度较慢,这里选择自托管。vaultwarden是bitwarden的服务端开源实现,原名bitwarden_rs。
从docker hub 拉取vaultwarden镜像
docker pull vaultwarden/server
为vaultwarden创建一个文件夹,用于存放vaultwarden的数据,包括密码数据库等。然后运行镜像。
mkdir /data/bitwarden
docker run -d \
--name vaultwarden \
-p 8192:80 \
-p 3012:3012 \
-e SIGNUPS_ALLOWED=true \
-e WEB_VAULT_ENABLED=true \
-e DOMAIN=https://mydomain.cn \
-v /data/bitwarden:/data \
vaultwarden/server
上面命令的各个参数含义如下:
-d 在后台运行
--rm 容器停止运行后,自动删除容器文件
--name vaultwarden容器的名字为vaultwarden
-p 8192:80 容器的端口80映射到8192
-p 3012:3012 容器的端口3012映射到3012
-e SIGNUPS_ALLOWED=true 设置环境变量SIGNUPS_ALLOWED=true允许用户注册
-e WBE_VAULT_ENABLE=true 设置环境变量WBE_VAULT_ENABLE=true
-e DOMAIN=https://mydomain.cn设置域名,需要替换成自己申请的域名
-v /data/bitwarden:/data 容器的/data/目录映射到宿主机的/data/bitwarden目录
这样vaultwarden就跑起来了。为了后续重启运行方便,可以将运行命令保存为一个sh脚本。
bitwarden为了保证密码安全,必须使用https访问密码库,为了便于访问与启用https,这里我使用caddy进行反代。与caddy相关的使用可以参考我的文章Caddy2安装与托管静态博客,我的caddy配置文件如下:
(TLS_CONFIG) {
# TLS 配置采用 https://mozilla.github.io/server-side-tls/ssl-config-generator/ 生成,SSL Labs 评分 A+
protocols tls1.2 tls1.3
ciphers TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256
}
# Refer to the Caddy docs for more information:
# https://caddyserver.com/docs/caddyfile
(LOG) {
log {
output file "{args.0}" {
roll_size 500MiB
roll_local_time
roll_keep 20
roll_keep_for 30d
}
}
}
(HSTS) {
# HSTS (63072000 seconds)
header / Strict-Transport-Security "max-age=63072000"
}
(ERROR_HANDLE) {
handle_errors {
@404 {
expression {http.error.status_code} == 404
}
handle @404 {
rewrite * /404.html
file_server
}
}
}
(GENERAL_CONFIG) {
tls xxx@xxx.com {
import TLS_CONFIG
}
# HSTS
import HSTS
# 压缩支持
encode zstd gzip
# 错误处理
import ERROR_HANDLE
}
# globe config
{
servers :443 {
protocol {
experimental_http3
}
}
}
myconfig.com {
reverse_proxy /notifications/hub {
to localhost:3012
}
reverse_proxy /notifications/hub/negotiate {
to localhost:8192
}
reverse_proxy localhost:8192 {
# 将真正的远程 IP 发送给 Rocket,以便 vaultwarden 可以将其
# 放入日志,以便 fail2ban 可以禁止正确的 IP。
header_up X-Real-IP {remote_host}
}
header / {
# 禁止在框架内呈现网站 (clickjacking protection)
X-Frame-Options "DENY"
# 防止搜索引擎编制索引(可选)
X-Robots-Tag "none"
# 服务器名称移除
-Server
}
import LOG "/home/ubuntu/database/logs/myconfig.com.log"
import GENERAL_CONFIG
}
# 引入其他具体的站点配置
import /etc/caddy/*.caddy
其中3012端口是为了通过websocket进行通知,WebSocket 通知用于将发生的一些相关事件通告给 Bitwarden 的浏览器和桌面客户端,例如密码数据库中有条目被修改了或被删除了。要启用 WebSockets 通知,必须使用外部反向代理,并且必须执行以下配置操作:
配置完成后,就可以在配置的域名页面上访问bitwarden服务了。
默认情况下,可以访问的任何人均可以注册新的账户,在我们自己注册完账号后,为了保证安全与账号不被滥用,要禁用该功能,请将 SIGNUPS_ALLOWED 环境变量设置为 false,在docker run命令后添加一行:
-e SIGNUPS_ALLOWED=false \
但是Vaultwarden 管理员可以通过管理页面邀请任何人(前提需要配置好SMTP),不受以上限制。
要启用管理页面,需要设置一组身份验证令牌。该令牌可以是任何字符,但建议使用随机生成的长字符串。在docker run命令后添加一行:
-e ADMIN_TOKEN=some_random_token_as_per_above_explanation \
重启docker,然后输入yourconfig.com/admin
就可以进入管理页面了,在管理页面中可以配置smtp,邀请其他人注册以及其他更多配置可以进行选择。
如果在vaulatwarden管理员页面的Diagnostics选项中,发现Internet access状态为No(下图为正确状态)
那么需要将docker网络所在网段的防火墙放开,按如下配置:
sudo ufw allow from 172.17.0.0/16
sudo ufw allow to 172.17.0.0/16
密码库保存着我们的所有密码,如果出现问题,那么密码将全部丢失,所以必须做好备份,这里我是采用将docker数据文件夹整体加密压缩后,定时备份到腾讯云cos中。同时通过cos的生命周期设置,实现对过期备份的自动删除。脚本配置如下:
#!/bin/sh
currentdate=$(date +%Y%m%d) #获取当前时间
#压缩指定目录到日期压缩包,密码为backupdata
zip -P backupdata \
-r backup_${currentdate}.zip \
/data/bitwarden \
coscmd upload backup_${currentdate}.zip /
rm backup_${currentdate}.zip
coscmd为腾讯云cos工具,需要自行安装,参见:https://cloud.tencent.com/document/product/436/10976
然后设置crontab,定时在每天凌晨进行一次数据备份:
15 4 * * * bash /home/ubuntu/backup/backup.sh
下图为cos备份生命周期设置:
https://zhuanlan.zhihu.com/p/349524829
https://rs.ppgg.in/
本网站文章版权均为本人所有,未经同意不得私自搬运复制,欢迎注明引用出处的合理转载,图片转载请留言。文章内容仅用于技术研究和探索,不得用于违法目的。