Tự Host Trình Quản Lý Mật Khẩu: Hướng Dẫn Về Vaultwarden

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

Tại Sao Phải Bận Tâm Tự Host Mật Khẩu Của Bạn?

Tất cả chúng ta đều đã từng trải qua: một mớ mật khẩu hỗn độn được lưu trong bảng tính, tệp văn bản, hoặc tệ hơn là được tái sử dụng trên hàng tá trang web. Đó là một cơn ác mộng bảo mật chực chờ xảy ra. Mặc dù các trình quản lý mật khẩu là giải pháp hiển nhiên, việc sử dụng chúng thường có nghĩa là tin tưởng một công ty bên thứ ba giữ chìa khóa cho toàn bộ cuộc sống số của bạn. Sau những vụ xâm nhập đình đám, như vụ mà LastPass phải gánh chịu vào năm 2022, bạn phải tự hỏi liệu đó có phải là rủi ro bạn sẵn sàng chấp nhận.

Giải pháp thay thế là tự host trình quản lý mật khẩu. Bằng cách chạy trình quản lý của riêng mình, bạn có được sự tiện lợi tương tự mà không phải hy sinh quyền kiểm soát. Bạn biết chính xác dữ liệu của mình ở đâu, ai có quyền truy cập và nó được bảo mật như thế nào. Bạn có toàn quyền kiểm soát thông tin xác thực kỹ thuật số của mình.

Cloud vs. Tự Host: Sự Đánh Đổi Cốt Lõi

Các trình quản lý mật khẩu thường có hai loại. Dịch vụ đám mây như 1Password, Dashlane, hoặc dịch vụ đám mây của chính Bitwarden vô cùng tiện lợi. Bạn đăng ký, trả một khoản phí (thường từ 3-5 đô la mỗi tháng), và mọi thứ cứ thế hoạt động. Nhược điểm là sự tin tưởng bạn phải đặt vào họ. Bạn đang tin tưởng vào cơ sở hạ tầng, nhân viên và các biện pháp bảo mật của họ sẽ hoàn hảo, 24/7.

Tự host lại theo hướng ngược lại. Bạn chạy phần mềm trên máy chủ của riêng mình—có thể là một VPS giá rẻ bắt đầu khoảng 5 đô la/tháng, một chiếc Raspberry Pi trong tủ quần áo, hoặc một máy chủ chuyên dụng tại nhà. Điều này mang lại cho bạn chủ quyền dữ liệu hoàn toàn. Trách nhiệm thiết lập, bảo mật và sao lưu chuyển sang cho bạn, nhưng các công cụ hiện đại như Docker đã làm cho quá trình này trở nên dễ dàng một cách đáng ngạc nhiên.

Bitwarden vs. Vaultwarden: Lựa Chọn Nào Dành Cho Bạn?

Khi bạn quyết định tự host, máy chủ Bitwarden chính thức là một lựa chọn vững chắc. Nó mạnh mẽ và được hỗ trợ chính thức. Tuy nhiên, nó được xây dựng hướng đến nhu cầu của doanh nghiệp, sử dụng Microsoft SQL Server và đòi hỏi tài nguyên hệ thống đáng kể (ít nhất 2GB RAM). Quan trọng hơn, một số tính năng cao cấp, như lưu trữ mã TOTP để xác thực hai yếu tố, vẫn yêu cầu trả phí ngay cả khi bạn tự host.

Vì lý do này, cộng đồng đa số ưa thích Vaultwarden. Đó là một bản viết lại mã nguồn mở, nhẹ của API máy chủ Bitwarden, được xây dựng bằng ngôn ngữ lập trình Rust hiệu quả. Nó cực kỳ thân thiện với tài nguyên—chạy mượt mà trên dưới 100MB RAM—và mở khóa gần như tất cả các tính năng cao cấp của Bitwarden miễn phí. Đối với mục đích sử dụng cá nhân, các nhóm nhỏ hoặc gia đình, Vaultwarden gần như luôn là lựa chọn thông minh hơn.

Cấu Hình Đề Xuất Của Tôi: Vaultwarden với Docker & Caddy

