简介
Bitwarden是一个开源的密码管理工具。它可以存储用户名、密码、网页填写的身份信息、信用卡,还能生成高强度的密码和用户名(再也不用为了取名字想半天了😂),同时提供安全的加密方式来保护这些密码免受未经授权的访问。Vaultwarden 是一个用于本地搭建 Bitwarden 服务器的第三方 Docker 项目。Vaultwarden 比 Bitwarden 官方版更轻量,除不支持 Bitwarden 官方企业版的部分功能(详情见这里)外,其他大部分功能均支持并且免费! 中文版文档:https://rs.ppgg.in/
使用argon2生成加密后的哈希值
因为安全考虑,Vaultwarden 官网推荐使用argon2把密码经过加密生成哈希值
下面有两种我推荐的使用方式
1.使用docker运行临时容器生成 (简单方便,新手推荐)
docker run --rm -it vaultwarden/server /vaultwarden hash
然后会让你输入两次密码(请务必记住这个管理员密码),长度不能小于8位,输入完成后即可生成ADMIN_TOKEN
可以看到即使输入了两次一样的密码,生成的TOKEN还是不一样
复制里面的内容,注意不要复制 ''
2.使用argon2根据参数生成 (更加灵活)
先安装argon2
apt install argon2
运行命令 把xxx替换成你要输入的密码,后面参数可以根据vps性能灵活调整
echo -n "xxx" | argon2 "$(openssl rand -base64 32)" -e -id -k 65540 -t 3 -p 4
把生成后的结果复制下,等会用
安装
还是先创建目录以及compose.yml文件
mkdir -p ~/docker/vaultwarden && cd ~/docker/vaultwarden && vim compose.yml
services:
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
restart: unless-stopped
ports:
- "10002:80" # 可修改
environment:
- USE_SYSLOG=true # 开启用户日志
- LOG_FILE=/data/vaultwarden.log # 设置用户日志位置
- LOG_LEVEL=warn # 修改日志等级为 warn 警告,可以减少日志消息数量
- DOMAIN=https://xxx # 修改
- SIGNUPS_ALLOWED=true # 是否能注册账号,先使用true把账号注册了再改成false
- ADMIN_TOKEN=xxx # 修改
volumes:
- ./bw-data:/data # 将数据存储在本地的 bw-data 目录中,可以根据需要更改
环境变量文档 https://github.com/dani-garcia/vaultwarden/blob/main/.env.template
先把域名填上,接着把之前的复制的哈希值粘贴进去 替换 ADMIN_TOKEN
后面的 xxx
Esc:wq退出并保存,这时还需要把 ADMIN_TOKEN
里面的$替换成$$才能正常识别($
符号有时会被解释为环境变量的引用,所以使用$$
来转义),执行下面的命令
sed -i 's#\$#\$\$#g' compose.yml
在运行之前可以执行
docker compose config
查看你的ADMIN_TOKEN格式是否有错,下图WARN警告就是错误的配置(没有把$转换成$$)
运行
docker compose up -d && docker compose logs -f
如果显示下面的警告就说明你的 ADMIN_TOKEN
没有正确的配置,检查是否添加了”
进入 npm 页面添加反向代理,注意这次要选中 Websockets Support,因为 vaultwarden 是支持 Websocket,然后再把SSL选上
进入页面,点击创建账户
创建完了输入密码登录,在登录之前,你可以按下F12控制台,点击网络
登录后你就可以看到一个ws请求,就是支持Websocket的证明
我们注册成功后记得 compose.yml
文件中修改 SIGNUPS_ALLOWED=false 禁止用户注册,可以邮件邀请注册
修改完成后重启
docker compose down && docker compose up -d
管理面板
可以在域名后面加 /admin
进入管理员页面,输入之前输入两次的密码
一般进入后设置的就两个一个发送邮箱的设置,一个2FA保护邮箱
先设置用哪个邮箱给用户发送邮件
我使用的是qq,其他邮箱我们只需要查找他的SMTP发送邮件的 host
和 SSL加密的 port
| 邮箱 | host | port |
| ——— | ————– | ———- |
| qq.com | smtp.qq.com | 465 或 587 |
| 163.com | smtp.163.com | 465 或 994 |
| 126.com | smtp.126.com | 465 |
| yeah.net | smtp.yeah.net | 465 |
| gmail.com | smtp.gmail.com | 465 或 587 |
除了qq的测试过,其他未测试,port端口大部分都是465 或 587可以换着测试,也欢迎各位的反馈
如果是465的端口 Secure SMTP
需要设置成 force_tls
587端口(有时候是25) Secure SMTP
需要设置成 starttls
(默认就是starttls)
不支持加密的Port端口 25 SMTP_SECURITY
设置 off
(不推荐,建议换成支持SSL/TLS加密的邮箱)
配置SMTP发送邮件功能
进入qq邮箱点击 设置-账户-管理服务
然后点击生成授权码,用自己已有的方式验证,我习惯是手机令牌
生成的这个授权码就是密码
记得配置完成后先点击左下角蓝色 Save
保存按钮,然后再在Test SMTP中填写你自己的邮箱验证是否配置成功
然后在邮箱中就能成功看到发送的测试邮件
可以进入User发送邮件邀请用户进入,这个页面也可以对用户进行一些操作 删除2FA验证、让用户退出下线、删除用户、禁用用户
邮箱两步验证(可选)
开启邮箱的两步验证
输入主密码进入 输入绑定邮箱,填写邮件中的 6 位数验证码,点击启用
这样下次登录就会要去填写邮件中的验证码才能登录,更加安全
当然也可以使用验证器应用,我比较喜欢使用 Google Authenticator
Fail2ban
设置 Fail2ban 保护 Vaultwarden 防止暴力破解,安装和命令可以看之前的教程
防止用户登录暴力破解
vim /etc/fail2ban/filter.d/vaultwarden.conf
[INCLUDES]
before = common.conf
[Definition]
failregex = ^.*Username or password is incorrect\. Try again\. IP: <ADDR>\. Username:.*$
ignoreregex =
Esc:wq退出并保存
设置jail
vim /etc/fail2ban/jail.d/vaultwarden.conf
[vaultwarden]
enabled = true
# 填写之前配置的端口
port = 10002
filter = vaultwarden
banaction = %(banaction_allports)s
chain = FORWARD
# 存放log的路径 如果是按照教程来的就是下面的路径不用改
logpath = /root/docker/vaultwarden/bw-data/vaultwarden.log
maxretry = 3
bantime = 14400
findtime = 14400
重启 fail2ban
sudo systemctl reload fail2ban
这时使用
fail2ban-client status
就能看到多了一个新的vaultwarden
查看详细
fail2ban-client status vaultwarden
可以看到已经封了一个ip了
防止管理页面暴力破解
vim /etc/fail2ban/filter.d/vaultwarden-admin.conf
[INCLUDES]
before = common.conf
[Definition]
failregex = ^.*Invalid admin token\. IP: <ADDR>.*$
ignoreregex =
Esc:wq退出并保存
设置jail
vim /etc/fail2ban/jail.d/vaultwarden-admin.conf
[vaultwarden-admin]
enabled = true
# 填写之前配置的端口
port = 10002
filter = vaultwarden-admin
action = iptables-allports[name=vaultwarden, chain=FORWARD]
# 存放log的路径 如果是按照教程来的就是下面的路径不用改
logpath = /root/docker/vaultwarden/bw-data/vaultwarden.log
maxretry = 3
bantime = 14400
findtime = 14400
重启 fail2ban
sudo systemctl reload fail2ban
fail2ban-client status vaultwarden-admin
这样你的 vaultwarden 就可以预防被人跑字典暴力破解了
导出chrome自动填充密码到vaultwarden
打开Chrome右上角三个点,设置-自动填充和密码-Google密码管理工具,弹出的新页面选择设置-导出密码 也可以直接打开网址 chrome://password-manager/settings (如果有电脑密码需要输入后下载)
登录vaultwarden
文件格式选择Chrome (csv),选择刚才下载的 Chrome 密码.csv
导入成功后记得删除Google上记录的密码
如果是新版Chrome 你登录了google账户还会在网络上保存 进入 https://myaccount.google.com/security 往下滑
目前还只能点击单个删除,你可能会说为什么都有google了我为什么还需要 Vaultwarden ,因为数据的安全和私密性是无价的,我记得之前在论坛上看到过Chrome存储的密码一键导出脚本,只要你安装了来路不明的软件就可能所有账号密码向别人敞开。Vaultwarden是一个开源密码管理器,采用端到端加密保护用户数据。用户可以搭建在私有服务器上,确保密码和敏感信息的安全性。
网页端使用和设置
我们搭建的是服务端的Vaultwarden,客户端都使用的Bitwarden的工具 可以访问 https://bitwarden.com/download/ 下载对应的版本
推荐使用Google Chrome浏览器,插件地址 https://chrome.google.com/webstore/detail/bitwarden-free-password-m/nngceckbapebfimnlniiiahkandclblb
打开后选择自托管,输入搭建的地址
点击设置根据电脑是否有其他人使用来设置超时时间,我在公司电脑设置的就是浏览器重启时
设置-自动填充 勾选自动填充,能让页面一打开插件如果识别到了账号密码框就自动填充(如果自动填充失败就手动点一下你要填充的那个账号或者使用快捷键Ctrl+Shift+L),默认URI匹配检测设置为主机更精准
如果有复制粘贴,修改的操作,推荐点击弹出窗口进行操作,因为只要一点击网页就会自动消失,弹出后可以一直操作
以后注册账号的时候推荐使用 密码生成器 生成密码,生成长度根据网页的密码要求调整,防止长度越大,暴力破解时长约久,大小写和特殊符号都加上(反正以后你也不需要记密码了)
随机生成用户名功能也很实用 (再也不用为了起名字想半天了😂)
还可以保存2FA中的TOTP,一般就是我们常用的两步验证
但是这个TOTP只能输入密钥,一般给的都是二维码,这时有两种方式,一种使用手机来扫码,需要下载app,推荐google商店的这个https://play.google.com/store/apps/details?id=com.google.zxing.client.android,另一种时电脑上下载一个识别二维码的软件,推荐吾爱作者的工具 https://mojian.lanzout.com/iw1e11f4438b,本地解析不联网,之前也尝试过草料二维码浏览器插件,但是他是将图片上传他们服务器进行解析,这种安全认证类型还是推荐本地软件不联网
将这串解析后的数据粘贴进bitwarden的totp中 (仔细观察你会发现,解析出来的多了些信息,标记了发布者是Vaultwarden,邮箱,还有totp协议,真正使用到的还是secret里面的密钥)
下次进入这个网址也不用打开手机找验证码了,而且多端同步,手机丢失也不怕
更多功能可以参考官方文档 https://bitwarden.com/help/
参考文献:
https://github.com/dani-garcia/vaultwarden/wiki/FAQs