Bảo mật VPS Ubuntu: 10 bước cần làm ngay sau khi cài đặt
Hướng dẫn bảo mật VPS Ubuntu 24.04 từng bước: SSH key, tắt đăng nhập mật khẩu, UFW, Fail2ban, cập nhật tự động và sao lưu, kèm lệnh chính xác và lỗi cần tránh.

Ý chính
- Việc quan trọng nhất là đăng nhập SSH bằng key và tắt đăng nhập bằng mật khẩu.
- Bật tường lửa UFW chỉ mở cổng thật sự cần, nhưng nhớ mở SSH trước khi bật.
- Ubuntu Server bật sẵn cập nhật bảo mật tự động; Debian cần cài unattended-upgrades.
- Docker bỏ qua UFW với cổng được publish, nên phải tự kiểm soát cổng của container.
Bảo mật VPS Ubuntu bắt đầu từ bốn việc: đăng nhập SSH bằng key thay cho mật khẩu, không dùng root để đăng nhập trực tiếp, bật tường lửa chỉ mở các cổng cần thiết, và giữ hệ thống luôn được vá. Làm xong bốn việc này trong 15 phút đầu tiên, bạn đã chặn được phần lớn các cuộc tấn công tự động nhắm vào VPS mới.
Bài viết đi qua 10 bước cụ thể cho Ubuntu 24.04 (phần lớn áp dụng nguyên cho Ubuntu 22.04 và Debian 12), với lệnh chính xác, cách kiểm tra từng bước đã có hiệu lực, và những lỗi khiến người quản trị tự khoá mình ngoài server. Cuối bài là phần ZoPanel làm sẵn những gì, để bạn biết bước nào còn phải tự làm.
Vì sao phải bảo mật VPS ngay khi vừa tạo?
Một VPS có IP public sẽ bị các bot quét cổng và thử đăng nhập SSH gần như ngay sau khi khởi động. Bạn có thể tự thấy điều này: mở sudo journalctl -u ssh sau một ngày, sẽ có các lần thử đăng nhập bằng root, admin, test… từ những IP bạn không hề biết.
Các cuộc tấn công này không nhắm vào riêng bạn. Chúng thử mật khẩu yếu, dịch vụ quên chưa đóng, phần mềm chưa vá trên hàng triệu máy cùng lúc. Vì vậy, mục tiêu không phải là "không ai tấn công được", mà là không để lại những lỗ hổng dễ dãi mà bot tự động khai thác được.
Checklist bảo mật VPS Ubuntu
| Bước | Việc cần làm | Mức độ |
|---|---|---|
| 1 | Cập nhật hệ thống, bật cập nhật bảo mật tự động | Bắt buộc |
| 2 | Tạo user có sudo, không làm việc bằng root | Bắt buộc |
| 3 | Đăng nhập SSH bằng key ed25519 | Bắt buộc |
| 4 | Tắt đăng nhập mật khẩu và root qua SSH | Bắt buộc |
| 5 | Bật tường lửa UFW | Bắt buộc |
| 6 | Cài Fail2ban chống dò mật khẩu | Nên làm |
| 7 | Đóng dịch vụ không cần thiết | Nên làm |
| 8 | Đồng bộ thời gian | Nên làm |
| 9 | Sao lưu ra ngoài server | Bắt buộc |
| 10 | Theo dõi log và cảnh báo | Nên làm |
Trước khi bắt đầu: hãy chắc chắn bạn có console dự phòng (VNC/console trên trang quản lý của nhà cung cấp VPS). Nếu cấu hình SSH sai, đó là cách duy nhất để vào lại.
Bước 1: Cập nhật hệ thống và bật vá bảo mật tự động
sudo apt update
sudo apt full-upgrade -y
Kiểm tra xem có cần khởi động lại không (thường là sau khi cập nhật kernel):
[ -f /var/run/reboot-required ] && echo "Cần reboot"
Theo tài liệu chính thức của Ubuntu, Ubuntu Server cài sẵn unattended-upgrades và tự cài bản vá bảo mật ngay sau khi cài đặt. Mặc định nó không tự khởi động lại, nên bản vá kernel chỉ có hiệu lực khi bạn reboot. Hãy lên lịch reboot định kỳ vào giờ ít truy cập.
Trên Debian 12, cần tự cài:
sudo apt install unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades
Bước 2: Tạo user riêng có quyền sudo
Làm việc hằng ngày bằng root nghĩa là mọi lệnh gõ nhầm đều chạy với toàn quyền. Tạo một user riêng:
sudo adduser quantri
sudo usermod -aG sudo quantri
Mở một terminal mới và thử ssh quantri@IP-VPS, rồi sudo -v để chắc chắn user này dùng được sudo trước khi đi tiếp.
Bước 3: Đăng nhập SSH bằng key
Trên máy tính của bạn (không phải VPS), tạo cặp khoá ed25519, loại khoá mà tài liệu OpenSSH của Ubuntu khuyên dùng:
ssh-keygen -t ed25519 -C "laptop-cong-ty"
ssh-copy-id quantri@IP-VPS
Đặt passphrase cho khoá. Nếu laptop bị mất, khoá có passphrase vẫn chưa dùng được ngay. Thử lại ssh quantri@IP-VPS: nếu vào được mà không hỏi mật khẩu của user, key đã hoạt động.
Bước 4: Tắt đăng nhập bằng mật khẩu và root qua SSH
Đây là bước quan trọng nhất, và cũng là bước dễ tự khoá mình nhất. Giữ nguyên phiên SSH hiện tại cho tới khi kiểm tra xong.
Ubuntu đọc các file trong /etc/ssh/sshd_config.d/ trước file cấu hình chính, và với sshd, giá trị đọc được đầu tiên sẽ thắng. Một số image cloud có sẵn file như 50-cloud-init.conf bật PasswordAuthentication yes, vì vậy hãy đặt tên file của bạn bắt đầu bằng 00- để nó được đọc trước:
sudo tee /etc/ssh/sshd_config.d/00-hardening.conf > /dev/null <<'EOF'
PermitRootLogin no
PasswordAuthentication no
KbdInteractiveAuthentication no
PubkeyAuthentication yes
MaxAuthTries 3
EOF
Kiểm tra cú pháp, xem giá trị thực tế, rồi khởi động lại SSH:
sudo sshd -t
sudo sshd -T | grep -Ei 'permitrootlogin|passwordauthentication'
sudo systemctl restart ssh
Mở terminal thứ hai và đăng nhập lại bằng key. Chỉ khi thành công mới đóng phiên cũ.
Có nên đổi cổng SSH?
Đổi cổng 22 sang cổng khác làm log bớt nhiễu, nhưng không thay thế được SSH key. Nếu đổi, lưu ý Ubuntu 24.04 dùng socket activation cho SSH: sau khi sửa Port, chỉ restart ssh là chưa đủ. Theo hướng dẫn của Ubuntu về socket activation, bạn cần:
sudo ufw allow 2222/tcp # mở cổng mới TRƯỚC
sudo systemctl daemon-reload
sudo systemctl restart ssh.socket
sudo ss -tlnp | grep 2222
Thử kết nối cổng mới, rồi mới xoá quy tắc cho cổng 22.
Bước 5: Bật tường lửa UFW
Nguyên tắc: chặn mọi kết nối vào, chỉ mở những gì cần. Mở SSH trước khi bật UFW, nếu không phiên hiện tại sẽ bị cắt.
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status verbose
Nếu nhà cung cấp VPS có thêm cloud firewall (security group), hãy cấu hình cả ở đó.
Lưu ý với Docker: tài liệu Docker nói rõ Docker và UFW không tương thích: cổng container được publish (-p 8080:80) đi vòng qua quy tắc UFW. Muốn ứng dụng Docker chỉ truy cập qua reverse proxy, hãy publish vào 127.0.0.1:8080:80 thay vì 8080:80.
Bước 6: Cài Fail2ban chống dò mật khẩu
Khi đã tắt mật khẩu SSH, dò mật khẩu SSH không còn tác dụng, nhưng Fail2ban vẫn hữu ích để giảm tải và bảo vệ các dịch vụ khác (mail, FTP, trang đăng nhập).
sudo apt install fail2ban python3-systemd
sudo tee /etc/fail2ban/jail.local > /dev/null <<'EOF'
[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5
ignoreip = 127.0.0.1/8 ::1
[sshd]
enabled = true
backend = systemd
EOF
sudo systemctl restart fail2ban
sudo fail2ban-client status sshd
backend = systemd giúp Fail2ban đọc log từ journal. Điều này quan trọng trên Debian 12, nơi rsyslog không còn được cài mặc định nên thường không có /var/log/auth.log. Thêm IP văn phòng của bạn vào ignoreip để không tự chặn mình.
Bước 7: Đóng dịch vụ không cần thiết
Liệt kê mọi cổng đang lắng nghe:
sudo ss -tulpn
Với mỗi dòng, hỏi: dịch vụ này có cần nhận kết nối từ internet không? MariaDB, PostgreSQL, Redis gần như luôn chỉ nên nghe ở 127.0.0.1. Dịch vụ không dùng thì gỡ hẳn (sudo apt purge ...) thay vì chỉ chặn cổng.
Bước 8: Đồng bộ thời gian
Log sai giờ khiến điều tra sự cố rất khó, và một số hệ thống xác thực (mã 2FA, license, chứng chỉ) phụ thuộc giờ chính xác.
timedatectl
sudo timedatectl set-timezone Asia/Ho_Chi_Minh
Dòng System clock synchronized: yes cho biết đồng bộ NTP đang hoạt động.
Bước 9: Sao lưu ra ngoài server
Bảo mật không chỉ là ngăn tấn công, mà còn là khôi phục được khi có sự cố. Bản sao lưu nằm trên chính VPS sẽ mất cùng VPS khi bị mã hoá tống tiền hoặc khi nhà cung cấp gặp sự cố. Tối thiểu:
- snapshot định kỳ ở nhà cung cấp VPS;
- sao lưu file và database ra một nơi khác (S3, máy chủ khác), có mã hoá;
- thử khôi phục ít nhất một lần, vì bản sao lưu chưa thử khôi phục là bản sao lưu chưa chắc dùng được.
Bước 10: Theo dõi log và cảnh báo
Vài lệnh nên quen tay:
sudo journalctl -u ssh --since today # đăng nhập SSH
last -n 20 # phiên đăng nhập gần đây
sudo fail2ban-client status sshd # IP đang bị chặn
df -h # ổ đĩa sắp đầy?
Tốt hơn nữa là có cảnh báo tự động khi dịch vụ dừng, ổ đĩa đầy hay chứng chỉ sắp hết hạn, để bạn không phải nhớ kiểm tra.
Bảo mật VPS Ubuntu với ZoPanel: phần nào đã có sẵn?
Nếu bạn dùng VPS để làm hosting, trình cài đặt ZoPanel tự làm khá nhiều bước ở trên. Theo tài liệu bảo mật:
- Cập nhật: trình cài đặt nâng cấp toàn bộ gói hệ thống và bật cập nhật bảo mật tự động (unattended-upgrades).
- Tường lửa: UFW được bật, chỉ mở cổng SSH của bạn, 80, 443 và 8888 (giao diện panel), và tự bật khi khởi động. Thành phần nào cài thêm (mail, DNS, FTP) tự mở cổng của nó. Quản lý quy tắc ở Bảo mật → Tường lửa.
- Fail2ban: jail
sshd(5 lần sai trong 10 phút, chặn 1 giờ) và jail riêng cho đăng nhập panel (8 lần sai trong 15 phút, chặn 1 giờ). - Cách ly giữa các website: mỗi tài khoản là một user Linux riêng, có pool PHP-FPM riêng, giới hạn CPU/RAM/tiến trình riêng, quota ổ đĩa, và
/procđược mount vớihidepidđể khách không thấy tiến trình của nhau. - Trung tâm bảo mật: chấm điểm server và panel, kiểm tra root đăng nhập SSH bằng mật khẩu, SSH dùng mật khẩu, Fail2ban, bản vá đang chờ, đồng bộ giờ, dịch vụ mở ra cổng công khai, tài khoản UID 0 thừa… và có nút Sửa ngay cho những mục sửa tự động được an toàn. Với các mục SSH, panel kiểm tra bạn đã có key trước khi sửa, nên không thể tự khoá mình.
- Panel: xác thực hai lớp (có thể bắt buộc cho mọi quản trị viên), giới hạn IP truy cập panel, nhật ký hoạt động chống sửa đổi, tường lửa ứng dụng web (ModSecurity + OWASP CRS) và quét mã độc hằng tuần.
Phần bạn vẫn phải tự làm: tạo SSH key, giữ console dự phòng, và đưa bản sao lưu ra ngoài server. ZoPanel cần cài trên server mới, nên thứ tự hợp lý là: tạo VPS → thêm SSH key → cài ZoPanel → mở Trung tâm bảo mật và xử lý từng mục còn đỏ.
Vì sao panel hosting cũng cần được thiết kế để giới hạn thiệt hại khi bị tấn công, bạn có thể đọc thêm trong bài Vì sao control panel hosting không nên chạy bằng root.
Những lỗi khiến bạn tự khoá mình ngoài VPS
- Bật UFW trước khi mở SSH. Phiên hiện tại bị cắt ngay. Luôn
ufw allow OpenSSHtrước. - Tắt mật khẩu trước khi thử key. Hãy thử đăng nhập bằng key ở một terminal khác trước.
- Đổi cổng SSH mà quên mở cổng mới trên UFW và cloud firewall, hoặc quên
restart ssh.sockettrên Ubuntu 24.04. - Đóng phiên SSH cũ quá sớm. Giữ nó tới khi chắc chắn phiên mới vào được.
- Tin rằng UFW chặn được container Docker. Không, với cổng đã publish.
- Nghĩ sao lưu trên cùng VPS là đủ. Không đủ khi chính VPS gặp sự cố.
Kết luận
Một VPS Ubuntu an toàn không đòi hỏi công cụ đắt tiền: SSH key, tắt mật khẩu, tường lửa, vá tự động và sao lưu ra ngoài đã đóng phần lớn cánh cửa mà bot tìm kiếm. Phần khó là làm đúng thứ tự để không tự khoá mình, và duy trì đều đặn về sau.
Nếu VPS của bạn dùng để chạy website, bạn có thể cài ZoPanel miễn phí (gói Free: 3 tài khoản hosting, 10 website, 10 database, không giới hạn thời gian) để có sẵn tường lửa, Fail2ban, cách ly từng website và Trung tâm bảo mật kiểm tra định kỳ cho bạn. Bước tiếp theo nên đọc: chống brute force SSH.
Câu hỏi thường gặp
Bảo mật VPS Ubuntu cần làm những gì đầu tiên?
Bốn việc đầu tiên: cập nhật hệ thống, đăng nhập SSH bằng key, tắt đăng nhập bằng mật khẩu và root qua SSH, rồi bật tường lửa UFW chỉ mở SSH, 80 và 443. Sau đó cài Fail2ban và thiết lập sao lưu ra ngoài server.
Có nên đổi cổng SSH mặc định 22 không?
Đổi cổng giúp log bớt các lần dò tự động, nhưng không làm server an toàn hơn đáng kể nếu bạn đã dùng SSH key và tắt mật khẩu. Nếu đổi, trên Ubuntu 24.04 phải chạy systemctl daemon-reload và systemctl restart ssh.socket, và mở cổng mới trên tường lửa trước.
Ubuntu có tự cài bản vá bảo mật không?
Có. Ubuntu Server cài sẵn và bật unattended-upgrades cho bản vá bảo mật, nhưng mặc định không tự khởi động lại. Bản vá kernel chỉ có hiệu lực sau khi reboot, nên hãy lên lịch reboot định kỳ.
Vì sao UFW không chặn được cổng của Docker?
Docker tự thêm quy tắc NAT để chuyển hướng traffic tới container trước khi traffic đi qua quy tắc UFW. Cách an toàn là publish cổng vào 127.0.0.1 và để nginx làm reverse proxy phía trước.
Cài control panel có làm VPS kém an toàn hơn không?
Có thể, nếu panel chạy bằng root và lộ ra internet mà không có lớp bảo vệ. Hãy chọn panel có tách quyền, xác thực hai lớp, giới hạn IP truy cập và chính sách cập nhật rõ ràng, và luôn cập nhật panel lên bản mới nhất.
Đọc tiếp

Cài WordPress trên VPS: hướng dẫn từ A đến Z (thủ công và bằng panel)
Hướng dẫn cài WordPress trên VPS Ubuntu 24.04 hoặc Debian 12 theo hai cách, thủ công với Nginx, PHP, MariaDB, SSL hoặc bằng control panel, kèm bảo mật sau cài.

Chuyển hosting cPanel sang VPS: quy trình 6 bước không mất dữ liệu
Hướng dẫn chuyển hosting cPanel sang VPS từ A đến Z, gồm backup cpmove, chuyển website, database, email, kiểm tra trước khi đổi DNS và cách tránh gián đoạn.

Thay thế aaPanel: tiêu chí chọn panel an toàn hơn và cách chuyển
Đang tìm thay thế aaPanel? So sánh HestiaCP, CloudPanel, ZoPanel và cPanel theo bảo mật, cách ly, giá, kèm checklist gia cố aaPanel và cách chuyển website.