Chiến lược ưa thích của tôi là triển khai Vaultwarden bằng Docker Compose cùng với máy chủ web Caddy. Docker làm cho toàn bộ thiết lập trở nên linh động và đơn giản để quản lý. Caddy cung cấp một cách thức gần như không cần cấu hình để xử lý reverse proxy và mã hóa HTTPS tự động từ Let’s Encrypt.

Tôi đã học được một bài học xương máu rằng bảo mật không thể là thứ làm sau. Sau khi một trong những máy chủ của tôi bị tấn công bởi một làn sóng tấn công brute-force qua SSH vào nửa đêm, giờ đây tôi ưu tiên bảo mật ngay từ ngày đầu. Chúng ta sẽ không chỉ phơi bày Vaultwarden ra internet. Chúng ta sẽ đặt nó sau một reverse proxy đáng tin cậy để mã hóa tất cả lưu lượng truy cập. Đó là cách làm chuyên nghiệp.

Điều Kiện Tiên Quyết

  • Một máy chủ có địa chỉ IP công cộng (bất kỳ VPS đám mây hoặc máy chủ tại nhà nào cũng được).
  • Docker và Docker Compose đã được cài đặt trên máy chủ của bạn.
  • Một tên miền (hoặc tên miền phụ) trỏ đến địa chỉ IP của máy chủ của bạn (ví dụ: vault.yourdomain.com).
  • Mở cổng tường lửa 80 và 443 để cho phép lưu lượng truy cập web.

Hướng Dẫn Triển Khai: Cài Đặt Vaultwarden Từng Bước

Bước 1: Chuẩn Bị Thư Mục

Đầu tiên, SSH vào máy chủ của bạn. Chúng ta sẽ tạo một thư mục chuyên dụng để giữ tất cả cấu hình và dữ liệu một cách có tổ chức.

mkdir -p /opt/vaultwarden
cd /opt/vaultwarden

Bước 2: Tạo Tệp `docker-compose.yml`

Tệp này định nghĩa các dịch vụ của chúng ta: ứng dụng Vaultwarden và reverse proxy Caddy. Tạo tệp bằng một trình soạn thảo văn bản như `nano` hoặc `vim`.

nano docker-compose.yml

Dán cấu hình sau vào tệp. Hãy chắc chắn thay đổi tên miền và đặt một `ADMIN_TOKEN` mạnh, ngẫu nhiên. Bạn có thể tạo một mã bằng lệnh openssl rand -base64 48.

version: '3'

services:
  vaultwarden:
    image: vaultwarden/server:latest
    container_name: vaultwarden
    restart: unless-stopped
    volumes:
      - ./vw-data:/data
    environment:
      - WEBSOCKET_ENABLED=true
      - SIGNUPS_ALLOWED=true # Đặt thành false sau khi bạn tạo tài khoản!
      - ADMIN_TOKEN=YOUR_VERY_SECRET_ADMIN_TOKEN

  caddy:
    image: caddy:latest # Thường thì dùng image Caddy 'latest' là ổn
    container_name: caddy
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
      - "443:443/udp" # Dành cho HTTP/3
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile:ro
      - ./caddy-data:/data
      - ./caddy-config:/config
    depends_on:
      - vaultwarden

Bước 3: Tạo Tệp `Caddyfile`

Bây giờ, hãy tạo cấu hình cho máy chủ web Caddy của chúng ta. Tệp này đơn giản một cách đáng kinh ngạc. Nó yêu cầu Caddy bảo mật tên miền của bạn bằng HTTPS và chuyển tiếp tất cả lưu lượng truy cập đến container Vaultwarden.

nano Caddyfile

Thêm nội dung sau, thay thế `vault.yourdomain.com` bằng tên miền của riêng bạn.

vault.yourdomain.com {
    # Bật nén
    encode gzip

    # Chuyển tiếp yêu cầu đến container Vaultwarden
    reverse_proxy vaultwarden:80 {
        # Thêm các header cần thiết để hỗ trợ WebSocket
        header_up Host {host}
        header_up X-Real-IP {remote_ip}
        header_up X-Forwarded-For {remote_ip}
        header_up X-Forwarded-Proto {scheme}
    }
}

Bước 4: Khởi Chạy Stack

Với cấu hình đã sẵn sàng, việc khởi động các dịch vụ chỉ cần một lệnh duy nhất. Từ thư mục `/opt/vaultwarden` của bạn, chạy:

docker-compose up -d

Docker bây giờ sẽ tải về các image mới nhất và khởi động các container ở chế độ nền. Caddy sẽ tự động nhận chứng chỉ SSL cho tên miền của bạn. Bạn có thể kiểm tra log để đảm bảo mọi thứ đã khởi động chính xác với docker-compose logs -f caddy vaultwarden.

Bước 5: Bảo Mật Instance Của Bạn

Truy cập vào tên miền của bạn trong trình duyệt web (ví dụ: https://vault.yourdomain.com). Tạo tài khoản chính của bạn. Đây sẽ là tài khoản chủ cho kho mật khẩu.

Bước tiếp theo này cực kỳ quan trọng về mặt bảo mật. Chúng ta cần vô hiệu hóa việc đăng ký công khai để ngăn người khác tạo tài khoản trên instance của bạn.

  1. Chỉnh sửa lại tệp docker-compose.yml.
  2. Thay đổi SIGNUPS_ALLOWED=true thành SIGNUPS_ALLOWED=false.
  3. Khởi động lại các container để áp dụng thay đổi: docker-compose up -d.

Kho mật khẩu của bạn giờ đã ở chế độ riêng tư. Bạn vẫn có thể mời người khác (như thành viên gia đình) từ bảng quản trị, có thể truy cập tại https://vault.yourdomain.com/admin. Đăng nhập bằng `ADMIN_TOKEN` an toàn mà bạn đã đặt trước đó.

Bước 6: Kết Nối Các Client Bitwarden Của Bạn

Mảnh ghép cuối cùng là kết nối các thiết bị của bạn. Tải xuống tiện ích mở rộng trình duyệt, ứng dụng máy tính để bàn hoặc ứng dụng di động chính thức của Bitwarden. Trước khi đăng nhập, hãy tìm biểu tượng cài đặt (bánh răng ⚙️), nhấp vào đó và nhập URL máy chủ tự host của bạn (ví dụ: `https://vault.yourdomain.com`). Lưu cài đặt, sau đó đăng nhập bằng mật khẩu chủ bạn đã tạo. Vậy là xong!

Bảo Trì Thiết Yếu: Sao Lưu và Cập Nhật

Việc chạy dịch vụ của riêng bạn cũng có nghĩa là bạn chịu trách nhiệm giữ cho nó an toàn. Đừng bỏ qua hai thói quen cuối cùng này: sao lưu thường xuyên và cập nhật kịp thời.

Sao lưu: Tất cả dữ liệu quan trọng của bạn (thông tin xác thực đã mã hóa, cài đặt, v.v.) được lưu trữ trong thư mục /opt/vaultwarden/vw-data. Bạn nên thường xuyên sao lưu thư mục này. Một cron job đơn giản tạo một tệp lưu trữ nén và gửi nó đến một vị trí lưu trữ bên ngoài an toàn (như Backblaze B2 hoặc một máy chủ khác) là một giải pháp hoàn hảo.

# Ví dụ lệnh sao lưu một lần
_now=$(date +"%Y-%m-%d-%H%M")
_backup_file="/root/backups/vaultwarden-$_now.tar.gz"
mkdir -p /root/backups
tar -czvf "$_backup_file" /opt/vaultwarden/vw-data

Cập nhật: Nhờ có Docker, việc cập nhật cũng dễ dàng như cài đặt ban đầu.

# Điều hướng đến thư mục Vaultwarden của bạn
cd /opt/vaultwarden

# Tải về phiên bản mới nhất của các image
docker-compose pull

# Tái tạo các container bằng image mới
docker-compose up -d

# (Tùy chọn) Dọn dẹp các image cũ, không sử dụng để tiết kiệm dung lượng đĩa
docker image prune -a -f

Đầu tư một chút thời gian để thiết lập trình quản lý mật khẩu của riêng bạn là một trong những bước đi có tác động lớn nhất bạn có thể thực hiện cho an ninh kỹ thuật số của mình. Bạn nhận được các tính năng của một trình quản lý mật khẩu đẳng cấp thế giới cùng với sự yên tâm tuyệt đối khi biết rằng dữ liệu thực sự là của riêng bạn.

Share: