Cài đặt Vaultwarden Password Manager - Bitwarden self-hosted

Vaultwarden là một phần mềm mã nguồn mở, được thiết kế thay thế cho Bitwarden server. Nó cho phép người dùng lưu trữ và quản lý các thông tin đăng nhập, mật khẩu, và dữ liệu nhạy cảm khác một cách an toàn. Vaultwarden sử dụng Rust, một ngôn ngữ lập trình hiệu năng cao và an toàn về bộ nhớ, giúp đảm bảo tính bảo mật và độ tin cậy.

Phần mềm này hỗ trợ tính năng đồng bộ hóa trên nhiều thiết bị, cho phép người dùng truy cập vào kho dữ liệu của mình từ máy tính, điện thoại hoặc tablet. Vaultwarden cũng tương thích với nhiều loại trình duyệt và ứng dụng, làm cho nó trở nên thuận tiện và linh hoạt để sử dụng.

Ngoài ra, Vaultwarden cung cấp các tính năng bảo mật mạnh mẽ như mã hóa đầu cuối, xác thực hai yếu tố, và khả năng tự chủ trong việc lưu trữ dữ liệu, làm cho nó trở thành một giải pháp quản lý mật khẩu tốt cho cả cá nhân và doanh nghiệp muốn quản lý dữ liệu mật khẩu một cách độc lập.

Vaultwarden được đổi tên từ Bitwarden_rs, nhằm tránh nhầm lẫn với phiên bản self-hosted chính thức từ Bitwarden

Vaultwarden ban đầu mình đánh giá không cao, tính viết sơ sài, chủ yếu để tận dụng Oracle miễn phí, sau khi dùng khoảng 2 tuần, thực sự thích, và quyết định sử dụng lâu dài, nên mình tổng hợp lại bài này, lược bỏ các đoạn chém gió râu ria, tập trung vào nội dung của bài là cấu hình, bảo mật cho Vaultwarden, sau này có bạn nào google ra bài này thì làm theo là đủ, đỡ phải đọc nhiều

Cài đặt VPS

Tạo 1 VPS Oracle tại US, gói miễn phí VM.Standard.E2.1.Micro chạy Ubuntu 22.04, 1 GB RAM

Login với quyền root

  • Cập nhập OS
sudo apt update && sudo apt upgrade -y && sudo reboot
  • Bật BBR, tắt firewall, tạo 4G RAM ảo, cài đặt docker, docker-compose, rclone (nếu đã cài docker, docker-compose, có thể bỏ qua phần này)
sudo wget https://go.bibica.net/oracle-docker -O oracle-docker.sh && sudo chmod +x oracle-docker.sh && sudo ./oracle-docker.sh
  • Bypass Oracle
# chỉ dành riêng cho Oracle VPS (không cần cài đặt nếu dùng VPS hãng khác)
sudo wget --no-check-certificate https://raw.githubusercontent.com/bibicadotnet/NeverIdle-Oracle/master/VM.Standard.E2.1.Micro.sh -O /usr/local/bin/bypass_oracle.sh
chmod +x /usr/local/bin/bypass_oracle.sh
nohup /usr/local/bin/bypass_oracle.sh >> ./out 2>&1 <&- &
crontab -l > bypass_oracle
echo "@reboot nohup /usr/local/bin/bypass_oracle.sh >> ./out 2>&1 <&- &" >> bypass_oracle
crontab bypass_oracle

Cài đặt Vaultwarden

Vaultwarden cài đặt rất đơn giản, mình hướng tới việc sử dụng thực tế hàng ngày, nên sẽ bổ xung thêm 1 ít tính năng cần thiết là push và gửi email, kèm theo đó là hướng tới bảo mật nhiều hơn, cụ thể là sẽ dùng thông qua Tunnels và WAF từ Clouflare, hạn chế lộ IP gốc của VPS, chặn nhiều bot, request, kết nối thừa thải

1. Bổ xung push từ Bitwarden

Đây là tính năng giúp các thiết bị di động như điện thoại cập nhập tức thời, tác giả của Vaultwarden không thích dùng, vì sẽ ảnh hưởng tới tài nguyên của Bitwarden, tính năng này được Bitwarden cung cấp mặc định cho tất cả tài khoản (kể cả tài khoản miễn phí)

Để lấy Id và Key, truy cập vào Bitwarden điền 1 email bất kì, data region chọn US, nó sẽ ra 2 giá trị INSTALLATION ID và INSTALLATION KEY, thay thế 2 giá trị này vào PUSH_INSTALLATION_IDPUSH_INSTALLATION_KEY

2. Cập nhập email thông báo

Nên dùng thêm SMTP để gửi email thông báo, giúp kiểm soát, quản lý việc login vào tài khoản tốt hơn

Bạn có thể dùng bất cứ dịch vụ SMTP nào bạn thích, có thể dùng SMTP2Go, miễn phí 1000 email gửi đi mỗi tháng

2 bước này là tùy chọn, không bắt buộc phải thêm vào trên Vaultwarden, có điều dùng rất hiệu quả, khuyến khích mọi người thêm vào

  • Tạo thư mục lưu trữ và tạo file cấu hình
mkdir ./vaultwarden
cd ./vaultwarden
nano docker-compose.yml
  • Nội dung bên trong điền vào
version: '3'
services:
  vaultwarden:
    image: vaultwarden/server:latest
    #image: vaultwarden/server:testing
    container_name: vaultwarden
    restart: always
    environment:
      - DOMAIN=https://pass.bibica.net
      - SIGNUPS_ALLOWED=true
      - WEB_VAULT_ENABLED=true
      - IP_HEADER=X-Forwarded-For
      - PUSH_ENABLED=true
      - PUSH_INSTALLATION_ID=0000000-0000-0000-0000-0000
      - PUSH_INSTALLATION_KEY=xxxxxxxxxxxxxxx
      - TZ=Asia/Ho_Chi_Minh
      - SMTP_HOST=smtp.mailgun.org
      - [email protected]
      - SMTP_FROM_NAME=[BIBICA.NET]
      - SMTP_PORT=587
      - SMTP_SSL=true
      - [email protected]
      - SMTP_PASSWORD=0000000-0000000-0000000
      #- EXPERIMENTAL_CLIENT_FEATURE_FLAGS=autofill-overlay,autofill-v2,browser-fileless-import,fido2-vault-credentials
    ports:
      - '1254:80'
    volumes:
      - ./data:/data

Các dòng highlight sửa lại theo thông số của bạn tạo ra ở bước 1 và 2

Thay thế giá trị DOMAIN bằng domain bạn muốn sử dụng

  • Có thể thêm các environment để cấu hình bật, tắt các tùy chọn khác theo sở thích, trong trường hợp có commits mới bổ xung, sửa lỗi, thêm tính năng, bạn cần mà bản Releases chưa ra mắt, có thể sử dụng image: vaultwarden/server:testing (mặc định image này luôn là commits mới nhất), mình để sẵn vào file cấu hình, bạn chỉ cần bỏ dấu # đằng trước nếu dùng là được

Điều chỉnh xong thì Ctrl+O -> Enter -> Ctrl+X để save và exit.

  • Khởi tạo docker
docker-compose up -d --build --remove-orphans --force-recreate

Cấu Hình Cloudflare Tunnels

Tạo tài khoản Cloudflare Zero Trust -> Access -> Tunnel -> Create a tunnel -> đặt 1 tên cho dễ nhớ (Vaultwarden) -> Install and run a connector

2024 01 05 04 34 34

Sau đó tạo Public hostnames pass.bibica.net tới localhost:1254

Lúc này bạn có thể truy cập vào subdomain pass.bibica.net để tạo tài khoản và login vào sử dụng

  • Để tăng tính bảo mật cho tài khoản Vaultwarden, có thể tham khảo bài viết này
  • Quản lý client trên Windows, iOS, Andoird … thì có thể tham khảo bài viết này

2 bài này mình viết chuyên sâu hơn 1 chút, nếu bạn lười thì đọc thì cứ dùng như mặc định cũng đủ rồi

Bảo mật cấu hình Vaultwarden

Sau khi tạo tài khoản, cấu hình xong xuôi tất cả mọi thứ, có thể làm thêm bước này

  • Tắt đăng kí thành viên mới
nano /root/vaultwarden/docker-compose.yml

Dòng SIGNUPS_ALLOWED, sửa lại true thành false

- SIGNUPS_ALLOWED=false
  • Tắt giao diện web

Dòng WEB_VAULT_ENABLED, sửa lại true thành false

- WEB_VAULT_ENABLED=false
  • Cập nhập lại docker để thay đổi có hiệu lực
cd vaultwarden
docker-compose up -d --build --remove-orphans --force-recreate

Bảo mật cho VPS chạy Vaultwarden

Mặc định sử dụng Cloudflare Tunnels đã tương đương cho việc dùng Tailscale (WireGuard) và Caddy để bảo mật hệ thống và tạo SSL rồi, cũng đã khá an toàn

Nếu lo xa, bạn có thể tăng thêm 1 chút bảo bật cho server này

  • Bật firewall từ Oracle, chặn tất cả mọi thứ, chỉ mở duy nhất port 443 cho kết nối vào (lúc này là VPS sẽ cứng ngắc, tới bạn cũng không vào được VPS qua SSH thông thường luôn nhé)

2024 01 21 04 21 34

  • Bật firewall từ Cloudflare, chặn IP từ tất cả các quốc gia, trừ Việt Nam

2024 01 21 04 23 37

Điền các giá trị như hình, thay pass.bibica.net bằng domain của bạn

  • Bypass IP ORACLE

2024 01 21 04 40 10

Có thể kiểm ra log chặn, nếu thấy nó chặn nhầm IP nào của Oracle hoặc của bạn, thì có thể bypass IP này, cho nó đi qua

Giải pháp tối ưu nhất để bảo mật cho Vaultwarden theo mình là sử dụng mTLS, mỗi thiết bị của bạn sẽ cài thêm chứng chỉ máy khách từ Cloudflare, ai có chứng chí này thì mới truy cập được vào server của Vaultwarden, nó rất gần với chuyện bạn quản lý theo MAC address cho các thiết bị ở mạng LAN

Khá tiếc là khi mình thử, trên Windows chạy tốt, Edge, Chrome, Firefox nhận chứng chỉ bình thường, mà trên iOS cài chứng chỉ vào nó …. không chịu nhận, ngáo ngáo sao đó 😀

Phần về mTLS thì sau này Vaultwarden, Bitwarden có hỗ trợ hoặc mình tìm ra giải pháp khác thì sẽ cập nhập sau, tạm thì bạn cứ dùng theo như cấu hình trên cũng đủ rồi

Backup và restore

Oracle miễn phí có uptime cực tốt, thường ở mức 99.999% cho tới 100%, nên cũng không cần quá lo lắng về vấn đề backup hằng ngày, mình do dùng miễn phí, không chắc lúc nào Oracle thu lại tài nguyên, hoặc tệ hơn là xóa tài khoản, nên mới cấu hình để nó backup liên tục sẵn

Bạn hoàn toàn có thể bỏ qua phần này, không cần làm để đỡ mất thời gian, backup thủ công thì thỉnh thoảng vào VPS download thư mục /root/vaultwarden xuống PC cũng đủ rồi

Ban đầu mình dùng Rclone lưu trữ các backup trên Google Drive, mà sau khi chạy trên đủ các loại VPS, thấy thi thoảng gặp thông báo kiểu Google API hết tài nguyên hay gì đó, không chấp nhận tải lên, vài tiếng sau thì chạy lại bình thường, khá lằng nhằng, nên đổi sang dùng Cloudflare R2 để lưu backup, cấu hình cũng đơn giản hơn, và kể cả bạn có upload cường độ cao nhất, 1 phút upload 1-2 bản backup, vẫn thừa tài nguyên Cloudflare R2 miễn phí

Backup

  • Tạo 1 file bash để backup tương tự như sau
nano /root/vaultwarden/backup.sh
  • Bên trong điền vào
tar -cvf vaultwarden.tar /root/vaultwarden
rclone copy vaultwarden.tar cloudflare-r2:cdn-bibica-net/_vaultwarden_xxx --progress
mv vaultwarden.tar vaultwarden_$(/bin/date +%d.%m.%Y).tar
rclone copy vaultwarden_$(/bin/date +%d.%m.%Y).tar cloudflare-r2:cdn-bibica-net/_vaultwarden_xxx --progress
rclone delete cloudflare-r2:cdn-bibica-net/_vaultwarden_xxx --min-age 31d --progress
rm vaultwarden_$(/bin/date +%d.%m.%Y).tar
  • Thay cdn-bibica-net bằng tên bucket của bạn
  • _vaultwarden_xxx là tên 1 thư mục tùy ý

Để an toàn cho dữ liệu, thì mình sẽ tạo 2 bản

  • vaultwarden.tar bản mới nhất theo theo thời gian thực
  • vaultwarden_$(/bin/date +%d.%m.%Y).tarbản theo ngày (lưu 31 bản cho 31 ngày gần nhất)

Ban đầu mình nghĩ lưu trữ 1 bản mới nhất là đủ, nhưng sau nghĩ lại thấy đôi lúc có thể vì nhiều nguyên nhân khách quan, bạn cần các bản backup cũ, thêm vào cho an tâm

Ctrl+O -> Enter -> Ctrl+X để save và exit

  • Phân quyền
chmod +x /root/vaultwarden/backup.sh
  • Tạo cron để tự chạy 1 phút 1 lần
crontab -l > vaultwarden_cron
echo "* * * * * /root/vaultwarden/backup.sh" >> vaultwarden_cron
crontab vaultwarden_cron

Các bước backup cơ bản là như thế, 1 phút cập nhập 1 lần theo mình cũng đủ tốt, xác xuất bạn vừa sửa lại password, rồi dùng cái VPS lăn quay ra chết hiếm lắm =))

Restore

Muốn restore trên VPS mới, thì các bước như sau

Copy cấu hình cũ Rclone

  • Thường mình hay chép file cấu hình này ở 1 URL nào đó, sau đó wget thẳng vào VPS mới, hoặc cẩn thận hơn, có thể down file cấu hình Rclone về máy, sau đó load trực tiếp lên VPS mới, theo đường dẫn /root/.config/rclone/rclone.conf
sudo wget https://bibica.net/rclone.conf -O /root/.config/rclone/rclone.conf
  • Copy bản backup từ Google Drive xuống
rclone copyto cloudflare-r2:cdn-bibica-net/_vaultwarden_xxx vaultwarden.tar --progress
  • Giải nén file backup
tar -xvf vaultwarden.tar
  • Điều chỉnh lại đường dẫn cho phù hợp
mv /root/root/* /root
rm -r /root/root
  • Cài đặt lại Vaultwarden
cd vaultwarden
docker-compose up -d --build --remove-orphans --force-recreate
  • Cấu hình lại cron
chmod +x /root/vaultwarden/backup.sh
crontab -l > vaultwarden_cron
echo "* * * * * /root/vaultwarden/backup.sh" >> vaultwarden_cron
crontab vaultwarden_cron
  • Cấu hình lại Cloudflare Tunnels
  1. Xóa DNS records cũ pass.bibica.net trên Cloudflare
  2. Xóa Tunnels cũ pass.bibica.net trên Cloudflare
  3. Tạo Tunnels mới trên VPS mới

Trừ bước cuối cùng, phải login vào Cloudflare setup thủ công, các công đoạn còn lại của restore, có thể gom toàn bộ vào 1 file bash, sau này chuyển VPS mới chỉ cần chạy 1 lệnh là xong

Mình có thử restore lại trên VPS mới, tài khoản đã login trên nhiều thiết bị cũ hoạt động bình thường, không cần login lại, đồng bộ bình thường 🤗

Nâng cấp

Để kiểm tra chính xác phiên bản đang sử dụng, có thể chạy lệnh bên dưới

docker exec -it vaultwarden /vaultwarden --version

Kiểm tra các release mới nhất tại đây, nếu đang sử dụng phiên bản hơi cũ, có thể nâng cấp phiên bản mới hơn

cd vaultwarden/
docker compose pull && docker compose up -d

Trong trường hợp bản mới có khi phát sinh lỗi, có thể quay lại bản cũ, bằng cách sửa lại chính xác phiên bản muốn dùng trong file docker-compose.yml

image: vaultwarden/server:latest sửa lại thành image: vaultwarden/server:1.30.1 chẳng hạn

Hoạt động

Vaultwarden thực sự nhẹ, khi hoạt động sử dụng CPU, RAM, HDD rất ít, gần như không đáng quan tâm, mình có thử vài tool self-hosted password khác, khi import password vào thì thấy nó cào CPU khiếp lắm

2024 01 07 03 02 27

Tổng VPS sau khi cài đặt như trong bài, thì nó sẽ na ná như sau

2024 01 07 03 10 08

Bản thân Vaultwarden không làm gì cả, mà tống hết mọi thứ liên quan tới encrypted, decrypted để máy khách xử lý, Vaultwarden chỉ thuần túy trung gian, lưu trữ và chuyển các thông tin đã được mã hóa sang nhiều thiết bị khác nhau

Khi bạn login vào 1 thiết bị mới hoàn toàn, nó sẽ download toàn bộ database xuống, decrypted thông qua Master Password, sau đó đọc trực tiếp từ local, không kết nối tới server nữa, chỉ khi nào bạn tạo mới, cập nhập các tài khoản, thì mới gửi dữ liệu lên server, để tự đồng bộ sang tất cả thiết bị khác

  • Trong trường hợp sử dụng thực tế, vì lý do nào đó, VPS của bạn sập do downtime …. cũng rất ít ảnh hưởng tới Vaultwarden, vì xác xuất bạn đang dùng, cập nhập hay tạo mới tài khoản, mà ngay thời điểm đó VPS gặp lỗi, cũng khá hiếm xảy ra
  • Khi không đồng bộ được thì dữ liệu cũng được lưu lại trên thiết bị, chứ không bị mất đi, khi nào có mạng lại thì nó sẽ tự đồng bộ

Sau 1 thời gian sử dụng Vaultwarden,mình thích hơn so với bản server gốc Bitwarden chính thức, các tùy chỉnh nhỏ rất tuyệt, cụ thể nhất là từ phiên bản 2023.12.1, Bitwarden ra mắt tính năng inline auto-fill menu, dù khi dùng tính năng này, không tự copy được code 2FA nhưng hoạt động cơ bản khá tốt,  mỗi cái trên 1 số trang mình đang dùng, vài form nó gây lỗi, password điền vào cái nó tự bị tắt đi

Trên Vaultwarden, để tránh các lỗi do tính năng quá mới này,mặc định sẽ tắt đi tính năng autofill-v2, nhưng họ làm thêm tùy chọn nhỏ, để nếu thích, bạn có thể chọn bật / tắt các lựa chọn này EXPERIMENTAL_CLIENT_FEATURE_FLAGS=autofill-overlay,autofill-v2,browser-fileless-import,fido2-vault-credentials

Trên Bitwarden chính thức, phiên bản mới nhất v2024.1.2, mình vẫn gặp lỗi liên quan tới inline auto-fill, kể cả bạn có tắt hết các tính năng liên quan tới inline auto-fill bên trong client setting, khi chạy nó vẫn lỗi, trên Vaultwarden do có thể ngắt hoàn toàn option này, khi chạy không bị lỗi

Tất nhiên, lý do chính là Vaultwarden viết trên quan điểm 1 user, gia đình, nhóm nhỏ 5-10 sử dụng, thích làm gì thì tự sửa, Bitwarden viết để phục vụ cho cả trăm ngàn hay cả triệu người cùng dùng, phải tùy chỉnh rất nhiều thứ khác … chọn lựa bản server chính thức từ Bitwarden hay dùng bản server của Vaultwarden thì tùy nhu cầu sử dụng mỗi người

Mình cũng có ý định dùng bản Bitwarden chính thức, để luôn được cập nhập tất cả tính năng mới nhất, mà dùng thử thấy không hiệu quả lắm, ngoài chuyện nó ăn phần cứng khủng bố, các tinh chỉnh cũng rất khó khăn, vì các hướng dẫn chính thức từ hãng khá thiếu, chạy gặp vấn đề không biết sử lý làm sao luôn, theo mình dùng cá nhân thì Vaultwarden tổng thể hiệu quả hơn

Phiên bản release chính thức của Vaultwarden thì đôi khi hơi chậm, nhưng nếu so với Bitwarden self hosted thì nó còn nhiều tính năng hơn, thậm chí phiên bản testing của Vaultwarden, chỉ chậm 1 chút so với bản Bitwarden chính thức, họ cũng đã cập nhập lên v2024.1.2

Tổng kết

Vaultwarden chỉ thay thế server của Bitwarden, nên lý thuyết sử dụng Vaultwarden rất an toàn, thực tế chuyện Vaultwarden có hơn 30.000 sao trên Github cũng đủ nói lên chất lượng tuyệt vời của sản phẩm này

Password của bạn sẽ nằm trong các app, plugin phía client, các bản client này do Bitwarden viết ra, bản thân Bitwarden mã hóa rất mạnh tất cả các thông tin này, mạnh tới mức chính Bitwarden cũng không thể giải mã nổi, về mặt lý thuyết, bạn dùng server từ Vaultwarden, client từ Bitwarden đều rất an toàn

2 sản phẩm này đều công khai code trên github, có thể khẳng định Vaultwarden hay Bitwarden không can thiệp vào dữ liệu của bạn, chưa kể dữ liệu này lại do chính bạn quản lý và lưu trữ, tính riêng tư cũng sẽ tốt hơn

Thực tế có khá nhiều người, dùng miễn phí Vaultwarden và Bitwarden nhưng đăng kí gói premium, hoặc donate thẳng cho tác giả Vaultwarden để ủng hộ 2 dịch vụ này

Trong thời gian sử dụng Bitwarden thì mình có lượn lờ reddit, gặp 1 tình huống khá khó đánh giá là tốt hay xấu, cũng không chắc có thể liệt nó vào dạng lỗi bảo mật hay không? Nó không liên quan tới bản Vaultwarden ở bài này, mà nó lại liên quan tới bản client trên máy khách của Bitwarden

Bài đó mình đọc loáng thoáng, nên không nhớ rõ chi tiết lắm (sau khi lục lại thì chi tiết cụ thể tại đây), đại khái 1 thành viên đổi lại Master Password, vì lý do nào đó, khi họ nhập lại password thì báo sai, mà nếu không có Master Password thì bạn không thể export password ra được

Thế là anh ấy viết 1 script nhỏ, để đục thẳng vào addon trên trình duyệt, tự xuất tất cả password ra thành công luôn

Dễ hình dung thì nếu máy bạn đang cài Bitwarden trên trình duyệt, đang ở chế độ mở khóa (mà mặc định ông nào dùng chẳng để mở khóa) nếu ai có thể ngồi vào thiết bị của bạn (hoặc cài keylogger chẳng hạn), thì chỉ cần 3-5s, họ đã có thể lấy tất cả password hoàn chỉnh được lưu trữ trên client Bitwarden

Mấy thanh niên cứ hay gáy bẩn trình duyệt lưu trữ password không an toàn, mà Bitwarden cũng thế còn gì

Trên VOZ cũng đã có thành viên, sử dụng dịch vụ của Bitwarden tới 5 năm rồi 😻
Trên VOZ cũng đã có thành viên, sử dụng dịch vụ của Bitwarden tới 5 năm rồi 😻

Ban đầu mình tính dùng Bitwarden self hosted chính thức từ hãng, để luôn được cập nhập mới nhất, không phải lệ thuộc vào bên thứ 3 như Vaultwarden, mà sau khi dùng, cảm giác đúng là không hiệu quả, Bitwarden self hosted ngoài chuyện rất nặng, các tùy biến tinh chỉnh gần như không có, nhiều lỗi vặt vặt chẳng hiểu từ đâu ra …. rất không đáng dùng

Vaultwarden vẫn là chân ái nếu bạn muốn tự chạy Bitwarden self hosted 🍺

Comment policy: We love comments and appreciate the time that readers spend to share ideas and give feedback.
Notes: However, those deemed to be spam or solely promotional will be deleted.

You can create a Gravatar account, add avatar, then use that email to comment here, your account will have a more beautiful Avatar, easier to recognize with other members.

Please use real emails, you can receive notifications when comments are replied