Vaultwarden 密碼管理器部署與 Cloudflare Tunnel 安全外網穿透指南 | WaterNAS
Infrastructure / Security / Credential-Manager

# Vaultwarden 密碼管理器部署與 Cloudflare Tunnel 安全外網穿透指南

UPDATED: 2026-07-14
|
AUTHOR: Water
|
STATUS: VERIFIED

在自建私有雲(Self-Hosted)的架構中,Vaultwarden(輕量化 Bitwarden)是管理核心憑證的標準配備。由於密碼管理器強制要求 HTTPS Web Crypto API 安全環境才能進行解密與同步,我們必須為其配置合規的 TLS 憑證。

本篇筆記將記錄如何使用 Cloudflare Tunnel (cloudflared) 進行零埠暴露(Zero exposed ports)的外網穿透,免去傳統路由器 Port Forwarding 的盲掃風險,並由 Cloudflare 邊緣節點自動搞定 HTTPS 憑證與防護。

⚠️ CRITICAL DEPLOYMENT WARNING / 運維防坑提示

1. Vaultwarden 預設**開啟帳號註冊**功能。若直接掛載上公網且未加限制,將面臨被他人當作免費密碼庫甚至爆破的資安漏洞!首次部署務必在建立管理員帳號後,將註冊功能關閉(SIGNUPS_ALLOWED=false)。
2. Cloudflare Tunnel 依賴本地的 cloudflared 容器與 Cloudflare 邊緣節點保持長連線,請確保該容器的重啟策略為 always

01/ 雙容器 Docker Compose 編排架構

我們將 Vaultwarden 與 Cloudflare Tunnel 封裝在同一個 Docker 虛擬網路中。如此一來,Tunnel 容器可以直接利用 Docker 內部 DNS 解析 http://vaultwarden:80,**完全不需要將 Vaultwarden 的 80 埠映射到 TrueNAS 宿主機的實體埠上**,實踐極致的零埠暴露:

docker-compose.yml
version: "3.7"

services:
  vaultwarden:
    image: vaultwarden/server:latest
    container_name: vaultwarden-server
    restart: always
    environment:
      - WEBSOCKET_ENABLED=true  # 開啟 WebSocket 實現即時同步
      - SIGNUPS_ALLOWED=true    # ⚠️ 首次啟動先設為 true,註冊完第一個管理員帳號後務必改為 false
      - WEB_VAULT_ENABLED=true
    volumes:
      - /mnt/WaterPool/apps/vaultwarden:/data

  cloudflared:
    image: cloudflare/cloudflared:latest
    container_name: cloudflare-tunnel
    restart: always
    environment:
      - TUNNEL_TOKEN=你的CLOUDFLARE_TUNNEL_TOKEN_在這裡
    command: tunnel --no-autoupdate run
    depends_on:
      - vaultwarden

02/ Cloudflare 控制台穿透與 HTTPS 配置

部署容器前,我們需要取得上述 Compose 檔案中所需的 TUNNEL_TOKEN。請依序參考以下運維步驟:

  • 登入 Cloudflare Zero Trust 控制台,導航至 Networks ➡️ Tunnels,點擊 Create a tunnel
  • 選擇 Cloudflared,命名你的 Tunnel(例如:WaterNAS-Vault-Tunnel)並儲存。
  • 在環境安裝頁面中,複製環境變數中 --token 後方長串的 **Token 密鑰**,並將其填入上方 Compose 的 TUNNEL_TOKEN 中。
  • Public Hostname 標籤頁配置路由轉發:
    • • Subdomain: vault (或自訂子網域名)
    • • Domain: 你的網域名稱.com
    • • Type: HTTP (Tunnel 與容器內部走明文即可)
    • • URL: vaultwarden:80 (直接調用 Docker 內部網域服務名)

03/ 首次初始化與全面關閉註冊安全鎖

為確保密碼庫最高安全防護級別,請嚴格執行以下三步交握運維指令:

運維標準作業程序 / SOP
# 步驟一:拉起雙容器集群,此時外網 HTTPS 已就緒
docker compose up -d
# 步驟二:立即連上外網網址,註冊你的主要管理員帳號
訪問 https://vault.你的網域.com 並建立 Master 帳戶
# 步驟三:修改環境變數,將 SIGNUPS_ALLOWED 改為 false 並重啟,斬斷外網滲透風險
sed -i 's/SIGNUPS_ALLOWED=true/SIGNUPS_ALLOWED=false/g' docker-compose.yml
docker compose up -d --force-recreate

04/ 進階資安強固:Zero Trust 存取策略 (Access)

雖然我們關閉了註冊,但公開的登入介面仍可能遭遇暴力破解。運維人員應在 Cloudflare Zero Trust 中落實零信任應用防護

// ZERO TRUST ACCESS POLICY / 安全防護加固
  • 🛡️ 啟用 Cloudflare Access 驗證牆: 在 Zero Trust 控制台的 Access ➡️ Applications 中為 Vaultwarden 加設一道防線。限制只有特定 Email(例如你的 Ops 信箱)通過 Pin 碼或 OAuth 驗證後,瀏覽器才能看到密碼管理器的登入畫面。
  • 🎯 WAF 規則地理位置防禦: 在 Cloudflare 安全設定中,建置邊緣防護規則(WAF),直接封鎖來自非常駐國家或高風險 IP 網段的所有請求。
  • 💾 ZFS 資料集本地備份機制: Vaultwarden 的所有密碼皆以 SQLite (或 PostgreSQL) 持久化存於本地 ZFS 掛載點(如:/data)。運維人員應針對該儲存池開啟定期快照(Snapshot),以防資料損毀。
NODE REPOSITORY: WaterNAS-KB-VW
© 2026 WaterNAS. Security Architecture.
// 點擊任意處或按 ESC 鍵關閉檢視