VaultWardenをubuntu上にセルフホストする

Page content

「VaultWardenってなんだ?」と「導入目的」

  • OSSなのでセルフホストできるパスワードマネージャー。
  • 色々なサイトのパスワードを管理、パスワードの自動投入とかしてくれる、便利。
  • 本家であるbitwardenに比べ、vaultwardenは軽量
  • 互換があるので、birwardenのクライアントやブラウザ拡張が使える
  • 今、LastPassに課金していているので、少しでもVPS代を回収するために自前化してみよう
  • dockerなので比較的導入は容易(ただしハマりポイントもいくつかあった)

導入手順①コンテナ準備

docker,docker-composeはいれておく(割愛)

Using Docker Compose · dani-garcia/vaultwarden Wiki · GitHub

$ adduser vaultwarden
$ su - vaultwarden
$ mkdir vw
$ nano docker-compose.yml
  • apacheのreverse proxy経由で公開するので、80ではなく60080でlisten
  • 証明書発行とDNS登録面倒なので、サブディレクトリでサービス
  • コンテナからlocalのPostfixにドメイン名でアクセスするためにextra_hostsの設定
  • メール配信が必須なので、事前に以下を実施
    • SMTP-AUTH対応
    • DKIM対応(gmail等主要なメールサーバ宛への送信に必要)
    • TLS対応

docker-compose.yml

version: '3'

services:
  vaultwarden:
    container_name: vaultwarden
    image: vaultwarden/server:latest
    restart: unless-stopped

    networks:
      - vw_my_network      
    volumes:
      - ./data/:/data/
    ports:
      - 60080:80
    environment:
      - DOMAIN=https://example.com/vaultwarden/
      - LOGIN_RATELIMIT_MAX_BURST=10
      - LOGIN_RATELIMIT_SECONDS=60
      - ADMIN_TOKEN='-----'
      - ADMIN_RATELIMIT_MAX_BURST=10
      - ADMIN_RATELIMIT_SECONDS=60
      - SENDS_ALLOWED=true
      - EMERGENCY_ACCESS_ALLOWED=true
      - WEB_VAULT_ENABLED=true
      - SIGNUPS_ALLOWED=true
      - SIGNUPS_VERIFY=true
      - SIGNUPS_VERIFY_RESEND_TIME=3600
      - SIGNUPS_VERIFY_RESEND_LIMIT=5
      - SMTP_HOST=example.com
      - SMTP_FROM=vaultwarden@example.com
      - SMTP_SECURITY=starttls
      - SMTP_USERNAME=vaultwarden@example.com
      - SMTP_PASSWORD=smtp_auth_password
      - SMTP_FROM_NAME=vaultwarden
      - SMTP_PORT=587
    extra_hosts:
      - "example.com:xxx.xxx.xxx.xxx"

networks:
  vw_my_network:
    driver: bridge

導入手順②コンテナの作成と起動

起動確認したら一旦終了しておく。

sudo docker-compose up

vaultwarden@moooi:~/vw$ docker-compose up
vaultwarden is up-to-date
Attaching to vaultwarden
vaultwarden    | /--------------------------------------------------------------------\
vaultwarden    | |                        Starting Vaultwarden                        |
vaultwarden    | |                           Version 1.32.0                           |
vaultwarden    | |--------------------------------------------------------------------|
vaultwarden    | | This is an *unofficial* Bitwarden implementation, DO NOT use the   |
vaultwarden    | | official channels to report bugs/features, regardless of client.   |
vaultwarden    | | Send usage/configuration questions or feature requests to:         |
vaultwarden    | |   https://github.com/dani-garcia/vaultwarden/discussions or        |
vaultwarden    | |   https://vaultwarden.discourse.group/                             |
vaultwarden    | | Report suspected bugs/issues in the software itself at:            |
vaultwarden    | |   https://github.com/dani-garcia/vaultwarden/issues/new            |
vaultwarden    | \--------------------------------------------------------------------/
vaultwarden    | 

導入手順③Apache経由でHTTPS化

valutwarden自体でhttps対応もできるようだが、検索を見る限りあまり推奨しないという記述もあるのでapache2のmod_proxyでReverse Proxy経由で公開することにする。

https://example.com/vaultwarden にアクセスすると、ローカルのListenに60080に転送する。(VaultWardenはデフォルトだと80でlistenして、すでに動いているapache2やnginxと競合するのでdocker-compse.ymlでポートを変更している。)

/etc/apache2/site-enabled/ssl.conf

	#bitwarden
	<Location /vaultwarden>
		RewriteEngine On
		RewriteCond %{HTTP:Upgrade} =websocket [NC]
		RewriteRule /notifications/hub(.*) ws://localhost:60080/$sublocation/notifications/hub/$1 [P,L]
		ProxyPass http://localhost:60080/vaultwarden
	
	    ProxyPreserveHost Off
		RequestHeader set X-Real-IP %{REMOTE_ADDR}s
		RequestHeader setifempty Connection "Upgrade"
		RequestHeader setifempty Upgrade "websocket"
	</Location>		

公式ドキュメントにあるProxy設定例をそのまま利用。

$ systemctl restart apache2

image-20240904001913029

URLにアクセスしてVaultWardenのログイン画面がでていればOK。このままだと、誰でもアカウント発行できるので、docker-ccompose.yamlの下記あたりをfalseにしておく。

  - SIGNUPS_ALLOWED=false

関連記事