📢 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.
Bạn vừa mua một VPS mới — Vultr, Hetzner, hay DigitalOcean — và đang chuẩn bị deploy production. Nhưng server mới “ra lò” mặc định cực kỳ dễ bị tấn công: root login mở, SSH port 22 lộ thiên, không có firewall. Checklist dưới đây tổng hợp 20 bước thiết yếu bạn cần làm TRƯỚC KHI deploy bất kỳ thứ gì lên production.
👉 Cần VPS mới để thực hành? Đăng ký Vultr nhận $100 credit →
Giai Đoạn 1: Thiết Lập Ban Đầu (Ngay Sau Khi Tạo Server)
Bước 1: Đổi mật khẩu root ngay lập tức
Mật khẩu mặc định từ provider thường yếu hoặc bị gửi qua email. Đổi sang mật khẩu dài ≥20 ký tự ngay khi SSH lần đầu: passwd root
Bước 2: Tạo user non-root và cấp sudo
Không bao giờ làm việc trực tiếp bằng root trong production. Tạo user mới: adduser yourname && usermod -aG sudo yourname. Từ đây dùng user này cho mọi thao tác.
Bước 3: Thiết lập SSH Key Authentication
Copy public key lên server: ssh-copy-id yourname@server-ip. Đây là bước quan trọng nhất — xác thực bằng key an toàn hơn mật khẩu gấp nhiều lần.
Bước 4: Tắt SSH Password Authentication
Sau khi đã có SSH key, edit /etc/ssh/sshd_config: set PasswordAuthentication no và PermitRootLogin no. Restart SSH: systemctl restart sshd.
Bước 5: Đổi SSH Port mặc định
Port 22 bị scan tự động liên tục. Đổi sang port cao (ví dụ 2222 hoặc bất kỳ số nào 1024-65535) trong sshd_config. Giảm đáng kể brute-force attempts trong log.
Giai Đoạn 2: Firewall & Network Security
Bước 6: Cài và cấu hình UFW Firewall
Ubuntu/Debian: apt install ufw && ufw default deny incoming && ufw default allow outgoing && ufw allow [SSH-PORT]/tcp && ufw enable. Chỉ mở port thực sự cần thiết.
Bước 7: Mở port theo whitelist, không blacklist
Tư duy đúng: block tất cả, rồi mở từng port cần thiết (80, 443, SSH). Đừng mở 3306 (MySQL) ra internet nếu không có lý do thuyết phục.
Bước 8: Cài Fail2Ban chống brute-force
apt install fail2ban — tự động ban IP sau N lần thử sai. Config mặc định là đủ cho hầu hết trường hợp, nhưng hãy kiểm tra file /etc/fail2ban/jail.conf để điều chỉnh bantime.
Bước 9: Disable IPv6 nếu không dùng
IPv6 mở thêm attack surface nếu không cấu hình đúng. Nếu app không cần IPv6: thêm vào /etc/sysctl.conf: net.ipv6.conf.all.disable_ipv6 = 1.
Bước 10: Cấu hình Cloud Firewall của provider
Dùng thêm firewall ở tầng network của provider (Vultr, Hetzner đều có). Đây là lớp bảo vệ trước khi traffic chạm đến UFW — defense in depth.
Giai Đoạn 3: Cập Nhật & Patch Management
Bước 11: Update toàn bộ package ngay lập tức
apt update && apt upgrade -y && apt autoremove. Nhiều CVE nghiêm trọng được patch qua update thường xuyên.
Bước 12: Bật unattended-upgrades cho security patches
apt install unattended-upgrades và cấu hình để tự động áp dụng security updates. Không để server “mọc rêu” vì quên update.
Bước 13: Kiểm tra và gỡ service không cần thiết
systemctl list-units --type=service --state=running — xem những gì đang chạy. Disable service không dùng: giảm attack surface và tiết kiệm RAM.
Giai Đoạn 4: Monitoring & Audit
Bước 14: Cài đặt log monitoring
Kiểm tra /var/log/auth.log thường xuyên. Cân nhắc cài logwatch để nhận báo cáo log hàng ngày qua email.
Bước 15: Thiết lập alert CPU/Memory/Disk
Dùng monitoring của provider (Vultr, Hetzner đều có) hoặc cài Netdata. Alert khi disk >80% để tránh server đầy gây crash.
Bước 16: Cấu hình NTP đồng bộ thời gian
timedatectl set-ntp true. Server sai giờ gây lỗi SSL certificate và log khó trace. Đây là bước nhỏ nhưng thường bị bỏ qua.
Bước 17: Cài rkhunter kiểm tra rootkit
apt install rkhunter && rkhunter --check. Chạy định kỳ hàng tuần để phát hiện sớm dấu hiệu bị compromise.
Giai Đoạn 5: Backup & Recovery Plan
Bước 18: Thiết lập automated backup
Dùng tính năng backup của provider hoặc script rsync/Rclone sang S3/Backblaze B2. Rule 3-2-1: 3 bản sao, 2 medium khác nhau, 1 offsite.
Bước 19: Test restore procedure
Backup vô nghĩa nếu bạn không biết cách restore. Thử restore vào server test ít nhất 1 lần/tháng. Nhiều người chỉ phát hiện backup bị lỗi khi disaster xảy ra.
Bước 20: Document lại toàn bộ setup
Ghi lại: SSH port, user, services đang chạy, cấu trúc thư mục, cách deploy. Khi server crash lúc 2h sáng, bạn sẽ biết ơn bản thân đã làm việc này.
Kết Luận
20 bước trên không cần làm trong 1 ngày — nhưng ít nhất bước 1-10 phải hoàn thành TRƯỚC khi expose server ra internet. Bảo mật VPS là quy trình liên tục, không phải “làm một lần rồi thôi”.
Phù hợp cho: Developer, sysadmin mới, startup tự quản lý server. Không phù hợp cho: Ai cần managed hosting không muốn đau đầu về server — trong trường hợp đó, dùng Cloudways hay WP Engine.
👉 Cần VPS uy tín để áp dụng checklist này? Đăng ký Vultr nhận $100 credit →