加载中...

私有化部署Vaultwarden密码管理器


私有化部署Vaultwarden密码管理器

Vaultwarden是一个密码管理器,支持chrome插件、移动端等。它是bitwarden的缩减版(因为bitwarden需要更大的内存,但是Vaultwarden只需要几百兆)。

启动容器

  1. 拉取镜像:

    docker pull vaultwarden/server
  2. 启动容器

    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,所以还需要证书,使用以下方式生成自签证书,当然也可以从网上获取正规证书,就可以跳过该步骤了:

官方内容引用链接:https://github.com/dani-garcia/vaultwarden/wiki/Private-CA-and-self-signed-certs-that-work-with-Chrome

别的各种方式生成的证书只有网页可用,但是浏览器插件就无法登录,使用官方提供的自签证书生成方式可用,步骤如下:

先创建一个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.crtbitwarden.key 文件给nginx使用即可。如果配置后插件不可用,就把 self-signed-ca-cert.crtbitwarden.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


文章作者: 无夜
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 无夜 !
评论
  目录