セルフホスト型パスワード管理:Vaultwardenガイド

Security tutorial - IT technology blog
Security tutorial - IT technology blog

なぜわざわざパスワードを自己ホスティングするのか?

スプレッドシートやテキストファイルに保存されたパスワード、さらに悪いことには何十ものサイトで使い回されているパスワードなど、誰もが一度は経験したことがあるでしょう。これはいつ起きてもおかしくないセキュリティの悪夢です。パスワードマネージャーが明白な解決策ですが、それを利用するということは、多くの場合、自分のデジタルライフ全体の鍵をサードパーティ企業に預けることを意味します。2022年にLastPassが経験したような大規模な情報漏洩事件の後では、それが受け入れられるリスクなのか自問自答する必要があります。

その代替案が、パスワードマネージャーを自分でホスティングすることです。自分で運用することで、管理性を損なうことなく、同じ利便性を得られます。自分のデータがどこにあり、誰がアクセスでき、どのように保護されているかを正確に把握できます。デジタル認証情報を完全に自分でコントロールできるのです。

クラウド vs 自己ホスティング:核心的なトレードオフ

パスワードマネージャーには通常2つのタイプがあります。1Password、Dashlane、あるいはBitwarden自身のクラウドサービスなどは非常に便利です。サインアップして料金(月額3〜5ドル程度)を支払えば、すべてが機能します。欠点は、彼らを信頼しなければならないことです。彼らのインフラ、従業員、そしてセキュリティ対策が24時間365日完璧であることを信じるしかないのです。

セルフホスティングは逆のアプローチを取ります。月額5ドル程度の安価なVPS、クローゼットの中のRaspberry Pi、あるいは専用のホームサーバーなど、自分のサーバーでソフトウェアを実行します。これにより、完全なデータ主権が得られます。セットアップ、セキュリティ、バックアップの責任は自分に移りますが、Dockerのような現代的なツールのおかげで、このプロセスは驚くほど簡単になりました。

Bitwarden vs Vaultwarden:あなたに適しているのはどちら?

セルフホストを決めたなら、公式のBitwardenサーバーは堅実な選択肢です。堅牢で公式にサポートされています。しかし、これはエンタープライズのニーズを念頭に置いて構築されており、Microsoft SQL Serverを使用し、かなりのシステムリソース(最低2GBのRAM)を必要とします。決定的なのは、二要素認証用のTOTPシードを保存するような一部のプレミアム機能が、自分でホストしても有料のままであることです。

このため、コミュニティでは圧倒的にVaultwardenが好まれています。これはBitwardenサーバーAPIを、効率的なRustプログラミング言語で書き直した、軽量なオープンソース実装です。信じられないほどリソースに優しく、100MB未満のRAMで快適に動作し、ほぼすべてのBitwardenプレミアム機能を無料で解放します。個人利用、小規模チーム、または家族での利用には、Vaultwardenがほとんどの場合、より賢い選択です。

私のおすすめ構成:Vaultwarden with Docker & Caddy

私の定番戦略は、Docker ComposeとCaddyウェブサーバーを併用してVaultwardenをデプロイすることです。Dockerはセットアップ全体をポータブルで管理しやすくします。Caddyは、リバースプロキシとLet’s Encryptによる自動HTTPS暗号化を、ほぼゼロ設定で処理する方法を提供します。

私は、セキュリティを後回しにできないことを苦い経験から学びました。深夜に私のサーバーの一つがSSHブルートフォース攻撃の波に襲われた後、今では初日からセキュリティを最優先しています。単にVaultwardenをインターネットに公開するだけではありません。すべてのトラフィックを暗号化する、信頼できるリバースプロキシの背後に置くのです。これがプロフェッショナルなやり方です。

前提条件

  • パブリックIPアドレスを持つサーバー(どのクラウドVPSやホームサーバーでも可)。
  • サーバーにDockerとDocker Composeがインストールされていること。
  • サーバーのIPアドレスに向けられたドメイン名(またはサブドメイン)(例:vault.yourdomain.com)。
  • ウェブトラフィックを許可するために、ファイアウォールのポート80と443が開いていること。

実装ガイド:Vaultwardenをステップバイステップでセットアップ

ステップ1:ディレクトリの準備

まず、サーバーにSSHで接続します。すべての設定ファイルとデータを整理しておくために、専用のフォルダを作成します。

mkdir -p /opt/vaultwarden
cd /opt/vaultwarden

ステップ2:`docker-compose.yml`ファイルの作成

このファイルは、VaultwardenアプリケーションとCaddyリバースプロキシという2つのサービスを定義します。nanovimのようなテキストエディタを使ってファイルを作成します。

nano docker-compose.yml

以下の設定をファイルに貼り付けます。ドメイン名を変更し、強力でランダムな`ADMIN_TOKEN`を設定してください。openssl rand -base64 48コマンドで生成できます。

version: '3'

services:
  vaultwarden:
    image: vaultwarden/server:latest
    container_name: vaultwarden
    restart: unless-stopped
    volumes:
      - ./vw-data:/data
    environment:
      - WEBSOCKET_ENABLED=true
      - SIGNUPS_ALLOWED=true # アカウント作成後にfalseに設定してください!
      - ADMIN_TOKEN=YOUR_VERY_SECRET_ADMIN_TOKEN

  caddy:
    image: caddy:latest # Caddyの'latest'イメージを使用するのが一般的です
    container_name: caddy
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
      - "443:443/udp" # HTTP/3用
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile:ro
      - ./caddy-data:/data
      - ./caddy-config:/config
    depends_on:
      - vaultwarden

ステップ3:`Caddyfile`の作成

次に、Caddyウェブサーバーの設定を作成します。このファイルは美しくシンプルです。Caddyに、あなたのドメインをHTTPSで保護し、すべてのトラフィックをVaultwardenコンテナに転送するように指示します。

nano Caddyfile

以下を追加し、`vault.yourdomain.com`を自分のドメインに置き換えます。

vault.yourdomain.com {
    # 圧縮を有効にする
    encode gzip

    # Vaultwardenコンテナにリクエストを転送
    reverse_proxy vaultwarden:80 {
        # WebSocketサポートに必要なヘッダーを追加
        header_up Host {host}
        header_up X-Real-IP {remote_ip}
        header_up X-Forwarded-For {remote_ip}
        header_up X-Forwarded-Proto {scheme}
    }
}

ステップ4:スタックの起動

設定が完了したら、サービスの起動はコマンド一つです。`/opt/vaultwarden`ディレクトリから、以下を実行します:

docker-compose up -d

Dockerは最新のイメージをプルし、バックグラウンドでコンテナを起動します。Caddyは自動的にあなたのドメインのSSL証明書を取得します。docker-compose logs -f caddy vaultwardenでログを確認し、すべてが正しく起動したことを確認できます。

ステップ5:インスタンスのセキュリティを確保する

ウェブブラウザであなたのドメイン(例:https://vault.yourdomain.com)にアクセスします。プライマリアカウントを作成します。これがあなたの保管庫のマスターアカウントになります。

次のステップはセキュリティ上、非常に重要です。他の誰もがあなたのインスタンスにアカウントを作成できないように、公開サインアップを無効にする必要があります。

  1. 再びdocker-compose.ymlファイルを編集します。
  2. SIGNUPS_ALLOWED=trueSIGNUPS_ALLOWED=falseに変更します。
  3. コンテナを再起動して変更を適用します:docker-compose up -d

これであなたの保管庫はプライベートになりました。管理者パネル(https://vault.yourdomain.com/adminでアクセス可能)から他の人(家族など)を招待することは引き続き可能です。先ほど設定した安全なADMIN_TOKENを使ってログインしてください。

ステップ6:Bitwardenクライアントの接続

最後のピースは、あなたのデバイスを接続することです。公式のBitwardenブラウザ拡張機能、デスクトップアプリ、またはモバイルアプリをダウンロードします。ログインする前に、設定アイコン(歯車⚙️)を見つけてクリックし、セルフホストサーバーのURL(例:`https://vault.yourdomain.com`)を入力します。設定を保存してから、作成したマスターパスワードでログインします。これで完了です!

重要なメンテナンス:バックアップとアップデート

自分のサービスを運用するということは、それを安全に保つ責任も負うということです。これら最後の2つの習慣、定期的なバックアップとタイムリーなアップデートを怠らないでください。

バックアップ: すべての重要なデータ(暗号化された認証情報、設定など)は/opt/vaultwarden/vw-dataディレクトリに保存されています。このフォルダを定期的にバックアップする必要があります。圧縮アーカイブを作成し、安全なオフサイトの場所(Backblaze B2や別のサーバーなど)に送信する簡単なcronジョブが完璧な解決策です。

# バックアップコマンドの一例
_now=$(date +"%Y-%m-%d-%H%M")
_backup_file="/root/backups/vaultwarden-$_now.tar.gz"
mkdir -p /root/backups
tar -czvf "$_backup_file" /opt/vaultwarden/vw-data

アップデート: Dockerのおかげで、アップデートは初期設定と同じくらい簡単です。

# Vaultwardenのディレクトリに移動
cd /opt/vaultwarden

# 最新バージョンのイメージをプル
docker-compose pull

# 新しいイメージを使用してコンテナを再作成
docker-compose up -d

# (オプション) 古く未使用のイメージをクリーンアップしてディスクスペースを節約
docker image prune -a -f

自分のパスワードマネージャーをセットアップするために少しの時間を投資することは、デジタルセキュリティのために取ることができる最も影響力のあるステップの一つです。自分のデータが本当に自分のものであるという絶対的な安心感と共に、ワールドクラスのパスワードマネージャーの機能を手に入れることができます。

Share: