TDCLOUD  ·  0%
Hướng Dẫn

Bảo mật VPS Linux cơ bản: 6 việc nên làm ngay sau khi nhận VPS

C
Cố Tổng
06/10/2026
3 lượt xem

Một VPS Linux vừa cấp có IP công khai trên Internet, và chỉ sau vài phút đã có các bot tự động thử đăng nhập SSH bằng hàng loạt mật khẩu phổ biến. Bài này hướng dẫn bạn bảo mật VPS Linux bằng 6 việc cơ bản, làm một lần mất khoảng 20–30 phút, áp dụng cho Ubuntu và Debian. Mỗi bước đều có lệnh để sao chép và ảnh minh họa kết quả cần thấy.

Tóm tắt 6 bước:

  1. Cập nhật hệ thống và cài bản vá bảo mật.
  2. Đổi mật khẩu root thành mật khẩu mạnh.
  3. Tạo người dùng thường có quyền sudo.
  4. Đăng nhập bằng SSH key thay cho mật khẩu.
  5. Tắt đăng nhập root và đăng nhập bằng mật khẩu qua SSH.
  6. Bật tường lửa UFW và cài Fail2ban.

Trước khi bắt đầu: bạn cần đăng nhập được vào VPS bằng tài khoản root. Nếu chưa biết cách, xem bài kết nối VPS Linux qua SSH. Trong bài, 203.0.113.25 là IP ví dụ và tdc là tên người dùng ví dụ, hãy thay bằng thông tin của bạn.

Bước 1: Cập nhật hệ thống

Phần lớn lỗ hổng bị khai thác trên VPS là lỗ hổng đã có bản vá nhưng chưa được cài. Vì vậy việc đầu tiên luôn là cập nhật:

apt update && apt upgrade -y

Nếu cập nhật có kernel mới hoặc sau đó xuất hiện file /var/run/reboot-required, hãy khởi động lại VPS bằng lệnh reboot rồi đăng nhập lại.

Chạy lệnh apt update và apt upgrade để cập nhật VPS Ubuntu
Lệnh apt update tải danh sách gói mới, apt upgrade cài các bản cập nhật.

Để không phải nhớ cập nhật thủ công, bạn có thể bật cập nhật bảo mật tự động:

apt install unattended-upgrades -y
dpkg-reconfigure -plow unattended-upgrades

Chọn Yes khi được hỏi. Từ đó các bản vá bảo mật sẽ được cài tự động hằng ngày.

Bước 2: Đổi mật khẩu root

Mật khẩu ban đầu thường được gửi qua email hoặc lưu trong trang quản lý dịch vụ, nên đổi sang mật khẩu riêng mà chỉ bạn biết. Chạy:

passwd

Nhập mật khẩu mới hai lần. Khi gõ, Linux không hiển thị ký tự nào, đó là bình thường. Nên dùng mật khẩu dài từ 14 ký tự trở lên, có chữ hoa, chữ thường, số, ký tự đặc biệt, và lưu trong trình quản lý mật khẩu.

Bước 3: Tạo người dùng có quyền sudo

Làm việc hằng ngày bằng root rất rủi ro: một lệnh gõ nhầm có thể xoá cả hệ thống, và root là tài khoản mà mọi bot đều nhắm tới. Hãy tạo một người dùng thường và cấp quyền sudo để chạy lệnh quản trị khi cần:

adduser tdc
usermod -aG sudo tdc
groups tdc

Lệnh adduser sẽ hỏi mật khẩu cho người dùng mới, các mục Full Name, Room Number… có thể bấm Enter để bỏ qua. Lệnh groups phải hiện chữ sudo là được.

Đổi mật khẩu root, tạo user tdc và thêm vào nhóm sudo trên Ubuntu
Đổi mật khẩu root, tạo người dùng tdc và cấp quyền sudo.

Mở một cửa sổ mới và thử đăng nhập bằng người dùng này (ssh tdc@203.0.113.25), sau đó chạy sudo whoami. Nếu kết quả là root nghĩa là quyền sudo đã hoạt động.

Bước 4: Đăng nhập bằng SSH key

SSH key gồm hai phần: khoá riêng nằm trên máy tính của bạn và khoá công khai đặt trên VPS. Không có khoá riêng thì không đăng nhập được, dù đoán đúng mật khẩu. Đây là cách chặn hiệu quả kiểu tấn công dò mật khẩu.

4.1. Tạo cặp khoá trên máy tính của bạn

Trên Windows 10/11 mở PowerShell, trên macOS hoặc Linux mở Terminal, rồi chạy:

ssh-keygen -t ed25519 -C "may-tinh-cua-ban"

Bấm Enter để lưu ở vị trí mặc định, sau đó đặt một passphrase (mật khẩu bảo vệ khoá). Passphrase có thể bỏ trống, nhưng đặt thì an toàn hơn nếu máy tính bị mất hoặc bị lấy file.

Tạo SSH key ed25519 bằng ssh-keygen trong PowerShell trên Windows
ssh-keygen tạo hai file: id_ed25519 (khoá riêng) và id_ed25519.pub (khoá công khai).

4.2. Chép khoá công khai lên VPS

Trên macOS/Linux, dùng lệnh có sẵn:

ssh-copy-id tdc@203.0.113.25

Trên Windows không có ssh-copy-id, hãy chạy lệnh sau trong PowerShell (một dòng):

type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh tdc@203.0.113.25 "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"

Nhập mật khẩu của người dùng tdc lần cuối. Sau đó thử đăng nhập lại bằng ssh tdc@203.0.113.25: nếu chỉ được hỏi passphrase của khoá (hoặc vào thẳng nếu không đặt passphrase) là SSH key đã hoạt động.

Chép khoá công khai SSH lên VPS từ PowerShell và đăng nhập bằng key
Sau khi chép khoá, lần đăng nhập tiếp theo không còn hỏi mật khẩu VPS.

Trang quản lý VPS của TDCLOUD cũng có mục Settings → SSH Keys để thêm khoá công khai. Bạn có thể dùng cách này nếu thấy tiện hơn.

Bước 5: Tắt đăng nhập root và đăng nhập bằng mật khẩu

Quan trọng: chỉ làm bước này khi bạn đã đăng nhập thành công bằng SSH key với người dùng tdc và dùng được sudo. Trong suốt bước này, giữ nguyên phiên SSH đang mở, chỉ đóng sau khi đã thử đăng nhập thành công ở một cửa sổ mới.

Trên Ubuntu 22.04, 24.04 và Debian 12, file /etc/ssh/sshd_config nạp thêm các file trong thư mục /etc/ssh/sshd_config.d/. Một số bản cài sẵn file như 50-cloud-init.conf bật lại PasswordAuthentication yes, khiến bạn sửa file chính mà không có tác dụng. SSH lấy giá trị xuất hiện đầu tiên, nên cách chắc chắn nhất là tạo file có tên bắt đầu bằng 00-:

sudo nano /etc/ssh/sshd_config.d/00-bao-mat.conf

Dán nội dung sau, bấm Ctrl + O, Enter để lưu và Ctrl + X để thoát:

PermitRootLogin no
PasswordAuthentication no
KbdInteractiveAuthentication no

Kiểm tra cú pháp, xem giá trị đang có hiệu lực rồi khởi động lại dịch vụ SSH:

sudo sshd -t
sudo sshd -T | grep -Ei 'permitrootlogin|passwordauthentication'
sudo systemctl restart ssh
Cấu hình sshd_config.d tắt PermitRootLogin và PasswordAuthentication
sshd -t không báo lỗi và sshd -T hiển thị "no" là cấu hình đã đúng.

Bây giờ mở cửa sổ mới và thử ssh tdc@203.0.113.25. Đăng nhập được thì mới đóng phiên cũ. Thử thêm ssh root@203.0.113.25, bạn sẽ nhận thông báo Permission denied (publickey), nghĩa là root và mật khẩu đã bị chặn.

Nếu bạn vẫn muốn root đăng nhập được nhưng chỉ bằng key, thay dòng đầu bằng PermitRootLogin prohibit-password.

Bước 6: Bật tường lửa UFW và cài Fail2ban

6.1. Tường lửa UFW

UFW chỉ cho phép các cổng bạn khai báo, mọi kết nối khác bị chặn. Thứ tự rất quan trọng: mở cổng SSH trước rồi mới bật tường lửa, nếu làm ngược lại bạn sẽ tự khoá mình ở ngoài.

sudo apt install ufw -y
sudo ufw allow OpenSSH
sudo ufw allow 80,443/tcp
sudo ufw enable
sudo ufw status

Dòng allow 80,443/tcp chỉ cần khi VPS chạy website. Nếu bạn đã đổi cổng SSH sang số khác 22, thay OpenSSH bằng cổng đó, ví dụ sudo ufw allow 2222/tcp.

Mở cổng OpenSSH, 80, 443 và bật tường lửa UFW trên VPS Ubuntu
ufw status hiển thị "active" cùng danh sách cổng được phép.

6.2. Fail2ban chặn IP dò mật khẩu

Fail2ban theo dõi nhật ký đăng nhập và tự chặn IP thử sai nhiều lần. Dù đã tắt đăng nhập bằng mật khẩu, Fail2ban vẫn giúp giảm lượng kết nối rác và log rác.

sudo apt install fail2ban python3-systemd -y
sudo nano /etc/fail2ban/jail.local

Dán nội dung sau rồi lưu lại:

[sshd]
enabled  = true
backend  = systemd
maxretry = 5
findtime = 10m
bantime  = 1h

Cấu hình này chặn 1 giờ những IP đăng nhập sai 5 lần trong 10 phút. Khởi động lại và kiểm tra:

sudo systemctl restart fail2ban
sudo fail2ban-client status sshd
Kiểm tra trạng thái jail sshd của Fail2ban và danh sách IP bị chặn
fail2ban-client status sshd liệt kê số lần thử sai và các IP đang bị chặn.

Nếu lỡ chặn nhầm IP của chính mình, gỡ chặn bằng: sudo fail2ban-client set sshd unbanip IP_CUA_BAN.

Ghi chú cho AlmaLinux / Rocky Linux

Các bước trên giống nhau về ý tưởng, chỉ khác lệnh:

  • Cập nhật: dnf update -y.
  • Nhóm quản trị là wheel thay cho sudo: usermod -aG wheel tdc.
  • Dịch vụ SSH tên là sshd: sudo systemctl restart sshd.
  • Tường lửa mặc định là firewalld: firewall-cmd --permanent --add-service=ssh rồi firewall-cmd --reload. Fail2ban cài từ kho EPEL.

Lỡ tự khoá mình ở ngoài thì sao?

Nếu sau khi sửa SSH hoặc bật tường lửa mà không đăng nhập được nữa, đừng cài lại hệ điều hành vội. Hãy dùng VNC Console trong trang quản lý VPS để vào thẳng màn hình máy chủ, không phụ thuộc SSH hay tường lửa. Xem hướng dẫn: kết nối VPS qua VNC Console. Từ đó bạn có thể sửa lại file cấu hình hoặc chạy ufw disable rồi làm lại cho đúng.

TDCLOUD có backup hằng ngày cho toàn bộ gói VPS, nhưng với dữ liệu quan trọng như database, mã nguồn website, bạn vẫn nên tự sao lưu định kỳ ra một nơi khác để chủ động khôi phục khi cần.

Câu hỏi thường gặp

Có nên đổi cổng SSH khỏi 22 không?

Đổi cổng giúp giảm bớt bot quét tự động và log gọn hơn, nhưng không thay thế được SSH key. Nếu đổi, nhớ mở cổng mới trên UFW trước khi khởi động lại SSH.

Mất file khoá riêng thì làm sao?

Đăng nhập qua VNC Console bằng tài khoản người dùng, tạo cặp khoá mới trên máy tính rồi thêm khoá công khai mới vào ~/.ssh/authorized_keys. Nên sao lưu khoá riêng ở nơi an toàn ngay từ đầu.

Lệnh sudo báo "tdc is not in the sudoers file"?

Người dùng chưa được thêm vào nhóm sudo. Đăng nhập root (hoặc qua VNC) và chạy lại usermod -aG sudo tdc, sau đó đăng xuất và đăng nhập lại.

Đã sửa PasswordAuthentication no mà vẫn đăng nhập bằng mật khẩu được?

Thường do một file khác trong /etc/ssh/sshd_config.d/ đặt giá trị yes trước. Chạy sudo sshd -T | grep passwordauthentication để xem giá trị thực tế, và đảm bảo file của bạn có tên bắt đầu bằng 00-.

Nếu cần một VPS Linux để thực hành, bạn có thể tham khảo VPS giá rẻ hoặc VPS tiêu chuẩn tại TDCLOUD. Gặp khó khăn ở bước nào, hãy liên hệ đội hỗ trợ TDCLOUD để được hướng dẫn trực tiếp.

Nếu bạn thấy bài viết này hữu ích...

Nhấp vào ngôi sao để đánh giá!

Chưa có đánh giá nào. Hãy là người đầu tiên!

Có thể bạn quan tâm