セキュリティを借りるのはもうやめよう:DockerでVaultwardenをセルフホストする

HomeLab tutorial - IT technology blog
HomeLab tutorial - IT technology blog

パスワード疲れの問題

私たちの多くは、少なくとも150から200のデジタルアイデンティティを使い分けています。銀行アプリ、仕事用メール、そして10%割引のために一度だけ利用したECサイトなど、認証情報の量は膨大です。長年、クラウドベースのマネージャーであるLastPassや1Passwordを使うのが標準的なアドバイスでした。それらは便利で、攻撃の標的になるまではうまく機能していました。

セキュリティはもはや暗号化だけの問題ではなく、信頼の問題です。LastPassが2022年に大規模な漏洩を起こした際、それはテックコミュニティにとっての警鐘となりました。あなたは本質的に、デジタルライフ全体の鍵を企業に預けているのです。もし彼らのサーバーがダウンすれば、あなたは締め出されます。料金が倍になれば、「利便性という名の税金」を払い続けるしかありません。最悪の場合、彼らがハッキングされれば、あなたの暗号化された保管庫(ヴォルト)は攻撃者のハードドライブに保存され、ブルートフォース攻撃にさらされることになります。

なぜ中央集権化はセキュリティの悪夢なのか

大規模なSaaSプロバイダーは「ハニーポット」です。たった一度の侵入で何百万もの暗号化された保管庫が手に入るため、世界中の巧妙な攻撃者を引きつけます。これらの企業は業界標準のAES-256暗号化を使用していますが、バックエンドのロジックやメタデータの取り扱いについて、私たちには一切見えません。あなたはブラックボックスの中で操作しているのです。

HomeLab愛好家やプライバシーを重視するユーザーは、別のモデル、つまり「データの主権」へと移行しています。クラウドサービスの「設定して放置できる」同期機能は維持しつつ、自前のハードウェアによる鉄壁のセキュリティを求めています。データベースを自ら所有し、バックアップを管理し、許可なく保管庫がローカルネットワークから出ないようにしたいのです。

候補:Bitwarden vs. Vaultwarden

Bitwarden is オープンソースのパスワード管理におけるゴールドスタンダードです。監査を受け、透明性が高く、あらゆるデバイスで動作します。しかし、公式のBitwardenスタックはリソースを大量に消費します。重い.NETコアとMicrosoft SQL Serverに依存しており、アイドリング時でも2GBから3GBのRAMを消費することがよくあります。個人のパスワードマネージャーとしては、オーバーヘッドが大きすぎます。

Vaultwardenはこれを解決します。Rustで書かれた、Bitwarden APIの軽量な実装です。公式のBitwardenアプリやブラウザ拡張機能と完全に互換性がありますが、余計な機能は削ぎ落とされています。公式スタックが数ギガバイトのメモリを必要とするのに対し、Vaultwardenは通常10MBから50MBのRAMしか消費しません。Raspberry Piや小規模なVPSに最適です。

セットアップ:DockerでVaultwardenをデプロイする

DockerはVaultwardenを実行するための最もクリーンな方法です。環境を分離し、アップデートも新しいイメージをプルするだけで完了します。私はこのセットアップを複数のデバイスで2年以上運用していますが、同期エラーは一度も起きていません。

ステップ1:必要なもの

ターミナルを操作する前に、いくつか準備するものがあります:

  • DockerとDocker Composeがインストールされたサーバー(月5ドルのVPSや古いノートPCでも可)。
  • ドメインまたはサブドメイン(例:vault.yourdomain.com)。
  • リバースプロキシ(Nginx Proxy Manager、Caddy、Traefikなど)。VaultwardenはHTTPSを必須とします 最近のブラウザは、暗号化されていない接続では、暗号化に必要なWeb Crypto APIをブロックします。

ステップ2:設計図

保管庫用のディレクトリを作成し、設定ファイルを開きます:

mkdir ~/vaultwarden && cd ~/vaultwarden
nano docker-compose.yml

以下の設定をファイルに貼り付けます:

services:
  vaultwarden:
    image: vaultwarden/server:latest
    container_name: vaultwarden
    restart: always
    environment:
      - SIGNUPS_ALLOWED=true
      - ADMIN_TOKEN=ここに長いランダムな文字列を生成して入力してください
      - DOMAIN=https://vault.yourdomain.com
    volumes:
      - ./vw-data:/data
    ports:
      - 8080:80

これら3つの変数に注意してください:

  • SIGNUPS_ALLOWED: アカウント作成のために最初はtrueにしておき、作成後はすぐにfalseに変更してフロントドアをロックします。
  • ADMIN_TOKEN: /adminパネルへのアクセスを許可します。ここには48文字程度のランダムな文字列を使用してください。
  • DOMAIN: 招待メールやパスワードのヒントが正しいURLを指すようにするために必要です。

ステップ3:起動

デタッチモードでコンテナを起動します:

docker compose up -d

ログを確認して、正常に動作しているかチェックできます:

docker logs -f vaultwarden

ステップ4:接続の保護

リバースプロキシをサーバーのIPのポート8080に向けます。Caddyを使用する場合、設定は非常にシンプルです:

vault.yourdomain.com {
    reverse_proxy localhost:8080
}

CaddyはLet’s EncryptからSSL証明書を自動的に取得します。ドメインにアクセスし、マスターアカウントを作成すれば準備完了です。

保管庫の強化

所有することには責任が伴います。セットアップが完了したら、以下のステップを必ず行ってください:

1. ドアをロックする

家族やチームの登録が終わったら、docker-compose.ymlを編集してSIGNUPS_ALLOWED=falseに設定し、docker compose up -dを実行してください。これにより、第三者がサーバー上でアカウントを作成するのを防ぎます。

2. 二つ目の鍵(2FA)を追加する

設定でTOTPやYubiKeyのようなハードウェアキーを有効にしましょう。たとえ泥棒がマスターパスワードを推測したとしても、2要素認証がなければ門前払いです。

3. 3-2-1バックアップルール

パスワードはvw-data/db.sqlite3に保存されています。もしこのファイルが失われると、デジタルライフは瞬く間に困難なものになります。3-2-1バックアップルールを使用して、暗号化されたS3バケットやローカルNASなどのオフサイトにこのデータベースをバックアップしてください。

# SQLiteのクイックバックアップコマンド
sqlite3 ~/vaultwarden/vw-data/db.sqlite3 ".backup '~/backups/vault-$(date +%F).sqlite3'"

最後に:所有することの安心感

商用のパスワードマネージャーからVaultwardenに乗り換えることは、HomeLabにおける最高のアップグレードの一つです。お金を節約し、リソース使用量を削減し、セキュリティチェーンから中間業者を排除できます。

移行は非常に簡単です。既存のデータを.csvや.jsonとしてエクスポートし、Vaultwardenに直接インポートするだけです。モバイルアプリの使い勝手も有料サービスに劣りませんが、決定的な違いは「あなたが鍵を握っている」ということです。次の大規模な情報漏洩に怯える必要はありません。あなたのデータは、あるべき場所にあるのです。

Share: