Cài đặt NodeWarden – Bitwarden server self-hosted trên Cloudflare Workers

Các giải pháp tự lưu trữ (self-hosted) Bitwarden server có rất nhiều, nổi tiếng nhất có thể kể tới Vaultwarden nhưng có một rào cản lớn, bạn phải tự quản lý máy chủ. Việc này không chỉ tốn chi phí duy trì hàng tháng mà còn tiềm ẩn rủi ro mất quyền truy cập nếu bạn quên gia hạn máy chủ hoặc hệ thống gặp sự cố kỹ thuật.

Ý tưởng đầu tiên của việc chạy hoàn toàn trên Cloudflare Workers và D1, có lẽ xuất phát từ thành viên deep-gaurav/warden-worker (bạn nào quan tâm có thể đọc bài viết từ reddit), một thời gian sau được phát triển thành nhánh mới là qaz741wsd856/warden-worker

Dù bản qaz741wsd856 hoạt động rất tốt, nhưng nó vẫn dùng phần Web Vault lấy từ Vaultwarden, việc cài đặt cũng hơi phức tạp, cá nhân đề xuất sử dụng NodeWarden, về cơ bản nó rất tương đồng với warden-worker gốc nhưng tác giả viết Web Vault riêng, chăm chút cho dự án hơn

NodeWarden là một máy chủ bên thứ ba chạy trên Cloudflare Workers và tương thích với ứng dụng khách Bitwarden chính thức. Nó không phụ thuộc vào VPS truyền thống, và bạn không cần phải tự duy trì các tiến trình cơ sở dữ liệu, dịch vụ lưu trữ đối tượng hoặc các hệ thống phụ trợ bền vững. Miễn là các tài nguyên ở phía Cloudflare đã sẵn sàng, bạn có thể chạy dịch vụ kho lưu trữ mã hóa của riêng mình.

Cài đặt NodeWarden – Bitwarden server trên Cloudflare Workers

Tại sao nên chọn NodeWarden?

  • Hoàn toàn miễn phí: tận dụng gói miễn phí của Cloudflare (Workers, D1, R2)
  • Không cần quản trị VPS: bạn không cần lo lắng về việc cập nhật hệ điều hành, bảo mật cổng (port) hay cấu hình Docker phức tạp.
  • Triển khai siêu tốc: quá trình cài đặt chỉ mất từ 2 đến 5 phút.
  • Tối ưu tốc độ: với hạ tầng Cloudflare, dữ liệu của bạn được xử lý ngay tại “rìa” mạng (Edge), loại bỏ độ trễ địa lý, giúp việc truy cập luôn đạt tốc độ cao nhất từ bất kỳ đâu trên thế giới.
  • Bảo mật: hệ thống được bảo vệ bởi các lớp tường lửa sẵn có từ Cloudflare, mang lại sự an tâm tuyệt đối (thực tế Bitwarden cũng đang dùng hệ thống firewall từ Cloudflare)
  • Backup thông minh: tích hợp sẵn cơ chế sao lưu (backup) và khôi phục (restore) dữ liệu trực tiếp từ giao diện web thông qua WebDAV và S3-compatible storage.

Định vị của NodeWarden khá rõ ràng: nó không nhằm mục đích sao chép hoàn toàn tất cả các tính năng dành cho doanh nghiệp của máy chủ Bitwarden chính thức, mà tập trung vào các mục tiêu “triển khai cá nhân, khả năng bảo trì lâu dài, chi phí tối thiểu và khả năng tương thích với máy khách chính thức”, hoàn thiện các tính năng được sử dụng phổ biến và thiết thực nhất. Chính vì cách tiếp cận này, nó đặc biệt phù hợp với nhu cầu sau

  • Dành cho những ai muốn tự lưu trữ Bitwarden nhưng không muốn phải duy trì một máy chủ riêng biệt.
  • Những người hiện đang sử dụng Cloudflare và muốn chuyển các thư viện mã hóa của họ sang cùng một cơ sở hạ tầng.
  • Những người cần khả năng sử dụng nhiều người dùng nhưng không cần các tính năng doanh nghiệp nâng cao như quản trị tổ chức, đăng nhập một lần (SSO) hoặc thư mục doanh nghiệp.
  • Những người coi trọng việc sao lưu, nhập/xuất dữ liệu và di chuyển tệp đính kèm, và muốn tự mình kiểm soát dữ liệu của mình.

Một vài lưu ý nhỏ

Hiện tại, NodeWarden vẫn có một hạn chế nhỏ:

  • Chưa hỗ trợ gửi thông báo qua Email (như mã OTP hoặc thông báo đăng nhập mới).
  • Chưa (hoặc không) hỗ trợ 2FA vật lý như YubiKey

Với người dùng cá nhân, các hạn chế này không phải là vấn đề, vì có thể kiểm tra các thiết bị đã kết nối thông qua tùy chọn Device Management, tài khoản để bảo mật có thể dùng thêm TOTP, tổng thể không có gì để phàn nàn

Kiến trúc cốt lõi của NodeWarden rất đơn giản và dễ hiểu:

  • Môi trường thực thi: Cloudflare Workers
  • Cơ sở dữ liệu: Cloudflare D1
  • Lưu trữ tệp đính kèm: Cloudflare R2, hoặc KV.
  • Giao diện người dùng: Preact + Vite
  • Tác vụ theo lịch trình: Cloudflare Cron Trigger
  • Khả năng thông báo theo thời gian thực: Durable Objects

Số lượng request dùng rất ít, trừ lần đầu tiên tạo mới, load password cũ … dùng 2-3k request, còn lại hàng ngày dùng ~ 1-2k request, theo cách tính toán này, có thể đáp ứng 50 user cùng sử dụng, vẫn nằm trong giới hạn miễn phí của Cloudflare (100.000 request miễn phí mỗi ngày)

Cài đặt

  • Cần 1 tài khoản Github, 1 tài khoản Cloudflare đăng kí sẵn R2 Object Storage, nên chạy qua 1 domain riêng, hạn chế dùng các domain dạng *.workers.dev vì thường bị giới hạn

Bước 1:

  • Fork dự án github.com/shuaiplus/nodewarden

Bước 2:

  • Truy cập Cloudflare Workers
  • Chọn Continue with GitHub
  • Chọn kho lưu trữ nodewarden mà bạn vừa fork
  • Tiếp tục triển khai với cấu hình mặc định

Bước 3:

  • Thiết lập JWT_SECRET

  • Từ menu Settings -> Variables and Secrets -> Add 
  • Type: chọn Secret
  • Variable name, điền chính xác: JWT_SECRET
  • Value có thể vào JWT Secret, tạo ngẫu nhiên 1 key kiểu HS512 (512-bit), dài dài 1 chút là được

Lúc này có thể truy cập domain, tạo tài khoản đầu tiên (admin) dùng như Bitwarden thông thường, muốn bảo mật hơn 1 chút, có thể tạo 1 tài khoản user mới (tách riêng tài khoản admin ra)

Tự động cập nhập

  • Vào dự án github, bật Actions, để chạy tự động workflow, mặc định tự động cập nhập mỗi ngày lúc 3h sáng (UTC)

Ở bản mới nhất, bao gồm 2 chế độ, cập nhập tự động quản lý theo release, cập nhập thủ công quản lý theo commit, cho phép dùng commit mới nhất hoặc commit bất kì tùy thích (nếu muốn giữ rollback lâu dài thì cần disabled workflow tạm thời)

Phần commit liên quan tới Sync upstream workflow là phần tôi pull requests tới dự án, ý tưởng trong tình huống tác giả thêm/sửa nhiều tính năng quá, tạo ra lỗi gì đó, người dùng có thể rollback lại bản cũ, commit ổn định ở thời điểm viết bài này là 2230f75d8a389b719933915059b8ff9ba023de90

Tự động backup

  • Có thể vào R2 Object Storage, tạo 1 thêm 1 storage để chứa các bản backup password mỗi ngày (hoặc dùng Backblaze B2 tùy thích)

  • Tạo thêm 1 API key Cloudflare để cấp quyền, rồi điền các thông tin vào như ảnh là được

Nên bật chế độ backup, khi sử dụng hàng ngày nếu xóa/ghi nhầm password, có backup cũ giúp phục hồi lại được dữ liệu cũ

Bonus: bảo mật với Zero Trust

Ở phiên bản hiện tại v1.4.2, tác giả đã tùy chỉnh rate limit tại src/config/limits.ts, các giới hạn đều phù hợp với Cloudflare Workers miễn phí, PBKDF2 phía máy khách được băm lại bằng PBKDF2-SHA256 trước khi gửi tới server … đủ nhanh và an toàn, database lưu ở D1 nên các thao tác đọc/ghi rất nhanh, tác giả cache thêm nữa nên dùng ít request hơn

Phần này không quan trọng, bạn nào rảnh có thể bảo mặt thêm 1 chút, hạn chế các tool boot quét trang quản trị, đỡ tốn request Cloudflare Workers

Path Pattern Purpose Permission Strategy Authentication Required
/* Web User Interface ALLOW Yes (Requires Login)
api/* Client Application APIs BYPASS No (Public/Everyone)
identity/* Auth & Identity Services BYPASS No (Public/Everyone)
notifications/* Push & Notification APIs BYPASS No (Public/Everyone)

1. NodeWarden API Bypass

  • Tạo 1 rule cho phép mọi user (Everyone) truy cập vào 3 điểm cuối api/*, identity/*, notifications/*

  • Policies KHÔNG CHẶN (BYPASS) các điểm cuối api/*, identity/*, notifications/*

2. NodeWarden Login

  • Tạo 1 rule yêu cầu xác thực khi truy cập vào trang chủ

  • Policies dùng email, hoặc tài khoản nào đó để xác thực thì tùy

Làm xong xuôi sẽ có 2 rule như này

Nói thêm về bảo mật

Liên quan tới tự lưu trữ (self-hosted), người dùng quan tâm nhất là vấn đề bảo mật, bản thân Bitwarden thiết kế dữ liệu, khi encrypted, decrypted đều là máy khách sử lý, nên kể cả trong trường hợp tệ nhất, thông tin NodeWarden server của bạn bị lộ ra, có bị lấy database, cũng rất khó để giải mã, người dùng chỉ cần đảm bảo password sử dụng cho tài khoản NodeWarden đủ dài là được

Tuy thế nên chú ý, Vaultwarden dù tác giả rất giỏi, người dùng đông đảo, mà phiên bản mới nhất thời điểm mình viết bài này 1.35.4, cũng phải vá chi chít các lỗi bảo mật thì cũng đừng quá tin tưởng, NodeWarden thường chỉ sử dụng cá nhân, tích hợp hoàn toàn qua hệ thống Cloudflare, rất hiếm ai biết được URL login hay email người dùng để quét hay check, xác xuất lỗi sẽ thấp hơn, nhưng không phải là tuyệt đối, sử dụng nên backup dữ liệu sang vài storage khác nhau, hạn chế tối đa rủi ro có thế xảy ra

Kết luận

Việc triển khai Bitwarden server thông qua NodeWarden trên nền tảng Cloudflare Workers là một giải pháp đột phá cho nhu cầu lưu trữ mật khẩu cá nhân, ngoài ưu điểm quan trọng nhất là miễn phí, công đoạn cài đặt, bảo trì, cập nhập, backup, restore dữ liệu …. hay quản trị đều rất đơn giản

Cá nhân dùng Vaultwarden vài năm nay trên VPS Oracle, siêu ổn định, vì uptime Oracle thường ~ 100%, nhưng khi biết tới NodeWarden cũng đã chuyển sang, mọi thứ hoạt động tốt, thực tế sau khi chuyển dữ liệu sang NodeWarden, cấu hình thêm phần backup như trong bài, còn lại cũng chỉ dùng thông qua client Bitwarden trên trình duyệt, rất hiếm khi nào cần quản trị qua giao diện web


Related Posts

Chính sách bình luận: Chúng tôi rất trân trọng các bình luận của bạn và cảm ơn thời gian bạn dành để chia sẻ ý tưởng và phản hồi.
Ghi chú: Những bình luận được xác định là spam hoặc chỉ mang tính quảng cáo sẽ bị xóa.

• Để cải thiện trải nghiệm bình luận, chúng tôi khuyến khích bạn tạo một tài khoản Gravatar. Thêm avatar vào tài khoản Gravatar sẽ giúp bình luận của bạn dễ nhận diện hơn đối với các thành viên khác.

✂️ Sao chép và 📋 Dán Emoji 💪 giúp bình luận thêm sinh động và thú vị!