让我们部署自己的密码管理服务器吧 - Bitwarden

AI 生成的摘要

加载中...

(此服务由 xLog 驱动)

这篇文章上次修改于 11 个月前,可能部分内容已经不适用,如有疑问可询问作者。

让我们部署自己的密码管理服务器吧 - Bitwarden

Bitwarden 是一个开源的的密码管理器,可以部署自己的私有密码管理服务器

Preface

Google Chrome / Edge 等,都有自己的密码管理功能,还能自动的填充登录表单等,这很好,但又不很好,例如我不想让它自动填充的时候,它总是自动把我的邮箱地址填充上去@猫猫,而且浏览器保存的登录账号和密码,可以轻松的钓鱼获取到,这就很不安全了;我想拥有自己的密码管理器,购买那些付费服务对我而言还是太昂贵了;不得不承认的,某些付费的密码管理器做的真不错;所以看中了 Bitwarden ,这个可以部署到自己的服务器上面,数据迁移也很方便。不过官方的 System 又笨重,又臃肿,而且还需要购买付费版 Id 和 Key,才能解锁付费版本的高级功能,这就有点不是太爽。于是,我找到了 vaultwarden ,它基本复刻了所有的功能(包括需要付费解锁的高级功能),而且还支持两重校验(TOTP 验证码功能),意味着我不用分别安装 Google OR Microsoft 的密码管理器了,简直不要太舒服了。

Start

Deploy

开始,首先你得有 Docker + Docker-Compose + Nginx(任一可以进行反向代理的 Web 端) + SSL证书

Docker-Compose Version : >= 2.x

Docker Version : >= 20.10.x

官方示例的是 docker 命令,虽好,但是管理不够方便,我是非常推荐 docker-compose 一把梭,管理更加直观,方便多了。

docker-compose.yml 示例

YAML
version: '3.8'

services:

  key:
    container_name: key-server
    image: vaultwarden/server:latest
    environment:
      - TZ=Asia/Shanghai               # 传入的时区
      - SIGNUPS_ALLOWED=false          # 允许用户注册
      - WEBSOCKET_ENABLED=true         # 开启 Websocket
      - ADMIN_TOKEN=                   # Admin 管理面板的 token ,访问路由 /admin
      - SMTP_HOST=smtp.qiye.aliyun.com # SMTP 服务器地址
      - SMTP_FROM=                     # STMP 的来源,可以忽略
      - SMTP_PORT=587                  # 发送邮件的端口,一般是 587,默认即可
      - SMTP_SECURITY=starttls         # 使用 TLS,默认即可
      - SMTP_USERNAME=                 # SMTP 邮箱用户名
      - SMTP_PASSWORD=                 # SMTP 邮箱密码
    volumes:
      - ./data/keycos:/data            # 映射的数据卷,用于数据持久化
    ports:
      - '8080:80'                      # 映射的端口            
    networks:
      - key-network
    restart: on-failure:16


networks:
  key-network:
    driver: bridge
Copy

有 docker-compose.yml 文件,那就很简单了,我们填写好 docker-compose.yml 文件里面的信息,直接梭哈

注意:首次启动,上面的 SIGNUPS_ALLOWED 这一项应为 true 当你注册完毕,修改为 false 重新生成容器

BASH
sudo docker compose up -d # 2.x 版本用法

sudo docker-compose up -d # 1.x 版本用法,2.x仍兼容
Copy

看到上面的端口映射关系,你可能会好奇,为啥不直接暴露 80 端口?这样是不太安全的,我们需要使用 Nginx 进行反向代理

Reverse_Proxy

进行反向代理,让 Nginx 暴露出来,防止直接被确认后端服务指纹,也方便我们架设 WAF 去拦截非法请求。

反向代理+网站 配置文件示例如下

NGINX
# The `upstream` directives ensure that you have a http/1.1 connection
# This enables the keepalive option and better performance
#
# Define the server IP and ports here.
upstream vaultwarden-default {
  zone vaultwarden-default 64k;
  server 127.0.0.1:8080;
  keepalive 2;
}

# Redirect HTTP to HTTPS
server {
    listen 80;
    listen [::]:80;
    server_name vaultwarden.example.tld;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name vaultwarden.example.tld;

    # Specify SSL Config when needed
    #ssl_certificate /path/to/certificate/letsencrypt/live/vaultwarden.example.tld/fullchain.pem;
    #ssl_certificate_key /path/to/certificate/letsencrypt/live/vaultwarden.example.tld/privkey.pem;
    #ssl_trusted_certificate /path/to/certificate/letsencrypt/live/vaultwarden.example.tld/fullchain.pem;

    client_max_body_size 128M;

    location / {
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header 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 "Connection" "";
    #
    #  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;
    #}
}
Copy

这样我们就部署好反向代理了,但是鉴于各种客户端和桌面端都需要借助于 HTTPS OR WSS 访问;所以,我们还需要部署 SSL 证书,至于如何申请和安装 SSL 证书,我就不再赘述了,Google 上各个大佬都写的非常详尽。

Use

在浏览器上,我们可以使用插件,搜索 Bitwarden ,安装即可,记得登录的时候设置为自己的服务器。

例如

我们仅需要设置服务器地址即可,其他客户端操作同理,同时浏览器插件还可以与桌面端进行解锁联动,这个功能超赞!支持指纹快速解锁(WIndows Hello),在手机上也能自动识别到可以填充的表单,解锁方式可以设置为指纹解锁;当然,都支持 PIN 码解锁!

当然你也可以进入 /admin 进入超级管理员界面进行管理,这个 token 已经在 docker-compose.yml 传入环境变量值中,推荐使用复杂度比较高的 token

例如

BASH
➜  ~ openssl rand -hex 48
50f2830c5331dc624d761188b686e3ff87edaa1bd7c82f09003902cc978151d93559a9c713291f13bbaa1d199a253e53
Copy

可以生成一个复杂度比较高的 token ,然后写入 docker-compose.yml 即可,然后重新生成容器,就可以访问 /admin 管理界面了

End

享受你的私有密码管理服务器吧,浏览器插件也可以填充表单哦?享受它吧!

几天后,我愉快的把 Edge 和 Chrome 里面保存的登录密码和填充的表单清空了,这个东西用起来太舒服了!

此文章已经由它的创作者签名并安全地存储在区块链上。