私有化部署Vaultwarden密码管理器
Vaultwarden是一个密码管理器,支持chrome插件、移动端等。它是bitwarden的缩减版(因为bitwarden需要更大的内存,但是Vaultwarden只需要几百兆)。
- Vaultwarden官网:https://github.com/dani-garcia/vaultwarden
- bitwarden官网:https://github.com/bitwarden/server,https://contributing.bitwarden.com/
启动容器
拉取镜像:
docker pull vaultwarden/server
启动容器
mkdir /opt/vaultwarden docker run -d --name vaultwarden --cpus=1 -m 200M -e ADMIN_TOKEN=<you_master_password> -e SIGNUPS_ALLOWED=false -e ROCKET_WORKERS=10 -e LOG_FILE=/data/vaultwarden.log -v /opt/vaultwarden/:/data/ -v /etc/localtime:/etc/localtime --restart=unless-stopped -p 3333:80 vaultwarden/server # 挂载/etc/localtime是为了让容器中的时间与主机一致,也可直接使用/usr/share/zoneinfo/Asia/Shanghai挂载 # SIGNUPS_ALLOWED=false 是否允许注册,false不允许,默认true # ROCKET_WORKERS=10 设置10个工作线程,默认为:2 * <number of cpu cores> # LOG_FILE 指定日志文件的路径 # LOG_LEVEL=warn 设置日志级别,默认是info,选项有:“trace”、“debug”、“info”、“warn”、“error”或“off”
生成自签证书
由于Vaultwarden只支持https,所以还需要证书,使用以下方式生成自签证书,当然也可以从网上获取正规证书,就可以跳过该步骤了:
别的各种方式生成的证书只有网页可用,但是浏览器插件就无法登录,使用官方提供的自签证书生成方式可用,步骤如下:
先创建一个certs目录,之后的命令全在该目录执行:
mkdir ~/certs
cd ~/certs
创建 CA 密钥(您自己的小型内部证书颁发机构):
openssl genpkey -algorithm RSA -aes128 -out private-ca.key -outform PEM -pkeyopt rsa_keygen_bits:2048
-aes128
您也可以使用较旧的-des3
。
创建 CA 证书:
openssl req -x509 -new -nodes -sha256 -days 3650 -key private-ca.key -out self-signed-ca-cert.crt
该
-nodes
参数可防止在测试/安全环境中为私钥(密钥对)设置密码,否则每次启动/重新启动服务器时都必须输入密码。
创建一个 bitwarden 密钥:
openssl genpkey -algorithm RSA -out bitwarden.key -outform PEM -pkeyopt rsa_keygen_bits:2048
创建 bitwarden 证书请求文件:
openssl req -new -key bitwarden.key -out bitwarden.csr
创建一个包含以下内容的文本文件bitwarden.ext
,将域名更改为您的设置。
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:TRUE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
# DNS.1 = bitwarden.local
# DNS.2 = www.bitwarden.local
# Optionally add IP if you're not using DNS names:
IP.1 = 10.240.208.23
创建由根 CA 签名的 bitwarden 证书:
openssl x509 -req -in bitwarden.csr -CA self-signed-ca-cert.crt -CAkey private-ca.key -CAcreateserial -out bitwarden.crt -days 365 -sha256 -extfile bitwarden.ext
以上命令执行完之后,目录中内容应该如下:
[root@dev certs]# ls
bitwarden.crt bitwarden.ext private-ca.key self-signed-ca-cert.srl
bitwarden.csr bitwarden.key self-signed-ca-cert.crt
[root@dev certs]#
之后把 bitwarden.crt
和 bitwarden.key
文件给nginx使用即可。如果配置后插件不可用,就把 self-signed-ca-cert.crt
和 bitwarden.crt
这两个文件在客户端(windows等)中加入可信根证书。
使用nginx配置ssl反向代理
也可以使用别的代理,只是需要使用https进行访问,要不然无法注册账号使用!
如果nginx等不会配置,可以使用『Nginx Proxy Manager』,一个nginx的web端。
官方提供的nginx配置:https://github.com/dani-garcia/vaultwarden/wiki/Proxy-examples
在 /etc/nginx/conf.d/
目录新建一个 vaultwarden.conf
文件,文件内容如下(配置好后重启nginx):
upstream vaultwarden-default {
zone vaultwarden-default 64k;
server 127.0.0.1:3333; # 填写要代理的ip及端口
keepalive 2;
}
# Needed to support websocket connections
# See: https://nginx.org/en/docs/http/websocket.html
# Instead of "close" as stated in the above link we send an empty value.
# Else all keepalive connections will not work.
map $http_upgrade $connection_upgrade {
default upgrade;
'' "";
}
# Redirect HTTP to HTTPS
server {
listen 80;
listen [::]:80;
server_name vaultwarden.example.tld;
if ($host = vaultwarden.example.tld) {
return 301 https://$host$request_uri;
}
return 404;
}
server {
#HTTPS的默认访问端口443。
#如果未在此处配置HTTPS的默认访问端口,可能会造成Nginx无法启动。
listen 443 ssl http2;
listen [::]:443 ssl http2;
#填写证书绑定的域名
#server_name <YOURDOMAIN>;
# Specify SSL Config when needed
ssl_certificate /etc/nginx/ssl/bitwarden.crt;
ssl_certificate_key /etc/nginx/ssl/bitwarden.key;
#ssl_trusted_certificate /path/to/certificate/letsencrypt/live/vaultwarden.example.tld/fullchain.pem;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
client_max_body_size 525M;
#自定义设置使用的TLS协议的类型以及加密套件(以下为配置示例,请您自行评估是否需要配置)
#TLS协议版本越高,HTTPS通信的安全性越高,但是相较于低版本TLS协议,高版本TLS协议对浏览器的兼容性较差。
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
#表示优先使用服务端加密套件。默认开启
ssl_prefer_server_ciphers on;
location / {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://vaultwarden-default;
}
# Optionally add extra authentication besides the ADMIN_TOKEN
# Remove the comments below `#` and create the htpasswd_file to have it active
#
#location /admin {
# # See: https://docs.nginx.com/nginx/admin-guide/security-controls/configuring-http-basic-authentication/
# auth_basic "Private";
# auth_basic_user_file /path/to/htpasswd_file;
#
# proxy_http_version 1.1;
# proxy_set_header Upgrade $http_upgrade;
# proxy_set_header Connection $connection_upgrade;
#
# proxy_set_header Host $host;
# proxy_set_header X-Real-IP $remote_addr;
# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# proxy_set_header X-Forwarded-Proto $scheme;
#
# proxy_pass http://vaultwarden-default;
#}
}
重启nginx服务后,即可访问代理ip进行注册使用。
使用
使用浏览器插件 bitwarden
时(虽然用的Vaultwarden服务,但它只是bitwarden的精简版,所以插件还是用bitwarden),选择登录到自托管,只需要在服务器URL中填入反向代理ip即可,例如我的是: https://10.240.208.23:666
对于安全加固,可以使用Fail2Ban,具体使用教程可以查看 Fail2ban的使用:https://wuyea.top/posts/243899401.html