DockerでVaultwardenをセルフホスト:軽量でセキュアな「自分専用」パスワード管理

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

午前2時の悪夢:パスワード漏洩

深夜、私の電話が鳴り止みませんでした。同僚が慌てた様子で、プロジェクトの管理者アカウントが不正アクセスされたと報告してきたのです。ログを確認したところ、原因は非常に初歩的なものでした。メンバーの一人が、個人のパスワードを本番環境のシステムでも使い回していたのです。不運なことに、そのパスワードは以前の大規模なデータ漏洩事件で既に流出していました。

その夜、私はトラブル対応に追われながら、なぜもっと早くパスワード管理システムを導入しなかったのかと自分を責めました。テキストファイルにパスワードを散らばらせたり、古いパスワードを使い回したりすることは致命的なミスです。それが、私がVaultwardenを選んだ理由です。サードパーティにデータを預ける代わりに、セルフホストすることで情報の絶対的な制御権を握ることができます。

Vaultwardenとは?なぜITエンジニアに選ばれるのか?

Bitwardenを知っているなら、Vaultwardenはその Rust言語による再実装版だと考えれば分かりやすいでしょう。最大のメリットは、非常に軽量であることです。本家のBitwardenが最低4GBのRAMを必要とするのに対し、Vaultwardenはわずか512MBのRAMしかない安価なVPSでも快適に動作します。

なぜ他のソリューションよりもVaultwardenを優先するのでしょうか?

  • リソースの節約: アイドル時のRAM消費量はわずか50〜100MB程度です。
  • 完璧な互換性: スマートフォン、ブラウザ、デスクトップなど、Bitwardenのエコシステム全体のアプリをそのまま利用できます。
  • データの自律性: すべてのデータベースは自身のサーバー上に存在します。マスターキーがない限り、誰もあなたのパスワードを見ることはできません。
  • プレミアム機能を無料で解放: 組織(Organizations)でのパスワード共有や高度な2FAなどの機能が、追加費用なしで利用可能です。

Docker ComposeによるVaultwardenのデプロイ

Linuxが動作し、DockerがインストールされたVPSが必要です。安全性を確保するためにVaultwardenはHTTPS経由での実行が必須であるため、ドメイン(例:vault.yourdomain.com)をVPSのIPに紐付けておいてください。

1. プロジェクトディレクトリの作成

管理やバックアップを容易にするため、各サービスを個別のフォルダにまとめるのが一般的です。

mkdir -p ~/vaultwarden && cd ~/vaultwarden

2. docker-compose.ymlの設定

以下の最小限の内容でdocker-compose.ymlファイルを作成します:

version: '3'
services:
  vaultwarden:
    image: vaultwarden/server:latest
    container_name: vaultwarden
    restart: always
    environment:
      - SIGNUPS_ALLOWED=true
      - DOMAIN=https://vault.yourdomain.com
    volumes:
      - ./vw-data:/data
    ports:
      - 8080:80

この設定では、ホストマシンのポート8080をコンテナにマップしています。後ほど、Nginxをリバースプロキシとして使用してSSL証明書を処理します。

3. サービスの起動

以下のコマンドを実行してイメージをプルし、コンテナを作成します:

docker-compose up -d

数秒後、docker psを入力してください。ステータスがUpになっていれば、準備は半分完了です。

NginxによるリバースプロキシとSSLの設定

通常のHTTPを使用している場合、Vaultwardenはセキュリティ上の理由でログインをブロックします。最も手っ取り早い方法は、NginxとCertbotを組み合わせてLet’s Encryptから無料のSSL証明書を取得することです。

基本的なNginxの設定ファイル:

server {
    listen 80;
    server_name vault.yourdomain.com;
    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

その後、certbot --nginx -d vault.yourdomain.comを実行します。Nginxが自動的にHTTPSを処理し、すぐにウェブインターフェースにアクセスしてアカウントを作成できるようになります。

高度なセキュリティ:不正な新規登録を防止する

インストール後にこのステップを忘れてしまう人が多いです。自分のアカウントを作成した後は、他人がサーバーを勝手に利用できないように新規登録機能をオフにする必要があります。

docker-compose.ymlファイルを再度開き、SIGNUPS_ALLOWED=falseに変更して、もう一度docker-compose up -dを実行します。また、すぐに2FA(Google Authenticatorなど)を有効にしてください。これは、万が一マスターパスワードが漏洩した際の最後の防衛線となります。

教訓:バックアップを怠らない

セルフホストをするということは、データに対して自分自身で責任を持つということです。バックアップなしでサーバーのハードディスクが故障した場合、数百もの重要なパスワードをすべて失うことになります。信じてください、その絶望感はハッキングされるよりもはるかにひどいものです。

最も重要なデータはvw-dataディレクトリ内、具体的にはdb.sqlite3ファイルにあります。簡単なスクリプトを使用してこのフォルダを圧縮し、Cronjobを使って毎日GoogleドライブやS3にアップロードすることをお勧めします。

# 毎日のクイックバックアップスクリプト
tar -czf vault_backup_$(date +%F).tar.gz ~/vaultwarden/vw-data

まとめ

Vaultwardenをセルフホストすることは、情報のセキュリティを高めるだけでなく、Dockerやシステム管理への理解を深めることにも繋がります。大企業のデータ漏洩を心配する代わりに、自分だけの「パスワードの要塞」を手に入れましょう。私のように午前2時のトラブルに見舞われてから慌てて解決策を探すのではなく、今すぐ始めてください。

Share: