Tự host Vaultwarden với Docker: Quản lý mật khẩu ‘chính chủ’ cực nhẹ và bảo mật

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

Cơn ác mộng 2 giờ sáng mang tên: Lộ mật khẩu

Điện thoại mình rung liên hồi lúc nửa đêm. Một đồng nghiệp hốt hoảng báo tin tài khoản quản trị dự án bị xâm nhập. Sau khi rà soát log, mình phát hiện nguyên nhân cực kỳ sơ đẳng: một thành viên đã dùng chung mật khẩu cá nhân cho hệ thống production. Đen đủi là mật khẩu đó vừa bị lộ trong một vụ leak dữ liệu lớn trước đó.

Đêm đó, mình vừa gồng mình xử lý sự cố, vừa tự trách sao không triển khai hệ thống quản lý mật khẩu tập trung sớm hơn. Việc để mật khẩu rải rác trong file text hay dùng lại pass cũ là sai lầm chết người. Đó là lý do mình chọn Vaultwarden. Thay vì gửi gắm dữ liệu cho bên thứ ba, tự host giúp mình nắm quyền kiểm soát tuyệt đối thông tin.

Vaultwarden là gì và tại sao dân IT lại chuộng nó?

Nếu bạn đã biết đến Bitwarden, thì Vaultwarden chính là bản triển khai lại bằng ngôn ngữ Rust. Điểm cộng lớn nhất của nó là cực kỳ nhẹ. Trong khi bản Bitwarden chính chủ yêu cầu server tối thiểu 4GB RAM, Vaultwarden chạy mượt mà trên VPS “cỏ” chỉ với 512MB RAM.

Tại sao mình ưu tiên Vaultwarden thay vì các giải pháp khác?

  • Tiết kiệm tài nguyên: Chỉ tốn khoảng 50-100MB RAM khi chạy ở chế độ idle.
  • Tương thích hoàn hảo: Hỗ trợ full hệ sinh thái app Bitwarden trên điện thoại, trình duyệt và desktop.
  • Tự chủ dữ liệu: Toàn bộ database nằm trên server riêng. Không ai có thể xem mật khẩu nếu không có Master Key của bạn.
  • Mở khóa Premium miễn phí: Các tính năng như chia sẻ mật khẩu nhóm (Organizations) hay 2FA nâng cao đều có sẵn mà không tốn phí bản quyền.

Triển khai Vaultwarden với Docker Compose

Bạn cần một VPS chạy Linux và đã cài sẵn Docker. Hãy trỏ một domain (ví dụ: vault.yourdomain.com) về IP của VPS vì Vaultwarden bắt buộc chạy qua HTTPS để đảm bảo an toàn.

1. Khởi tạo thư mục dự án

Mình thường gom mỗi dịch vụ vào một folder riêng để dễ quản lý và backup.

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

2. Cấu hình file docker-compose.yml

Bạn tạo file docker-compose.yml với nội dung tối giản sau:

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

Trong cấu hình này, mình map port 8080 của máy host vào container. Chúng ta sẽ dùng Nginx làm Reverse Proxy để xử lý chứng chỉ SSL ở bước sau.

3. Khởi động dịch vụ

Chạy lệnh sau để kéo image và tạo container:

docker-compose up -d

Sau vài giây, hãy gõ docker ps. Nếu thấy trạng thái Up, chúc mừng bạn đã đi được nửa chặng đường.

Cấu hình Reverse Proxy và SSL với Nginx

Vaultwarden sẽ chặn đăng nhập nếu bạn dùng HTTP thường. Cách nhanh nhất là cài Nginx kết hợp với Certbot để lấy SSL miễn phí từ Let’s Encrypt.

File cấu hình Nginx cơ bản:

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;
    }
}

Sau đó, chạy certbot --nginx -d vault.yourdomain.com. Nginx sẽ tự động xử lý HTTPS và bạn có thể truy cập giao diện web để tạo tài khoản ngay.

Bảo mật nâng cao: Chống “đăng ký dạo”

Nhiều người cài xong thường quên bước này. Sau khi tạo xong tài khoản cho mình, bạn nên tắt tính năng đăng ký để tránh người lạ dùng ké server.

Hãy mở lại file docker-compose.yml, sửa thành SIGNUPS_ALLOWED=false và chạy lại docker-compose up -d. Ngoài ra, hãy bật 2FA (Google Authenticator) ngay lập tức. Đây là lớp bảo vệ cuối cùng nếu chẳng may bạn bị lộ Master Password.

Kinh nghiệm xương máu: Đừng bỏ qua Backup

Tự host đồng nghĩa với việc bạn tự chịu trách nhiệm về dữ liệu. Nếu server hỏng ổ cứng mà không có backup, bạn sẽ mất trắng hàng trăm mật khẩu quan trọng. Tin mình đi, cảm giác đó kinh khủng hơn nhiều so với việc bị hack.

Dữ liệu quan trọng nhất nằm trong thư mục vw-data, cụ thể là file db.sqlite3. Bạn nên dùng một script nhỏ để nén folder này và đẩy lên Google Drive hoặc S3 mỗi ngày bằng Cronjob.

# Script backup nhanh mỗi ngày
tar -czf vault_backup_$(date +%F).tar.gz ~/vaultwarden/vw-data

Kết luận

Tự host Vaultwarden không chỉ giúp bảo mật thông tin mà còn là cách để bạn hiểu sâu hơn về Docker và quản trị hệ thống. Thay vì lo lắng về các vụ leak dữ liệu từ tập đoàn lớn, giờ đây bạn đã có một “pháo đài” mật khẩu riêng. Hãy bắt đầu ngay hôm nay, đừng đợi đến khi gặp sự cố lúc 2 giờ sáng như mình mới cuống cuồng đi tìm giải pháp.

Share: