Ngừng thuê dịch vụ bảo mật: Tự host Vaultwarden với Docker

HomeLab tutorial - IT technology blog
HomeLab tutorial - IT technology blog

Vấn đề mệt mỏi vì mật khẩu

Hầu hết chúng ta đang phải quản lý ít nhất 150 đến 200 danh tính số. Từ ứng dụng ngân hàng, email công việc đến những trang thương mại điện tử ngẫu nhiên mà bạn chỉ dùng một lần để nhận mã giảm giá 10%, số lượng thông tin đăng nhập thực sự rất khổng lồ. Trong nhiều năm, lời khuyên tiêu chuẩn là sử dụng trình quản lý dựa trên đám mây như LastPass hoặc 1Password. Chúng tiện lợi và hoạt động tốt—cho đến khi chúng trở thành mục tiêu tấn công.

Bảo mật giờ đây không chỉ là mã hóa; đó còn là sự tin tưởng. Khi LastPass gặp sự cố rò rỉ nghiêm trọng vào năm 2022, đó là hồi chuông cảnh tỉnh cho cộng đồng công nghệ. Về cơ bản, bạn đang giao chìa khóa của toàn bộ đời sống số của mình cho một tập đoàn. Nếu máy chủ của họ ngừng hoạt động, bạn bị khóa bên ngoài. Nếu giá của họ tăng gấp đôi, bạn buộc phải trả ‘thuế tiện lợi’. Tệ nhất là nếu họ bị hack, kho lưu trữ đã mã hóa của bạn sẽ nằm trên ổ cứng của kẻ tấn công và bị bẻ khóa bằng brute-force.

Tại sao tập trung hóa lại là cơn ác mộng bảo mật

Các nhà cung cấp SaaS lớn là những ‘hũ mật’ (honeypots). Họ thu hút những kẻ tấn công tinh vi nhất thế giới vì một lần xâm nhập thành công có thể mang lại hàng triệu kho dữ liệu mã hóa. Mặc dù các công ty này sử dụng mã hóa AES-256 tiêu chuẩn công nghiệp, bạn hoàn toàn không có quyền kiểm soát logic backend hoặc cách họ xử lý siêu dữ liệu (metadata) của mình. Bạn đang hoạt động trong một chiếc hộp đen.

Những người đam mê HomeLab và người dùng quan tâm đến quyền riêng tư đang chuyển sang một mô hình khác: Dữ liệu tự chủ. Chúng ta muốn sự đồng bộ ‘thiết lập một lần rồi quên’ của dịch vụ đám mây nhưng với tính bảo mật sắt đá từ phần cứng của chính mình. Chúng ta muốn sở hữu cơ sở dữ liệu, quản lý sao lưu và đảm bảo kho lưu trữ không bao giờ rời khỏi mạng nội bộ mà không có sự cho phép.

Đối thủ: Bitwarden vs. Vaultwarden

Bitwarden là tiêu chuẩn vàng của quản lý mật khẩu mã nguồn mở. Nó được kiểm định, minh bạch và hoạt động trên mọi thiết bị. Tuy nhiên, bộ cài đặt (stack) chính thức của Bitwarden lại cực kỳ tốn tài nguyên. Nó dựa trên .NET core và Microsoft SQL Server nặng nề, thường chiếm từ 2GB đến 3GB RAM ngay cả khi không hoạt động. Đó là một mức tiêu tốn quá lớn cho một trình quản lý mật khẩu cá nhân.

Vaultwarden giải quyết vấn đề này. Được viết bằng Rust, đây là bản triển khai gọn nhẹ của API Bitwarden. Nó hoàn toàn tương thích với tất cả các ứng dụng và tiện ích mở rộng trình duyệt chính thức của Bitwarden nhưng đã loại bỏ những phần rườm rà. Trong khi stack chính thức cần hàng gigabyte bộ nhớ, Vaultwarden thường chỉ tiêu tốn từ 10MB đến 50MB RAM. Nó là sự lựa chọn hoàn hảo cho Raspberry Pi hoặc một VPS cấu hình thấp.

Cài đặt: Triển khai Vaultwarden với Docker

Docker là cách sạch sẽ nhất để vận hành Vaultwarden. Nó giữ cho môi trường của bạn được cô lập và việc cập nhật đơn giản như việc tải xuống một image mới. Tôi đã chạy thiết lập này trong hơn hai năm trên nhiều thiết bị mà không gặp bất kỳ lỗi đồng bộ nào.

Bước 1: Những thứ cần chuẩn bị

