📢 Bài viết có chứa link affiliate. Bạn không trả thêm phí khi mua qua link của mình.
Deploy VPS xong rồi… và bị hack sau 3 ngày. Đây là câu chuyện tôi nghe từ nhiều bạn trong cộng đồng. Server Linux không có nghĩa là an toàn mặc định — ngược lại, VPS bare-bone cần được hardening kỹ trước khi đưa vào production. Checklist dưới đây là những bước tôi thực hiện cho mọi VPS mới, không bỏ sót bước nào.
👉 Cần VPS tốt để bắt đầu: Xem các gói VPS giá tốt nhất →
Nhóm A: Ngay Sau Khi Tạo VPS (Trước Khi Làm Bất Kỳ Điều Gì Khác)
1. Đổi port SSH mặc định (22 → port khác)
Bot tự động scan port 22 liên tục. Đổi sang port 2222 hoặc bất kỳ số nào 1024-65535. Chỉnh trong /etc/ssh/sshd_config: Port 2222.
2. Tắt đăng nhập SSH bằng password, chỉ dùng SSH key
Set PasswordAuthentication no trong sshd_config. Đây là bước quan trọng nhất — 90% brute force attack dựa vào password.
3. Tắt đăng nhập root trực tiếp
Set PermitRootLogin no. Tạo user riêng với sudo privilege. Không bao giờ làm việc trực tiếp bằng root.
4. Cập nhật toàn bộ package ngay lập tức
apt update && apt upgrade -y && apt autoremove -y. Bật unattended-upgrades cho security patch tự động.
5. Cài và cấu hình UFW firewall
Chỉ mở đúng port cần thiết: SSH port mới, 80, 443. Block toàn bộ còn lại: ufw default deny incoming && ufw allow 2222 && ufw allow 80 && ufw allow 443 && ufw enable.
6. Cài Fail2ban ngay lập tức
Tự động block IP sau N lần login thất bại. Config mặc định là ổn, nhưng nhớ update jail.conf để monitor SSH port mới của bạn.
7. Tắt IPv6 nếu không dùng
IPv6 mở thêm attack surface. Nếu không có nhu cầu cụ thể, tắt đi trong /etc/sysctl.conf.
Nhóm B: Sau Khi Cài Ứng Dụng (Trước Khi Go Live)
8. Không chạy web server dưới quyền root
Nginx/Apache nên chạy dưới user www-data. Kiểm tra bằng ps aux | grep nginx.
9. Cấu hình PHP-FPM với user riêng cho từng site
Mỗi WordPress site nên có PHP-FPM pool riêng. Nếu một site bị compromise, sẽ không ảnh hưởng sang site khác.
10. Giới hạn quyền file WordPress
Folders: 755, Files: 644, wp-config.php: 600. Không bao giờ để 777.
11. Tắt XML-RPC nếu không dùng
Thêm vào nginx config: location = /xmlrpc.php { deny all; }. XML-RPC là vector tấn công phổ biến cho WordPress.
12. Ẩn version WordPress và PHP trong header
Xóa tag version khỏi header bằng functions.php. Set expose_php = Off trong php.ini.
13. Cài SSL và redirect toàn bộ HTTP → HTTPS
Let’s Encrypt miễn phí. Thêm HSTS header để browser nhớ chỉ dùng HTTPS. Thêm security headers: X-Frame-Options, X-Content-Type-Options, Referrer-Policy.
14. Backup tự động database mỗi ngày
Dùng mysqldump + cron job, lưu ra ngoài server (S3, Backblaze B2, hoặc local machine). Không bao giờ lưu backup duy nhất trên VPS.
Nhóm C: Cấu Hình Monitoring và Cảnh Báo
15. Cài Netdata hoặc dùng UptimeRobot
Monitor CPU, RAM, disk, network. UptimeRobot miễn phí check uptime mỗi 5 phút, gửi email/Telegram khi down.
16. Bật log rotation
Logrotate đảm bảo log không ăn đầy disk. Check /var/log sau 1 tuần nếu bạn có traffic nhiều.
17. Cài auditd để log các lệnh sudo
Quan trọng nếu bạn có nhiều người access VPS. Mọi lệnh sudo đều được ghi lại.
Nhóm D: Kiểm Tra Định Kỳ (Hàng Tháng)
18. Check các user account không cần thiết
cat /etc/passwd — xóa user không dùng. Review SSH authorized_keys mỗi tháng.
19. Scan malware với ClamAV hoặc rkhunter
Chạy rkhunter định kỳ để phát hiện rootkit. ClamAV cho file scan nếu bạn nhận upload từ user.
20. Review firewall rules và close port không dùng
Nhiều người cài tạm 1 service rồi quên đóng port. Review ufw status numbered mỗi tháng.
Kết Luận
20 bước trên không cần chuyên gia bảo mật — một buổi chiều cuối tuần là đủ để hoàn thành. Quan trọng nhất: SSH key + Fail2ban + UFW. Ba thứ này chặn được 95% attack tự động. Phần còn lại là defense in depth để xử lý các trường hợp tinh vi hơn.
Phù hợp cho: Developer, sysadmin mới, blogger dùng VPS self-managed.
Không áp dụng nguyên văn cho: Managed VPS (Cloudways, Kinsta) — những thứ này đã được provider xử lý.
👉 Cần VPS để thực hành: Nhận ưu đãi VPS tốt nhất tại đây →