Hướng dẫn tạo Backup Air-gapped cho VPS (Chống Ransomware)
Trong bài viết 3 cách backup VPS phổ biến, chúng ta đã tìm hiểu về nguyên tắc vàng 3-2-1. Nhưng trong bối cảnh hiện tại, chiến lược đó là chưa đủ.
Ransomware ngày nay không còn đơn giản. Chúng không chỉ mã hóa dữ liệu, mà còn được lập trình để chủ động lùng sục và phá hủy mọi bản backup online mà chúng tìm thấy. Một bản backup Rclone được kết nối 24/7 cũng có thể bị xóa sổ trong vài giây nếu kẻ tấn công chiếm được API key của bạn.
Đây là lúc chiến lược backup air-gapped cho VPS trở thành lớp bảo vệ tối thượng. Bài viết này sẽ đi sâu vào kỹ thuật thực hiện “số 1” (Air-gap) và “số 0” (Zero Error) trong quy tắc 3-2-1-1-0, biến một VPS vốn “luôn online” thành một pháo đài bất khả xâm phạm.
Quy tắc 3-2-1-1-0: “Phao cứu sinh” trong kỷ nguyên Ransomware
Chúng ta sẽ tập trung vào 2 con số quan trọng nhất để chống ransomware, vốn là bản nâng cấp của quy tắc 3-2-1 truyền thống:
| Con số | Ý nghĩa | Tại sao nó “kháng” Ransomware? |
| …1… | 1 bản sao air-gapped (Cách ly) (Định nghĩa trên Cloud chính là “Bất biến” – Immutable) |
Ransomware lây lan qua mạng. Một bản sao bị ngắt kết nối (air-gap vật lý) hoặc bị khóa “bất biến” (air-gap logic) là hoàn toàn vô hình và không thể bị phá hủy bởi kẻ tấn công. |
| …0 | 0 lỗi (Zero Errors) | Một bản backup chưa bao giờ được khôi phục thử (test restore) là một bản backup… vô dụng. Con số “0” đại diện cho việc xác minh tính toàn vẹn, đảm bảo bạn có thể khôi phục 100% khi thảm họa xảy ra. |
Thách thức: “Air-gap” cho một VPS vốn… luôn online?
Khái niệm “air-gap” truyền thống rất đơn giản: bạn sao chép dữ liệu vào một ổ cứng ngoài và… rút dây cáp. Ổ cứng đó được “cách ly” hoàn toàn khỏi mạng.
Nhưng làm thế nào bạn “rút dây” một Máy chủ ảo (VPS) vốn được sinh ra để online 24/7?
Câu trả lời là chúng ta tạo ra “khoảng hở không khí” theo một cách khác. Trong bối cảnh VPS, có hai trường phái chính:
- Air-gap vật lý (Physical Air Gap): Bạn chủ động tạo bản sao và tải nó về, lưu trữ trên thiết bị cá nhân (ổ cứng, USB) và ngắt kết nối vật lý.
- Air-gap logic (Logical Air Gap): Bạn thiết lập một quy trình hoặc chính sách tự động để cách ly bản backup. Dữ liệu được lưu ở một nơi mà VPS không có quyền truy cập, hoặc dữ liệu được khóa lại (bất biến) ngay sau khi ghi.
Dưới đây là hướng dẫn chi tiết cho cả hai phương pháp.
Phương pháp 1: Làm thế nào để tạo Air-gap vật lý cho VPS?
Đây là phương pháp “cổ điển”, đơn giản nhất và an toàn nhất về mặt lý thuyết, nhưng đòi hỏi sự kỷ luật cao. Tư duy ở đây là mang dữ liệu ra khỏi môi trường online.
Cách 1: Dùng Snapshot (Tải về thủ công)
Hầu hết các nhà cung cấp VPS đều cho phép bạn tạo “ảnh chụp nhanh” (snapshot) toàn bộ máy chủ.
- Bước 1: Đăng nhập vào trang quản trị của nhà cung cấp VPS.
- Bước 2: Nhấn nút “Tạo Snapshot” (Create Snapshot).
- Bước 3 (Quan trọng): Sau khi snapshot được tạo, tìm tùy chọn “Tải về” (Download). Hầu hết các nhà cung cấp đều hỗ trợ việc này, cho phép bạn tải về một file
.isohoặc.img. - Bước 4: Tải file snapshot đó về máy tính cá nhân.
- Bước 5: Copy file vào ổ cứng dự phòng và rút dây ổ cứng. Bản sao của bạn giờ đã được “air-gapped” 100%.
Cách 2: Dùng lệnh Tar (Nén & tải về)
Nếu bạn chỉ muốn backup source code và database, không cần cả hệ điều hành, phương pháp này linh hoạt hơn.
- Bước 1 (Trên VPS): SSH vào và gom mọi thứ bạn cần vào một file nén duy nhất.Đầu tiên, xuất cơ sở dữ liệu (Database dump):
mysqldump -u [user] -p[pass] --all-databases > /root/db_backup.sqlTiếp theo, nén mã nguồn và file SQL (sử dụng cờ
--excludeđể loại bỏ thư mục cache/log không cần thiết):tar -czf /root/full_backup_$(date +%Y-%m-%d).tar.gz \ --exclude="/var/www/html/cache" \ --exclude="/var/www/html/logs" \ /var/www/html/ \ /root/db_backup.sql - Bước 2 (Trên máy tính cá nhân): Dùng
scp(hoặc FileZilla) để tải file nén đó về.Chạy lệnh sau trên Terminal của máy tính cá nhân (thay2222bằng port SSH của bạn):scp -P 2222 user@vps_ip:/root/full_backup_2025-11-08.tar.gz . - Bước 3: Copy file
.tar.gzvào ổ cứng dự phòng và ngắt kết nối.
Ưu và nhược điểm của Air-gap vật lý
- Ưu điểm:
- Bảo mật tuyệt đối: Khi ổ cứng đã rút dây, không một hacker nào có thể chạm tới nó qua mạng.
- Chi phí bằng 0: Bạn không tốn thêm chi phí dịch vụ cloud, chỉ cần một ổ cứng.
- Nhược điểm:
- Thủ công và dễ quên: Đây là điểm yếu chí mạng. Bạn phải tự nhớ làm việc này hàng tuần hoặc hàng tháng.
- Không thể tự động hóa: Mất thời gian và đòi hỏi sự kỷ luật.
- Thời gian khôi phục lâu: Khi cần, bạn phải tìm ổ cứng, cắm lại, và upload ngược file hàng chục GB lên VPS mới.
Phương pháp 2: Làm thế nào để tạo Air-gap logic (Tự động)?
Đây là giải pháp hiện đại, giải quyết điểm yếu “dễ quên” của phương pháp vật lý. Chúng ta tạo ra “khoảng hở” bằng quy trình và chính sách bảo mật, thay vì bằng dây cáp.
Cách 1: “Kéo” chủ động (Pull-based) – Phương pháp an toàn nhất
Đây là kỹ thuật được các quản trị viên hệ thống (sysadmin) chuyên nghiệp tin dùng.
- Tư duy: Thay vì “đẩy” (push) backup từ VPS lên cloud (làm lộ API key, mật khẩu trên VPS), chúng ta làm ngược lại. Chúng ta dùng một máy chủ “bí mật” (có thể là một NAS, một máy tính ở văn phòng) để chủ động kết nối vào VPS và “kéo” (pull) dữ liệu về.
- Điểm mấu chốt (Tạo Air-gap): VPS của bạn không hề biết sự tồn tại của máy chủ backup. Nó không lưu bất kỳ thông tin đăng nhập nào của nơi lưu trữ. Nếu VPS bị hack 100%, kẻ tấn công cũng không thể tìm thấy hoặc truy cập vào các bản backup.
Công cụ thực hiện: Rsync
- Trên máy chủ backup (Local/NAS): Tạo một cặp SSH key và thêm public key vào file
~/.ssh/authorized_keystrên VPS. - Trên máy chủ backup: Tạo một script
pull_backup.shvà đặt lịch cron cho nó chạy hàng đêm.#!/bin/bash # (Chạy trên máy chủ backup, KHÔNG PHẢI VPS) # Thông tin VPS VPS_USER="[user_tren_vps]" VPS_IP="[dia_chi_ip_vps]" SSH_PORT="2222" # (Nên dùng port SSH tùy chỉnh) # Thư mục trên VPS cần kéo về REMOTE_SOURCE_CODE="/var/www/html/" REMOTE_DB_DUMP="/root/db_backup.sql" # (Bạn phải có 1 cron khác trên VPS để dump DB ra file này trước) # Nơi lưu trữ trên máy chủ backup LOCAL_DEST="/mnt/backup_storage/vps-web-$(date +%Y-%m-%d)/" # Tạo thư mục cho ngày hôm nay mkdir -p $LOCAL_DEST # Lệnh Rsync tối ưu hóa # Dùng cờ -e để chỉ định port SSH rsync -avzP -e "ssh -p $SSH_PORT" \ --delete \ $VPS_USER@$VPS_IP:$REMOTE_SOURCE_CODE \ $LOCAL_DEST/html/ rsync -avzP -e "ssh -p $SSH_PORT" \ $VPS_USER@$VPS_IP:$REMOTE_DB_DUMP \ $LOCAL_DEST/db/ echo "Backup Air-gapped (Pull) hoàn tất lúc $(date)" - Chi tiết: Để làm chủ hoàn toàn các cờ lệnh của Rsync (như
-avzP,--delete), hãy tham khảo bài viết chuyên sâu của chúng tôi: Lệnh Rsync là gì? 5+ cách dùng đồng bộ file VPS.
- Ưu điểm:
- An toàn tuyệt đối: VPS bị xâm nhập hoàn toàn cũng không ảnh hưởng đến kho backup.
- Hiệu quả & tự động: Tận dụng thuật toán delta-transfer của Rsync, chỉ kéo về những gì thay đổi và chạy tự động.
- Nhược điểm:
- Yêu cầu bạn phải có một máy chủ thứ hai (NAS, PC, hoặc một VPS giá rẻ) để làm kho lưu trữ.
Cách 2: “Đẩy” thụ động (Push-based) với lưu trữ bất biến (Immutable)
Đây là “air-gap logic” phiên bản hiện đại, tận dụng sức mạnh của cloud.
- Tư duy: VPS vẫn “đẩy” (push) backup lên cloud. Nhưng ngay khi dữ liệu chạm đến cloud, nó sẽ được khóa lại bằng tính năng “Lưu trữ bất biến” (Immutable Storage hay Object Lock).
- Điểm mấu chốt (Tạo Air-gap): Tính năng “bất biến” (WORM – Write Once, Read Many) ngăn không cho bất kỳ ai (kể cả quản trị viên với API key) được phép sửa hoặc xóa dữ liệu trong một khoảng thời gian nhất định (ví dụ: 30 ngày).
Ransomware có chiếm được API key của bạn? Tốt thôi. Chúng có thể ghi thêm file (làm tăng chi phí lưu trữ) nhưng chúng không thể xóa các bản backup cũ đã được khóa.
Công cụ thực hiện: Restic + Cloud (Backblaze B2, AWS S3)
Đây là lúc Restic phát huy tác dụng. Restic là công cụ sinh ra để làm việc với các kho lưu trữ cloud và hỗ trợ tính năng “bất biến”.
Cách làm:
- Trên nhà cung cấp Cloud:
- Tạo một Bucket mới.
- Tìm và bật (Enable) “Object Lock” cho Bucket đó.
- Tạo một App Key (API Key).
- ⚠️ Tuân thủ “Quyền tối thiểu” (Least Privilege): Chỉ cấp các quyền Restic cần:
readBucketEncryption,writeBucketEncryption,writeFiles,readFiles,deleteFiles. Tuyệt đối KHÔNG cấp cho API key này các quyền nguy hiểm nhưdeleteBucket(xóa bucket) hoặc các quyền thay đổi chính sách (Policy) của bucket.
- Trên VPS của bạn:
- Thực hiện theo bài hướng dẫn chi tiết của chúng tôi: Backup VPS chống trùng lặp với Restic.
- Khi bạn chạy lệnh
restic init(Mục 3 của bài viết Restic), Restic sẽ tự động nhận diện Bucket này có hỗ trợ Object Lock và hỏi bạn:create repository in bucket [tên-bucket] with object lock? (y/n)Hãy nhấn
y(Yes). - Restic sẽ yêu cầu bạn chọn chế độ. Hãy chọn “Compliance” mode và đặt thời gian khóa (ví dụ: 15 hoặc 30 ngày).
- Tự động hóa:
- Sử dụng toàn bộ script tự động hóa (Mục 7) bao gồm dump database, backup file, và
restic forget --prune. - Khi lệnh
restic prunechạy, nó sẽ xóa các snapshot cũ trong “danh bạ” của Restic, nhưng dữ liệu thực tế trên B2 sẽ chỉ bị xóa sau khi hết hạn 30 ngày khóa.
- Sử dụng toàn bộ script tự động hóa (Mục 7) bao gồm dump database, backup file, và
- Ưu điểm:
- Hoàn toàn tự động hóa, không cần can thiệp.
- Tận dụng sức mạnh của Restic: chống trùng lặp (deduplication) siêu tiết kiệm dung lượng.
- Không cần phần cứng cá nhân.
- Nhược điểm:
- Phát sinh chi phí lưu trữ cloud (dù rất rẻ).
- Kẻ tấn công vẫn có thể làm phiền (ghi dữ liệu rác) nếu có được API key.
Đừng quên số “0” (Zero Error): Một bản backup Air-gapped cho VPS có vô dụng?
Bạn đã có một bản backup cách ly. Xin chúc mừng! Nhưng bạn có chắc nó hoạt động không?
Con số “0” trong 3-2-1-1-0 là yêu cầu bắt buộc: Không lỗi. Bạn phải định kỳ kiểm tra (Test Restore) bản backup của mình. Một bản sao lưu chưa bao giờ được khôi phục thử là một bản sao lưu không đáng tin cậy.
- Nếu dùng Restic (Cách logic 2): Restic làm việc này cực kỳ dễ dàng. Bạn có thể dùng tính năng “Mount” để duyệt file backup như một ổ đĩa ảo, hoặc khôi phục thử ra một thư mục tạm.
- Xem chi tiết tại Mục 5: Phục hồi dữ liệu với Restic (phần “Mount” repo).
- Hoặc chạy lệnh sau để Restic tự kiểm tra 10% dữ liệu ngẫu nhiên:
restic check --read-data-subset=10%
- Nếu dùng Rsync/Tar (Cách vật lý & logic 1):
- Bạn phải làm thủ công.
- Cách tốt nhất: Tạo một VPS mới (có thể là VPS cấu hình thấp giá rẻ), và thử khôi phục (upload file
.tar.gzvà giải nén, hoặcrsyncngược lại) xem website có hoạt động lại bình thường không. - Đừng đợi đến lúc thảm họa xảy ra mới phát hiện file backup của bạn bị hỏng từ 6 tháng trước.
Kết luận
Không có một giải pháp “tốt nhất”, chỉ có “phù hợp nhất”. Một chiến lược backup air-gapped cho VPS thông minh là sự kết hợp của công cụ và kỷ luật.
- Nếu bạn ưu tiên đơn giản, không rành kỹ thuật: Chọn Air-gap vật lý (Tải Snapshot/Tar thủ công). Đặt lịch nhắc nhở trên điện thoại và thực hiện nó vào Chủ Nhật hàng tuần. Nó thủ công, nhưng có còn hơn không.
- Nếu bạn là Sysadmin/Doanh nghiệp (Ưu tiên an toàn tuyệt đối): Hãy đầu tư thời gian thiết lập Air-gap logic (Pull-based với Rsync). Đây là tiêu chuẩn vàng về bảo mật.
- Nếu bạn là Developer/Người dùng bận rộn (Ưu tiên tự động & cân bằng): Hãy chọn Air-gap logic (Restic + Object Lock). Nó mang lại sự cân bằng hoàn hảo giữa tự động hóa, hiệu quả và bảo mật “đủ tốt” để chống ransomware.
Ransomware là một cuộc chạy đua vũ trang. Bằng cách tạo ra một bản sao lưu cách ly mà chúng không thể chạm tới, bạn đã nắm chắc phần thắng trong tay.