Bạn sẽ cần một vài thứ trước khi bắt tay vào dòng lệnh:

  • Một máy chủ chạy Docker và Docker Compose (ngay cả một VPS 5$/tháng hoặc một chiếc laptop cũ cũng hoạt động tốt).
  • Một tên miền hoặc tên miền phụ (ví dụ: vault.yourdomain.com).
  • Một Reverse Proxy (như Nginx Proxy Manager, Caddy, hoặc Traefik). Vaultwarden yêu cầu HTTPS. Các trình duyệt hiện đại sẽ chặn các Web Crypto API cần thiết cho việc mã hóa qua các kết nối không được bảo mật.

Bước 2: Bản thiết kế

Tạo thư mục cho kho mật khẩu và mở tệp cấu hình của bạn:

mkdir ~/vaultwarden && cd ~/vaultwarden
nano docker-compose.yml

Dán cấu hình này vào tệp:

services:
  vaultwarden:
    image: vaultwarden/server:latest
    container_name: vaultwarden
    restart: always
    environment:
      - SIGNUPS_ALLOWED=true
      - ADMIN_TOKEN=hay_tao_mot_chuoi_ngau_nhien_dai_tai_day
      - DOMAIN=https://vault.yourdomain.com
    volumes:
      - ./vw-data:/data
    ports:
      - 8080:80

Hãy chú ý đến ba biến sau:

  • SIGNUPS_ALLOWED: Giữ giá trị này là true để tạo tài khoản, sau đó chuyển ngay sang false để khóa cửa chính.
  • ADMIN_TOKEN: Cấp quyền truy cập vào giao diện /admin. Hãy sử dụng một chuỗi ngẫu nhiên 48 ký tự tại đây.
  • DOMAIN: Đảm bảo các email mời và gợi ý mật khẩu trỏ đến đúng URL.

Bước 3: Khởi động

Chạy container ở chế độ nền (detached mode):

docker compose up -d

Bạn có thể kiểm tra xem nó có đang hoạt động hay không bằng cách xem log:

docker logs -f vaultwarden

Bước 4: Bảo mật kết nối

Trỏ Reverse Proxy của bạn tới IP của máy chủ tại cổng 8080. Nếu bạn sử dụng Caddy, cấu hình sẽ cực kỳ ngắn gọn:

vault.yourdomain.com {
    reverse_proxy localhost:8080
}

Caddy sẽ tự động lấy chứng chỉ SSL từ Let’s Encrypt. Truy cập vào tên miền của bạn, tạo tài khoản chính (master account), và bạn đã hoàn tất.

Tăng cường bảo mật cho kho lưu trữ

Sở hữu đi kèm với trách nhiệm. Sau khi thiết lập xong, đừng bỏ qua các bước sau:

1. Khóa cửa

Sau khi gia đình hoặc nhóm của bạn đã đăng ký xong, hãy chỉnh sửa tệp docker-compose.yml, đặt SIGNUPS_ALLOWED=false và chạy lại docker compose up -d. Điều này sẽ ngăn người lạ tạo tài khoản trên máy chủ của bạn.

2. Thêm lớp khóa thứ hai (2FA)

Kích hoạt TOTP hoặc khóa phần cứng như YubiKey trong phần cài đặt. Ngay cả khi kẻ trộm đoán được mật khẩu chính của bạn, chúng vẫn bị chặn lại vì thiếu yếu tố xác thực thứ hai.

3. Quy tắc sao lưu 3-2-1

Mật khẩu của bạn nằm trong vw-data/db.sqlite3. Nếu tệp đó bị mất, đời sống số của bạn sẽ trở nên rắc rối rất nhanh. Hãy sử dụng một cron job để sao lưu cơ sở dữ liệu này sang một vị trí bên ngoài (off-site) như một S3 bucket đã mã hóa hoặc một ổ NAS cục bộ.

# Lệnh sao lưu nhanh SQLite
sqlite3 ~/vaultwarden/vw-data/db.sqlite3 ".backup '~/backups/vault-$(date +%F).sqlite3'"

Lời kết: Sự an tâm khi được làm chủ

Chuyển từ các trình quản lý mật khẩu thương mại sang Vaultwarden là một trong những nâng cấp đáng giá nhất cho HomeLab của bạn. Bạn tiết kiệm được tiền bạc, cắt giảm việc tiêu tốn tài nguyên và loại bỏ bên thứ ba trung gian khỏi chuỗi bảo mật của mình.

Việc di chuyển dữ liệu rất đơn giản. Hãy xuất dữ liệu hiện có của bạn dưới dạng .csv hoặc .json và nhập trực tiếp vào Vaultwarden. Các ứng dụng di động mang lại cảm giác cao cấp không kém gì các lựa chọn trả phí, nhưng sự khác biệt là chính bạn mới là người nắm giữ chìa khóa. Không còn nỗi lo về vụ rò rỉ lớn tiếp theo—dữ liệu của bạn đang nằm đúng nơi nó thuộc về.

Share: