Bảo mật VPS Linux từ A-Z với 10 lớp phòng thủ thiết yếu (cập nhật 2025)

Tác giả: Tran Thao 02 tháng 07, 2025

Bạn vừa nhận được thông tin đăng nhập vào chiếc VPS mới tinh của mình. Một cảm giác thật tuyệt vời! Giờ đây, bạn đã có một không gian riêng trên Internet, một “mảnh đất” để xây dựng website, ứng dụng hay bất kỳ dự án tâm huyết nào.

Nhưng hãy khoan, trước khi bạn vội vã cài đặt Apache hay Nginx, có một sự thật quan trọng bạn cần biết: Một chiếc VPS mới với cấu hình mặc định giống như một ngôi nhà đẹp đẽ nhưng lại không có cửa, không có hàng rào, nằm ngay giữa một “khu phố số” đầy rẫy những kẻ tò mò và các bot tự động.

Chỉ trong vòng vài giờ, thậm chí vài phút sau khi online, địa chỉ IP của bạn đã có thể bị hàng ngàn bot tự động từ khắp nơi trên thế giới quét qua, cố gắng tìm kiếm những điểm yếu sơ đẳng nhất. Chúng không phải là hacker thiên tài, chúng chỉ đơn giản là những chương trình được lập trình để thử đi thử lại những mật khẩu mặc định và khai thác những lỗ hổng phổ biến nhất.

Việc bỏ qua các bước bảo mật VPS cơ bản chính là sai lầm nguy hiểm và tốn kém nhất mà người dùng mới thường mắc phải. An ninh mạng không phải là một tùy chọn xa xỉ, nó là nền móng bắt buộc phải xây dựng ngay từ những viên gạch đầu tiên.

May mắn thay, việc “gia cố” cho pháo đài số của bạn không hề phức tạp như bạn nghĩ. Trong bài viết này, chúng tôi sẽ dẫn dắt bạn qua một lộ trình chi tiết với 10 lớp phòng thủ thiết yếu. Mỗi bước không chỉ là một dòng lệnh, mà là một khái niệm bảo mật quan trọng, giúp bạn ngăn chặn phần lớn các cuộc tấn công và bảo vệ an toàn cho dữ liệu quý giá của mình.

Hướng dẫn bảo mật VPS từ A-Z_ 10 lớp phòng thủ thiết yếu (cập nhật 2025)

Trước khi bắt đầu: Bạn cần gì?

Để thực hiện theo hướng dẫn này, hãy đảm bảo bạn đã có sẵn:

  1. Thông tin đăng nhập VPS: Địa chỉ IP, tên người dùng (thường là root) và mật khẩu ban đầu do nhà cung cấp gửi.
  2. Một trình kết nối SSH:
    • Windows: Bạn có thể dùng PowerShell/Command Prompt (có sẵn trên Windows 10/11) hoặc các phần mềm như PuTTY, MobaXterm.
    • macOS/Linux: Sử dụng ứng dụng Terminal có sẵn.

Bây giờ, hãy cùng nhau xây dựng từng lớp phòng thủ một!

Checklist 10 lớp phòng thủ bảo mật VPS

Lớp 1: Rời bỏ tài khoản ‘root’ – Nguyên tắc vàng của đặc quyền tối thiểu

Tại sao bước này lại quan trọng nhất?

Hãy tưởng tượng tài khoản root giống như chiếc chìa khóa vạn năng của cả tòa nhà. Nó có thể mở mọi cánh cửa, thay đổi mọi thứ, thậm chí… phá sập cả tòa nhà chỉ bằng một hành động sai lầm. Vận hành VPS hàng ngày bằng root cực kỳ nguy hiểm. Một lệnh gõ nhầm như rm -rf / thay vì rm -rf ./ có thể xóa sạch toàn bộ hệ thống của bạn chỉ trong một nốt nhạc.

Nguyên tắc “Đặc quyền tối thiểu” (Principle of Least Privilege) nói rằng một người dùng chỉ nên có những quyền hạn vừa đủ để thực hiện công việc của mình. Vì vậy, chúng ta sẽ tạo một người dùng thường và chỉ “mượn” quyền lực của root khi thực sự cần thiết thông qua lệnh sudo.

Cách thực hiện:

  1. Đầu tiên, hãy đăng nhập vào VPS bằng tài khoản root.
  2. Tạo một người dùng mới (hãy thay ten_user bằng tên bạn muốn, ví dụ: dminh):

adduser ten_user

Hệ thống sẽ yêu cầu bạn đặt mật khẩu và điền một số thông tin (có thể bỏ qua bằng cách nhấn Enter).

  1. Cấp quyền sudo (siêu quản trị) cho người dùng mới này. Lệnh này sẽ thêm người dùng vào nhóm sudo, cho phép họ thực thi các lệnh với quyền của root.

usermod -aG sudo ten_user

Từ bây giờ, hãy đăng xuất khỏi root và đăng nhập lại bằng tài khoản ten_user mới tạo. Mọi thao tác sau này đều sẽ được thực hiện qua tài khoản này.

Lớp 2: Dựng tường lửa UFW – “Người gác cổng” mẫn cán

Tại sao cần tường lửa?

Nếu VPS của bạn là một ngôi nhà, thì các cổng (port) dịch vụ (như 22 cho SSH, 80 cho web) chính là những cánh cửa. Mặc định, nhiều cánh cửa có thể đang mở toang. Tường lửa chính là người gác cổng, quyết định xem ai được phép đi qua cánh cửa nào và cánh cửa nào phải được khóa chặt.

Trên Ubuntu, UFW (Uncomplicated Firewall) là một công cụ cực kỳ mạnh mẽ và đúng như tên gọi, nó rất dễ sử dụng.

Cách thực hiện:

  1. Thiết lập quy tắc nền: Nguyên tắc an toàn nhất là “chặn tất cả những gì không được phép”. Chúng ta sẽ chặn mọi kết nối đến và chỉ cho phép các kết nối đi ra.

sudo ufw default deny incoming
sudo ufw default allow outgoing

  1. Mở các cổng cần thiết: Đây là bước tối quan trọng. Bạn phải “đục lỗ” trên tường lửa để các dịch vụ hợp lệ có thể hoạt động.

CẢNH BÁO: Luôn luôn cho phép cổng SSH (22 hoặc cổng bạn dùng) trước khi bật tường lửa. Nếu không, bạn sẽ tự khóa chính mình ở bên ngoài và không thể truy cập vào VPS được nữa!

# Cho phép kết nối SSH (cổng mặc định 22)
sudo ufw allow ssh

# Cho phép truy cập web qua giao thức HTTP (cổng 80)
sudo ufw allow http

# Cho phép truy cập web qua giao thức bảo mật HTTPS (cổng 443)
sudo ufw allow https

  1. Kích hoạt tường lửa:

sudo ufw enable

Hệ thống sẽ hỏi bạn xác nhận, nhấn y và Enter.

  1. Kiểm tra lại trạng thái:

sudo ufw status verbose

Lệnh này sẽ hiển thị tường lửa đang hoạt động và liệt kê tất cả các quy tắc bạn đã thiết lập.

Ví dụ output mẫu của lệnh ufw status verbose:

Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW IN    Anywhere
80/tcp                     ALLOW IN    Anywhere
443/tcp                    ALLOW IN    Anywhere
22/tcp (v6)                ALLOW IN    Anywhere (v6)
80/tcp (v6)                ALLOW IN    Anywhere (v6)
443/tcp (v6)               ALLOW IN    Anywhere (v6)

Mẹo nâng cao: Khóa cổng SSH chỉ dành cho bạn
Nếu bạn có một địa chỉ IP tĩnh (không thay đổi) ở nhà hoặc văn phòng, bạn có thể tăng cường bảo mật bằng cách chỉ cho phép IP của mình kết nối tới SSH.
Đầu tiên, bạn cần biết địa chỉ IP public của mình (có thể tìm bằng cách gõ “my ip address” trên Google).
Sau đó, thay vì dùng sudo ufw allow ssh, hãy dùng lệnh cụ thể hơn:

# Thay YOUR_HOME_IP bằng địa chỉ IP của bạn
sudo ufw allow from YOUR_HOME_IP to any port 22

Lệnh này ra lệnh cho tường lửa: “Chỉ chấp nhận kết nối đến cổng 22 nếu nó đến từ địa chỉ IP này”. Đây là một trong những cách hiệu quả nhất để ẩn mình khỏi các cuộc tấn công SSH tự động.

Để kiểm tra các kết nối bị chặn hoặc cho phép sau này, bạn có thể bật tính năng ghi log của UFW bằng lệnh:

sudo ufw logging on

Lớp 3: Gia cố “cửa chính” bằng SSH Key – Từ khóa thường sang khóa sinh trắc học

Tại sao SSH Key an toàn hơn mật khẩu?

Đăng nhập bằng mật khẩu giống như dùng một chiếc khóa chìa cơ. Kẻ trộm có thể bẻ khóa, hoặc tệ hơn, chúng có thể thử hàng triệu chiếc chìa khóa khác nhau (tấn công Brute Force) cho đến khi có một chiếc vừa.

SSH Key thì giống như một hệ thống khóa sinh trắc học. Nó bao gồm một cặp khóa:

  • Private Key: Là “dấu hiệu nhận dạng” của bạn, được lưu trữ an toàn tuyệt đối trên máy tính cá nhân.
  • Public Key: Là “ổ khóa” tương ứng, được đặt trên VPS.

Chỉ khi hai khóa này khớp nhau, bạn mới có thể đăng nhập. Việc bẻ khóa một SSH Key hiện đại gần như là bất khả thi về mặt toán học.

Cách thực hiện:

  1. Tạo cặp khóa trên máy tính cá nhân của bạn: Mở Terminal (macOS/Linux) hoặc PowerShell (Windows) và chạy lệnh sau:

ssh-keygen -t ed25519

Đây là thuật toán hiện đại, nhanh và an toàn được khuyến nghị rộng rãi hiện nay. Ed25519 cung cấp mức độ bảo mật cao với key ngắn hơn, giúp xác thực nhanh hơn.

Bạn có thể đặt một passphrase (mật khẩu cho chính key) để tăng thêm một lớp bảo mật nữa. Nếu cần tương thích với các hệ thống rất cũ, bạn có thể dùng: ssh-keygen -t rsa -b 4096.

  1. Sao chép Public Key lên VPS: Đây là bước đưa “ổ khóa” lên máy chủ. Cách dễ nhất là dùng lệnh ssh-copy-id.

ssh-copy-id ten_user@your_vps_ip

Lệnh này sẽ yêu cầu bạn nhập mật khẩu của ten_user lần cuối. Sau đó, nó sẽ tự động sao chép public key vào đúng vị trí trên VPS.

Lớp 4: Khóa trái cửa – Vô hiệu hóa đăng nhập của root & bằng mật khẩu

Tại sao phải làm vậy?

Bây giờ bạn đã có một lối vào siêu an toàn (SSH Key), không có lý do gì để giữ lại những lối vào yếu kém khác (đăng nhập của root và đăng nhập bằng mật khẩu). Vô hiệu hóa chúng là một bước cực kỳ quan trọng để giảm thiểu bề mặt tấn công.

Cách thực hiện:

  1. Mở file cấu hình dịch vụ SSH bằng trình soạn thảo nano:

sudo nano /etc/ssh/sshd_config

  1. Tìm và sửa các dòng sau:
    • Vô hiệu hóa đăng nhập của root:
      Tìm dòng PermitRootLogin và đổi giá trị thành no.
      PermitRootLogin no
    • Vô hiệu hóa đăng nhập bằng mật khẩu:
      Tìm dòng PasswordAuthentication và đảm bảo giá trị của nó là no.
      PasswordAuthentication no
  2. Lưu file (Ctrl + X, sau đó Y, rồi Enter) và khởi động lại dịch vụ SSH để áp dụng thay đổi.

sudo systemctl restart sshd

Lưu ý: Trước khi thực hiện bước này, hãy mở một cửa sổ terminal mới và thử đăng nhập bằng SSH Key để chắc chắn nó đã hoạt động. Tránh trường hợp bạn tự khóa mình khỏi VPS.

Lớp 5: Đổi cổng SSH mặc định – “Tàng hình” trước các bot tự động

Tại sao đổi cổng lại hiệu quả?

Hãy tưởng tượng tất cả các bot tấn công trên thế giới đều được lập trình để tìm đến “Cửa số 22”. Bằng cách đổi cổng SSH của bạn sang một số khác (ví dụ: 2222, 4837), bạn đơn giản là đã di chuyển cánh cửa của mình đến một nơi mà 99% các bot tự động sẽ không bao giờ tìm tới. Đây là một cách đơn giản nhưng cực kỳ hiệu quả để giảm thiểu “tiếng ồn” trong log hệ thống của bạn.

Cách thực hiện:

  1. Mở cổng mới trên tường lửa (QUAN TRỌNG): Đây là bước phải làm ĐẦU TIÊN.

# Thay 2222 bằng số cổng bạn chọn (từ 1025 đến 65535)
sudo ufw allow 2222/tcp

  1. Chỉnh sửa file cấu hình SSH:

sudo nano /etc/ssh/sshd_config

Tìm dòng #Port 22. Bỏ dấu # ở đầu và đổi 22 thành số cổng bạn đã chọn (ví dụ: 2222).
Port 2222

  1. Khởi động lại SSH để áp dụng:

sudo systemctl restart sshd

Từ lần đăng nhập tiếp theo, bạn sẽ cần chỉ định cổng mới:
ssh ten_user@your_vps_ip -p 2222

Lớp 6: Thuê “vệ sĩ” tự động Fail2Ban

Fail2Ban là gì?

Fail2Ban là một vệ sĩ thông minh và không bao giờ ngủ. Nó liên tục theo dõi các file log của hệ thống (ví dụ: log đăng nhập SSH). Nếu nó phát hiện một địa chỉ IP nào đó cố gắng đăng nhập sai quá nhiều lần, nó sẽ ngay lập tức “ra lệnh” cho tường lửa (UFW) để cấm IP đó trong một thời gian.

Cách thực hiện:

# Cài đặt Fail2Ban
sudo apt update
sudo apt install fail2ban -y

# Kích hoạt và khởi chạy dịch vụ
sudo systemctl enable fail2ban
sudo systemctl start fail2ban

Chỉ vậy thôi! Fail2Ban đã bắt đầu công việc của mình.

Mẹo chuyên nghiệp: Mặc dù Fail2Ban hoạt động ngay sau khi cài đặt cho SSH, để tùy chỉnh (ví dụ: thay đổi thời gian cấm, số lần thử sai), bạn không nên sửa file /etc/fail2ban/jail.conf. Thay vào đó, hãy tạo một file cấu hình cục bộ:

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Sau đó, hãy thực hiện mọi thay đổi trên file jail.local. File này sẽ ghi đè các thiết lập trong jail.conf và sẽ không bị ảnh hưởng bởi các bản cập nhật trong tương lai.

Lớp 7: Duy trì vệ sinh – Luôn cập nhật hệ thống

Tại sao cập nhật lại quan trọng?

Các phần mềm và hệ điều hành đôi khi có những khiếm khuyết, hay còn gọi là “lỗ hổng bảo mật”. Khi các nhà phát triển phát hiện ra những lỗ hổng này, họ sẽ tung ra các bản vá. Việc không cập nhật hệ thống chẳng khác nào bạn biết ổ khóa nhà mình có lỗi nhưng lại không chịu thay.

Cách thực hiện:

Hãy tạo thói quen chạy cặp lệnh sau ít nhất mỗi tuần một lần để đảm bảo hệ thống của bạn luôn được cập nhật những bản vá bảo mật mới nhất.

# Lấy danh sách các gói có thể cập nhật
sudo apt update

# Thực hiện cập nhật tất cả các gói
sudo apt upgrade -y

Nâng cao: Tự động cập nhật các bản vá an ninh
Để đảm bảo an toàn tuyệt đối, bạn có thể cấu hình hệ thống tự động cài đặt các bản cập nhật bảo mật. Trên Ubuntu, bạn có thể làm điều này bằng gói unattended-upgrades:

sudo apt install unattended-upgrades
sudo dpkg-reconfigure --priority=low unattended-upgrades

Thao tác này sẽ mở một trình cấu hình cho phép bạn bật tính năng tự động cập nhật, giúp vá các lỗ hổng nghiêm trọng ngay lập tức mà không cần can thiệp thủ công, giảm thiểu “cửa sổ cơ hội” cho kẻ tấn công.

Lớp 8: Nâng cấp an ninh với xác thực hai yếu tố (2FA) cho SSH

2FA là gì?

Đây là một lớp bảo vệ bổ sung cực kỳ mạnh mẽ. Với cấu hình đúng, ngay cả khi hacker bằng cách nào đó đánh cắp được private key của bạn, chúng vẫn không thể đăng nhập nếu không có mã xác thực dùng một lần (OTP) được tạo ra từ ứng dụng trên điện thoại của bạn (như Google Authenticator hoặc Authy).

Cách thực hiện:

  1. Cài đặt thư viện của Google:

sudo apt install libpam-google-authenticator

  1. Chạy trình cấu hình cho người dùng của bạn:

google-authenticator

Trả lời y cho các câu hỏi. Quan trọng nhất, hệ thống sẽ hiển thị một mã QR lớn. Hãy dùng ứng dụng Google Authenticator trên điện thoại để quét mã này. Lưu lại các mã dự phòng (scratch codes) ở một nơi an toàn.

  1. Kích hoạt 2FA cho SSH:
    Đây là bước kết hợp tất cả lại với nhau. Chúng ta cần yêu cầu SSH sử dụng PAM và bắt buộc người dùng phải vượt qua cả hai vòng xác thực.

Mở file sudo nano /etc/pam.d/sshd và thêm dòng sau vào đầu file:

auth required pam_google_authenticator.so

Tiếp theo, mở file cấu hình SSH sudo nano /etc/ssh/sshd_config và tìm để sửa/thêm BA dòng sau:

# Yêu cầu SSH sử dụng các mô-đun PAM đã cấu hình
UsePAM yes

# Tắt các phương thức không dùng, bật phương thức cần thiết
ChallengeResponseAuthentication yes
PasswordAuthentication no

# ĐÂY LÀ DÒNG QUAN TRỌNG NHẤT
# Nó bắt buộc người dùng phải xác thực bằng publickey,
# sau đó phải xác thực bằng keyboard-interactive (chính là mã OTP từ PAM)
AuthenticationMethods publickey,keyboard-interactive

Giải thích: Dòng AuthenticationMethods ra lệnh cho SSH rằng một phiên đăng nhập thành công phải thỏa mãn hai điều kiện tuần tự: đầu tiên là publickey (SSH Key), và ngay sau đó là keyboard-interactive (lời nhắc nhập mã OTP mà chúng ta đã cấu hình qua PAM).

  1. Khởi động lại SSH:

sudo systemctl restart sshd

Bây giờ, khi đăng nhập SSH, sau khi máy tính của bạn gửi SSH key thành công, terminal sẽ hiện thêm một yêu cầu “Verification code:”. Hãy nhập mã từ ứng dụng Google Authenticator để hoàn tất đăng nhập.

Lớp 9: Tự kiểm toán hệ thống với Lynis

Lynis là gì?

Lynis là một chuyên gia kiểm toán bảo mật tự động. Khác với các công cụ tự động “cứng hóa” có thể thay đổi hệ thống của bạn một cách đột ngột, Lynis chỉ hoạt động như một người cố vấn: Nó sẽ quét toàn bộ hệ thống của bạn từ A-Z, kiểm tra hàng trăm hạng mục và đưa ra một báo cáo chi tiết về các điểm yếu cùng gợi ý (suggestions) cụ thể để bạn “cứng hóa” hệ thống của mình hơn nữa.

Cách thực hiện:

# Cài đặt Lynis
sudo apt install lynis -y

# Chạy kiểm toán hệ thống
sudo lynis audit system

Sau khi quét xong, hãy dành thời gian đọc kỹ phần “Suggestions” ở cuối báo cáo. Đây là một danh sách vàng các hành động bạn có thể thực hiện để nâng cao điểm bảo mật.

Lớp 10: Giám sát “dấu vân tay” file với AIDE

AIDE là gì?

AIDE (Advanced Intrusion Detection Environment) là một hệ thống phát hiện xâm nhập dựa trên máy chủ (host-based). Nó hoạt động bằng cách tạo ra một “dấu vân tay” (database) của tất cả các file hệ thống quan trọng khi hệ thống đang ở trạng thái “sạch”.

Định kỳ, bạn sẽ chạy AIDE để nó so sánh trạng thái hiện tại của các file với “dấu vân tay” gốc. Nếu một file nào đó bị thay đổi (ví dụ: hacker xâm nhập và chèn mã độc vào một file hệ thống), AIDE sẽ ngay lập tức phát hiện và báo cho bạn biết chính xác file nào đã bị chỉnh sửa.

Cách thực hiện:

  1. Cài đặt AIDE:

sudo apt install aide -y

  1. Tạo database “dấu vân tay” ban đầu:

LƯU Ý QUAN TRỌNG: Lệnh này phải được chạy khi bạn chắc chắn 100% rằng hệ thống của mình đang ở trạng thái “sạch” (ví dụ: ngay sau khi bạn đã thực hiện 9 lớp bảo mật ở trên và trước khi cài đặt các ứng dụng phức tạp khác). “Dấu vân tay” này chính là cơ sở để so sánh, vì vậy nó phải được tạo ra từ một hệ thống đáng tin cậy.

sudo aideinit

Lệnh này sẽ mất một lúc để quét toàn bộ hệ thống.

  1. Kích hoạt database mới tạo:

sudo mv /var/lib/aide/aide.db.new /var/lib/aide/aide.db

  1. Chạy kiểm tra định kỳ: Bạn nên đặt lịch chạy lệnh này (ví dụ: mỗi đêm) để kiểm tra sự thay đổi.

sudo aide --check

Nếu không có gì thay đổi, kết quả sẽ là “All files match AIDE database”. Nếu có sự thay đổi, nó sẽ liệt kê chi tiết.

Kết luận

Bảo mật không phải là một đích đến, mà là một quá trình liên tục đòi hỏi sự chú ý và chăm sóc. Tuy nhiên, việc dành ra một giờ ban đầu để triển khai 10 lớp phòng thủ được nêu trong bài viết này sẽ giúp bạn xây dựng một nền tảng vững chắc, đủ sức chống lại hơn 99% các cuộc tấn công tự động phổ biến.

Hãy tóm tắt lại các hành động cốt lõi:

  • Nền tảng: Tạo người dùng sudo, không dùng root.
  • Phòng tuyến ngoài: Thiết lập tường lửa UFW.
  • Gia cố cửa chính: Dùng SSH Key, đổi cổng, vô hiệu hóa mật khẩu.
  • Phòng thủ tự động: Cài đặt Fail2Ban.
  • Duy trì liên tục: Luôn cập nhật hệ thống.
  • Nâng cao: Bổ sung 2FA, tự kiểm toán với Lynis và giám sát file với AIDE.

Hãy xem việc bảo mật VPS là một khoản đầu tư cho sự bình yên của chính bạn và sự an toàn cho dữ liệu của người dùng. Một hệ thống được bảo vệ tốt sẽ giúp bạn ngủ ngon hơn vào ban đêm.

Đây chỉ là một trong những sự cố phổ biến khi sử dụng VPS. Để tìm hiểu tổng quan về các vấn đề khác và cách khắc phục nhanh, hãy tham khảo bài viết chính của chúng tôi: Lỗi VPS giá rẻ: 6 vấn đề “chí mạng” và hướng dẫn sửa nhanh – VPS Chính hãng

Tài liệu tham khảo

  1. UFW – Uncomplicated Firewall: https://help.ubuntu.com/community/UFW
  2. OpenSSH Project: https://www.openssh.com/
  3. Fail2Ban: https://www.fail2ban.org/wiki/index.php/Main_Page
  4. Lynis – Security auditing tool: https://cisofy.com/lynis/
  5. AIDE – Advanced Intrusion Detection Environment: https://aide.github.io/
  6. Google Authenticator PAM Module: https://github.com/google/google-authenticator-libpam