はじめに
パスワード管理をクラウドサービスから自前サーバー(NAS)へ移行したい方向けのガイドです。今回はUGREEN NASのDocker環境を使用し、Cloudflare Tunnelを利用することで、「ポート開放」や「リバースプロキシ設定」を一切行わずに安全な公開環境を構築します。
※インターネット上に公開となるので、アドレスを知っていれば誰でもアクセスできてしまうリスクがあり、cloudflareの設定でアクセス制限かけるべきです。私は最終的にはvaultwardenの使用を断念して、keepassに移行しました。
必須条件:Cloudflareでのドメイン取得
本手順を進めるにあたって、以下の準備が必須となります。
- Cloudflareでドメインを取得、または管理(DNS登録)していること
- Cloudflare Tunnelを利用するため、使用するドメインのネームサーバーがCloudflareを指している必要があります。未取得の方は、Cloudflare Registrarなどでドメインを取得しておきましょう。
事前準備:Admin用パスワードハッシュの生成
Vaultwardenの管理画面(/admin)にアクセスするための ADMIN_TOKEN をハッシュ化して作成します。
イメージの準備
Dockerアプリの イメージリポジトリ で vaultwarden/server を検索し、ダウンロードします。
一時コンテナの作成
コンテナ -> 作成 でイメージを選択し、コンテナ名を temp-hash-gen として実行します。
ターミナルでの操作
実行されたコンテナをクリックし、ターミナル タブから 追加 -> そのままOK を選択します。
コマンド実行
以下のコマンドを入力し、ハッシュ値を生成します。
/vaultwarden hash --password "あなたの任意のパスワード"
ハッシュ値の保存
出力された ADMIN_TOKEN= 以降の文字列(argon2id…)をコピーしてメモします。確認後、このコンテナは削除して構いません。
データ保存先のディレクトリ作成
コンテナ起動時のエラーを防ぐため、あらかじめNAS側にデータを保存するフォルダを作成しておきます。
- 作成パス例: /volume1/docker/vaultwarden/data
- 注意: UGREENのファイルマネージャー等で、事前に「data」フォルダまで作成を完了させておいてください。
Dockerプロジェクト(Compose)の作成
UGREENのDockerアプリの「プロジェクト」機能を利用して、本体とCloudflareエージェントを一括起動します。
プロジェクト作成
プロジェクト -> 作成 をクリック。プロジェクト名を vaultwarden とします。
YAMLの入力
以下の docker-compose.yaml を貼り付けます(ハッシュ値とCloudflareトークンを自身のものに書き換えてください)。
version: '3'
services:
# パスワードマネージャー本体
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
restart: always
environment:
- WEBSOCKET_ENABLED=true
- ADMIN_TOKEN='ここにコピーしたハッシュ値を貼り付け'
- SIGNUPS_ALLOWED=true # 最初のアカウント作成が終わったらfalseに変更
volumes:
# UGREENのファイルマネージャーで作成したフォルダの絶対パスを指定
- /volume1/docker/vaultwarden/data:/data
ports:
- "8280:80"
# Cloudflareへの専用トンネル(エージェント)
cloudflared:
image: cloudflare/cloudflared:latest
container_name: cloudflared
restart: always
network_mode: host # NAS内のサービスにlocalhostでアクセスするため
command: tunnel --no-autoupdate run --token <Cloudflareで発行したトークン>
Cloudflare側でのトンネル作成
Cloudflareのダッシュボード(Zero Trust)から設定を行います。
Tunnelの作成
Networks -> Tunnels より新規作成し、上記YAMLで使用するトークンを発行します。
Public Hostnameの設定
- Subdomain: 任意(例: vault)
- Domain: Cloudflareで管理しているドメインを選択
- Service: HTTP / localhost:8280
ステータス確認
Statusが Healthy になればNASとCloudflareが直結されます。
初回ログインとセキュリティ仕上げ
初期アクセス
設定したURLにアクセスします。 ※新規ドメインの場合、Chromeで警告(赤画面)が出ることがありますが、ドメインの実績不足による誤検知です。Firefoxで検証するか、「詳細」から続行してください。
アカウント作成(Sign Up)
ログイン画面下の 「Create account」 ボタンから、自分用のマスターアカウントを作成します。
セキュリティの封鎖
自分以外が登録できないよう、Dockerプロジェクトの環境変数を SIGNUPS_ALLOWED=false に書き換えてプロジェクトを更新(再起動)します。
まとめ
Cloudflare Tunnelのおかげで、SSL証明書の管理も不要になり、ポート開放なしでセキュアな環境が作れました。UGREEN NASを所有しているエンジニアの方には、ぜひおすすめしたい構成です。
