LoginSignup
13
11

Vaultwardenで家族全員のパスワードセキュリティレベルを激アゲした話

Last updated at Posted at 2023-09-20

1. はじめに

パスワードって、なんで皆使いまわしちゃうんでしょうね。
情報漏洩のリスクは勿論、過去どのサービスを使ったのかすら忘れてしまいます。
自分だけBitwardenの有料プランに加入して2FA含めて管理していましたが、家族の方もどうにかしてやろうと考えた次第です。
今回Vaultwardenを使用した理由は主に3つです。

  • 無料であること
  • TOTPを管理できること
  • 多種多様なクライアントで使用できること

今回使用するのは次の4つです

  • Vaultwarden(Docker)
  • 公開用のドメイン(Cloudflareで購入してると楽)
  • Cloudflare Tunnel
  • クラウドVMでもオンプレでもいいのでLinuxマシン(今回はAzureのB1sVM無料枠のUbuntu22.04)
  • メール送信の為のSMTPサーバ(今回はMailTrapを使用)

2. ひとまずVaultwardenを動かそう

VaultwardenはDockerで動かすのが一番楽です。
今回はAzureを使用して構築します。SSHも面倒なので操作はAzure Portalのシリアルコンソールを使用しています。(コピペも出来るよ)
下記はDockerを一通り導入するためのセットです。

sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo \
  "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

次に適当な場所にVaultwarden用にディレクトリを作ります。
自分はルート配下に作りました。
sudo mkdir /vaultwarden/
次に作ったディレクトリに移動してからsudo nano docker-compose.yml

version: '3'
services:
  vaultwarden:
    image: vaultwarden/server
    container_name: vaultwarden
    environment:
      - TZ=Asia/Tokyo
      - SIGNUPS_ALLOWED=true
      - VIRTUAL_HOST=vaultwarden.example.com
      - VIRTUAL_PORT=80
      - SMTP_HOST=live.smtp.mailtrap.io
      - SMTP_FROM=noreply-vaultwarden@example.com
      - SMTP_PORT=587
      - SMTP_SECURITY=starttls
      - SMTP_USERNAME=example
      - SMTP_PASSWORD=example
      - SMTP_AUTH_MECHANISM="Login"
    env_file:
        - /vaultwarden/vaultwarden.env
    volumes:
      - /vaultwarden/vw-data:/data
    ports:
      - 80:80
    restart: always

SMTPに関してはお好みのものを使用してください。
上記の場合、SMTP周りのusernameとpasswordとその他をちょっと変えればmailtrapですぐ使えます。
次にsudo nano vaultwarden.env

WEBSOCKET_ENABLED=true
ADMIN_TOKEN='ここに40文字のランダム文字列とかargon2とか入れる'

これで動かす準備はOKです。sudo docker compose up -dで立ち上げてcurl http://127.0.0.1 とか見てみましょう。
image.png
バッチリローカルで動いてます。
動作確認する分にはlocalhostでも良いのですが、外部からアクセスする場合、httpsでないと使えません。
次はCloudflare Tunnelを使って安全に公開します。

3. Cloudflare ZeroTrustのTunnelでInbound Deny/ポートフォワードなしで公開しよう(勝手に証明書も付くよ!)

CloudflareのポータルからZeroTrust、Access→Tunnelsを開きます。
image.png

トンネル名を決め~の(なんでもいいです)
image.png

トンネルコネクタを入れ~の
(左下をコピペして実行するだけでコネクタのインストールから接続まで勝手にやってくれます)
image.png

どこに繋ぐかを設定し~の(使用するドメインはCloudflareで管理されている必要があります)
image.png
今回はAzureを使用しましたが、グローバルIPアドレスを1つ割り振ってVnet外のInboundはAll Denyにしています。(SSHも不可)
image.png
これだけでInboundをAll Denyしていても接続できる非常にけしからんトンネルが完成しました。
設定したサブドメインに対して接続してみましょう。
image.png
ちゃんと繋がりました。
image.png
Cloudflare Tunnelは勝手にLet`s Encrypt証明書も取ってくれて更新するので手間がかかりません。
ここまでの作業が終わったら、Web版Vaultwardenにアクセスしてアカウントを作成して下さい。
また、Vaultwardenに作成したアカウント自体に2段階認証を設定しておくことをオススメします。

4. Adminページで設定変更しよう

/adminを開き、vaultwarden.envで設定したAdmin Tokenを入れます。
image.png
重要なところだけピックアップします。

  • General

    • Domain URL →メールや内部に使用されるドメインです。これを変え忘れると、メールのリンク等のドメインがlocalhostになってしまいます。
    • Allow new signups →アカウント作成後はオフにしてください。外部のユーザーがアカウントを作成できてしまいます。
    • Allow invitations →アカウント作成後はオフにしてください。内部のユーザーが外部のアカウント作成に招待できてしまいます。
  • SMTP Email Settings→メール送信のための設定です。いい感じにしてください。

上記の設定が完了し、長期間変えることがない事が予想される場合はVaultwarden.envのADMIN_TOKENを消してください。
/adminページへアクセス出来なくなりますので、攻撃リスクを低減できます。

5. 今まで使っていたパスワードマネージャー等から引き抜こう

Vaultwardenは、Bitwardenと同じく多種多様なマネージャーからインポートすることが出来ます。
例えば

  • 本家Bitwarden
  • Chrome(csv) chrome://password-manager/settings
  • Firefox(csv) about:logins
  • Keepass 2(xml)
  • LastPass(csv)
  • Safari and macOS(csv)
  • 1Password(csv/1pif/1pux)
    などなど

Chromeであれば、上記のリンクを開いてファイルをダウンロードを押すだけで簡単にエクスポート出来ます。
image.png
エクスポートしたcsvデータは、Web版Vaultwardenで指定してあげるだけで簡単にインポートできます。
image.png

6. 実際に使ってみよう

Chrome、Firefox、MSEdge等は基本的にBitwardenの拡張機能を使用します。
また、スマートフォンではアプリストアからBitwardenのアプリをダウンロードしてください。
https://bitwarden.com/ja-JP/download/
初期設定ではbitwarden.comに対して接続するので、セルフホストに変更します。
image.png
ホスティングしているドメイン名に設定して保存を押します。
image.png
事前に作成したアカウントのメールアドレスを入力します。
image.png
マスターパスワードを入力します。
image.png
2段階認証を設定した人はこのタイミングで入力してください。
ログインに成功すれば、保管庫が見えるはずです。
image.png

おすすめの設定は設定→管理→自動入力→ページ読み込み時の自動入力を有効化にチェックです。
これでページを開いた際に、自動でパスワードを入力してくれます。(httpsで入力したパスワードは、httpで警告してくれます)
image.png
image.png

また、TOTPも自動入力時にクリップボードに保存されるのでTOTP入力画面でCtrl+Vするだけでログインできます。

AndroidやiPhoneでも同じ様に自動入力サービスの設定を行うことで、自動でパスワードのサジェストをしてくれます。

7. セキュリティレベルを激アゲしよう

ここまでは今までとセキュリティレベルは何ら変わりありません。

なのでいままで使用していたパスワードの記録から1つ1つサービスを確認し、今後も使うサービスであれば設定できる最大長かつランダムなパスワード(と2FA)を設定し、Vaultwardenに記憶させます。
今後使用しないサービスであれば、可能であればアカウントを削除したり、削除できない場合は同じく最大長かつランダムなパスワードを設定します。

結果、2時間ほど作業して100近くあったパスワード群は40ほどまで減り、新しくサービスに登録する場合は必ずパスワードマネージャーで生成・登録するように統一できました。
定期的にVaultwarden自体のバックアップも取っているため、万が一VMが壊れた場合でも復旧できるようにしてあります。(パスワード自体は暗号化されているので直接読めません)

8. 最後に

今回はできる限りコストを抑えてやってみました。
AzureのVMは無料枠なのでほぼ0円、ドメインも年間1000円程度です。
raspberrypiでも十分動きますし、ポート開放する必要もありません。
ぜひ皆さんもセルフホストしてみてはいかがでしょうか。
image.png

13
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
11