前言
因Github强制启用2FA,不得不开始考虑使用管理2FA的软件。但纯2FA软件(Ageis这类无联网同步)感觉会被我弄丢(刷机的时候忘记取消而丢失),联想到自建Bitwarden,应该是符合我的需求。
本人无v4公网,v6似乎因主路由防火墙问题并不能正确映射至外网,相当于无法映射至公网的情况,也符合大部分人的环境。故组建一个纯内网环境的Bitwarden,内网下同步外网下离线,也无安全性问题。
开搞
文中操作无法避免的产生穿插,会出现将后续操作才能产生的内容提前,还请先通篇阅读,在实际操作时联系上下文
自签名证书
由于Bitwarden要求连接到的服务器必须为https,所以首先需要为内网IP申请一个SSL自签名证书。OPENSSL是较为常用的SSL工具,被默认安装于Linux系统中,但命令行复杂,本文推荐使用mkcert
mkcert可以在服务端运行,若不方便SSH操作也可以在电脑上命令行运行。本文选择在服务端(NAS)创建证书
前往release页根据所运行机器架构及系统下载最新程序
使用SSH工具连接到NAS,依次输入以下命令(请注意修改 NAS设备IP 为 实际IP)
wget -O mkcert https://github.com/FiloSottile/mkcert/releases/download/v1.4.4/mkcert-v1.4.4-linux-amd64 chmod +x mkcert ./mkcert --cert-file bitwarden.pem --key-file bitwardenkey.pem NAS设备IP ./mkcert -install mv /root/.local/share/mkcert/rootCA.pem
以上操作会生成
bitwarden.pem
,bitwardenkey.pem
及rootCA.pem
三个文件,前两个为服务端所需SSL证书及密钥,后者为客户端所需根证书反代设置
此步非必需但推荐搭建,若不想搭建的请跳过本节
反代需求将使用Caddy2方式实现
Caddy2
使用Caddy2可以监听80/443端口,访问反代服务时不再需要端口号,但后续教程不会对这里特殊说明,请注意更改IP与端口,这里使用 **
192.168.31.31
做演示Unraid
可以直接在应用中搜
caddyv2
,已有模板可以使用模板使用
Bridge
网络模式,将网络修改为Custom:br0
,并设置为192.168.31.31
docker-compose
这里套用官方模板,并将网络修改为macvlan
version: "3.7" services: caddy: image: caddy:alpine restart: unless-stopped networks: mymacvlan: ipv4_address: 192.168.31.31 volumes: - $PWD/Caddyfile:/etc/caddy/Caddyfile - $PWD/site:/srv - caddy_data:/data - caddy_config:/config volumes: caddy_data: external: true caddy_config: networks: mymacvlan: driver: macvlan driver_opts: parent: eth0 mode: bridge
配置文件
在
/config
对应映射的文件路径下创建一个名为Caddyfile
的配置文件,并将下一步生成local.pem
和localkey.pem
放入/data
对应映射的文件路径下:443 { tls /data/local.pem /data/localkey.pem reverse_proxy http://192.168.31.13:4743 }
之后启动 caddy ,但服务端并未搭建,所以访问是空白的
Vaultwarden服务端
Unraid
可以直接在应用中搜
vaultwarden
,已有模板可以使用点击安装后,会跳转至配置界面
是否使用网页反代的选项有所不同,若未使用网页反代的则有以下步骤:
- 在
/mnt/user/appdata/
下新建vaultwarden
文件夹,并将生成的bitwarden.pem
与bitwardenkey.pem
移动到该文件夹下 - 点击 添加另一个路径、端口、变量、标签或设备
如图设置,并在值内填写
{certs="/data/bitwarden.pem",key="/data/bitwardenkey.pem"}
,而后保存
点击应用即可启动
- 在
群晖
点击 Container Manager - 容器 - 新增 - 映像 - 添加映像- 导入 - 从URL添加
输入
https://hub.docker.com/r/vaultwarden/server
点击新增后进入配置向导,请注意以下两个配置,其他保持默认即可
Docker-compose
version: '3' services: vaultwarden: image: vaultwarden/server:latest container_name: vaultwarden restart: always environment: SIGNUPS_ALLOWED: "true" WEBSOCKET_ENABLED: "true" # 启用 WebSocket 通知 ADMIN_TOKEN: setastrongpassword # 设置 Admin (后台)密码 volumes: - ./vw-data:/data ports: - 8443:80
配置
访问
https://192.168.31.13:8443/admin
即可访问服务端后台,可以进行管理用户之类的操作,非高级操作一般用不到
证书导入
需要将先前生成的
rootCA.pem
改名为rootCA.crt
导入需要安装的设备中,避免客户端在连接服务端时提示证书不安全Windows
将
rootCA.crt
下载到电脑,双击该证书安装证书 > 当前用户 > 将所有的证书都放入下列存储 > 浏览 > 受信任的根证书颁布机构 > 确定
MacOS
由于笔者无MacOS环境,从搜索引擎找到了相关方法供参考
Finder > 应用程序 > 其他 > 钥匙串访问 > 将
rootCA.pem
证书拖入窗口内安装iOS
使用Safari下载并打开
rootCA.pem
,而后在设置 > 通用 > VN、DNS与设备管理 > 找到mkcert证书并点击信任 > 返回 > 关于本机 > 证书新人设置 > 打开mkcert证书开关*
Android
将
rootCA.pem
传输至Android设备设置 > 安全 > 加密与凭据 > 安装证书 > CA证书 > 仍然安装 > 选择
rootCA.pem
创建账户和导入密码
先前账号密码都存储于Chrome浏览器中,相对明文的保存方式并不安全。故将密码从Chrome迁移至Vaultwarden内
设置 - 自动填充及密码 - 密码 - 导出密码
访问
http://192.168.31.13:8443
,创建账户。点击 工具 - 导入数据 - 选择格式:Chrome(CSV) ,导入刚才从Chrome导出的csv文件
即可将Chrome内保存的密码迁移到Vaultwarden
Bitwarden客户端
全平台客户端请点此下载,这里使用浏览器插件演示登录
打开Bitwarden插件,
区域:自托管
,填写服务器URL为http://192.168.31.13:8443
,其他留空而后保存登录先前创建的账户,就可以正常使用了
还需要开启自动填充功能,可以参考这个教程
抛砖引玉
针对无公网情况,还可以使用内网穿透、Tailscale或Cloudflare Tunnel等方式穿透至公网进行服务,但本文篇幅已经很长,且着重于纯内网使用,故不再进行展开,有需要的可以研究
这里让ChatGPT写了一个自动打包备份 Vaultwarden 配置的脚本,配合crontab实现数据备份
#!/bin/bash
# 源文件夹路径
source_folder="/path/to/source/folder"
# 目标文件夹路径
destination_folder="/path/to/destination/folder"
# 获取当前日期(格式:年月日)
current_date=$(date +%Y%m%d)
# 打包文件名,添加日期作为前缀
archive_name="${current_date}_archive.tar.gz"
# 切换到源文件夹所在目录
cd "$(dirname "$source_folder")" || exit
# 创建打包文件
tar -czvf "$archive_name" "$(basename "$source_folder")"
# 移动打包文件到目标文件夹
mv "$archive_name" "$destination_folder"
感谢
- Vaultwarden Wiki中文版 (非官方翻译,但可以减少阅读障碍 | 英文版
- FiloSottile/mkcert
- dani-garcia/vaultwarden