Firewall & Bảo Mật VPS Toàn Tập 2026: Bảo Vệ Server Khỏi 99% Cuộc Tấn Công
Mỗi ngày có hàng triệu cuộc tấn công brute force nhắm vào các VPS trên toàn thế giới. Một VPS mới tạo chưa tới 5 phút đã bị bot quét SSH, thử password root/admin. Nếu không bảo mật đúng cách, VPS của bạn có thể bị chiếm quyền, cài mã độc, hoặc biến thành zombie trong botnet chỉ sau vài giờ. Bài viết này hướng dẫn checklist 10 bước bảo mật VPS từ cơ bản đến nâng cao — áp dụng cho mọi VPS Linux, đặc biệt là VPS TrumVPS.
Checklist 10 Bước Bảo Mật VPS
- Bước 1: Update hệ thống & cài đặt tự động update
- Bước 2: Tạo user sudo (KHÔNG dùng root)
- Bước 3: Cấu hình SSH Key (bắt buộc)
- Bước 4: Disable root login & password authentication
- Bước 5: Đổi port SSH mặc định (22 → khác)
- Bước 6: Cài đặt Firewall (CSF hoặc UFW)
- Bước 7: Cài Fail2Ban chống brute force
- Bước 8: Bật 2FA cho SSH (Google Authenticator)
- Bước 9: Cấu hình automatic security updates
- Bước 10: Giám sát & audit định kỳ (Lynis, logwatch)
Bước 1: Update Hệ Thống
Ngay sau khi nhận VPS, việc đầu tiên là update toàn bộ package lên phiên bản mới nhất:
# Ubuntu/Debian
sudo apt update && sudo apt upgrade -y
sudo apt autoremove -y
# CentOS/AlmaLinux/Rocky
sudo dnf update -y
sudo dnf autoremove -y
Kiểm tra kernel version hiện tại và khởi động lại nếu có update kernel:
uname -r
# Nếu có kernel mới → reboot
sudo reboot
Bước 2: Tạo User Sudo - Không Dùng Root
Dùng root để làm việc hàng ngày là thói quen cực kỳ nguy hiểm. Một lệnh sai (rm -rf /) là mất tất cả.
# Tạo user mới
sudo adduser thang
# Thêm vào group sudo
sudo usermod -aG sudo thang
# Kiểm tra quyền sudo
su - thang
sudo whoami # → root (thành công)
Từ giờ, luôn login bằng user thường và dùng sudo khi cần quyền admin.
Bước 3: Cấu Hình SSH Key
SSH Key an toàn hơn password gấp hàng nghìn lần. Key RSA 4096-bit gần như không thể brute force.
Tạo SSH Key trên máy local:
# Trên máy cá nhân (Mac/Linux/Windows WSL)
ssh-keygen -t ed25519 -C "vps-trumvps-2026"
# Output:
# ~/.ssh/id_ed25519 (private key - GIỮ BÍ MẬT)
# ~/.ssh/id_ed25519.pub (public key - copy lên VPS)
Copy public key lên VPS:
# Cách 1: Dùng ssh-copy-id (dễ nhất)
ssh-copy-id -i ~/.ssh/id_ed25519.pub thang@YOUR_VPS_IP
# Cách 2: Thủ công
cat ~/.ssh/id_ed25519.pub | ssh thang@YOUR_VPS_IP "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
# Trên VPS, set permission đúng
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
Bước 4: Disable Root Login & Password Authentication
Sau khi đã có SSH key hoạt động, tắt hoàn toàn login bằng password và root:
sudo nano /etc/ssh/sshd_config
# Tìm và sửa các dòng sau:
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
ChallengeResponseAuthentication no
UsePAM yes
MaxAuthTries 3
ClientAliveInterval 300
ClientAliveCountMax 2
# Lưu file → restart SSH
sudo systemctl restart sshd
Bước 5: Đổi Port SSH Mặc Định
Port 22 là target số 1 của bot scan. Đổi sang port khác giảm 99% log rác và tấn công tự động:
sudo nano /etc/ssh/sshd_config
# Đổi port (chọn port từ 1024-65535, tránh port phổ biến như 2222)
Port 48912
# Restart SSH
sudo systemctl restart sshd
Từ giờ login bằng: ssh -p 48912 thang@YOUR_VPS_IP
Bước 6: Cài Đặt Firewall
Có 2 lựa chọn firewall chính: UFW (đơn giản, dễ dùng) và CSF (chuyên nghiệp, nhiều tính năng hơn).
Option A: UFW (Uncomplicated Firewall)
sudo apt install ufw -y
# Set default policies
sudo ufw default deny incoming
sudo ufw default allow outgoing
# Mở các port cần thiết
sudo ufw allow 48912/tcp # SSH (port đã đổi)
sudo ufw allow 80/tcp # HTTP
sudo ufw allow 443/tcp # HTTPS
sudo ufw allow 51820/udp # WireGuard VPN (nếu có)
# Nếu chạy MySQL/Redis local, KHÔNG mở port ra ngoài
# Dùng bind 127.0.0.1 thay vì mở firewall
# Enable firewall
sudo ufw enable
sudo ufw status verbose
Option B: CSF (ConfigServer Security & Firewall)
CSF mạnh hơn UFW, có tích hợp sẵn LF (Login Failure) daemon chống brute force:
# Cài CSF
sudo apt install perl libwww-perl -y
cd /tmp
wget https://download.configserver.com/csf.tgz
tar -xzf csf.tgz
cd csf
sudo sh install.sh
# Kiểm tra cài đặt
sudo perl /usr/local/csf/bin/csftest.pl
# Cấu hình CSF
sudo nano /etc/csf/csf.conf
# Các setting quan trọng:
TESTING = "0" # Tắt testing mode
TCP_IN = "48912,80,443" # Port cho phép inbound
TCP_OUT = "1:65535" # Cho phép tất cả outbound
UDP_IN = "51820" # WireGuard
UDP_OUT = "53,123" # DNS, NTP
LF_SSHD = "5" # Block sau 5 lần fail SSH
LF_SSHD_PERM = "1" # Block vĩnh viễn
# Khởi động CSF
sudo csf -r
sudo csf -l # List rules
| Tính năng | UFW | CSF |
|---|---|---|
| Dễ cài đặt | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
| Chống brute force | ❌ (cần Fail2Ban) | ✅ Tích hợp LF daemon |
| Block IP/CIDR | ✅ | ✅ (nhanh hơn) |
| Rate limiting | ✅ | ✅ (chi tiết hơn) |
| Email alert | ❌ | ✅ |
| Phù hợp | Dev cá nhân, VPS nhỏ | Production, doanh nghiệp |
| RAM sử dụng | ~10MB | ~30MB |
Bước 7: Cài Fail2Ban Chống Brute Force
Fail2Ban theo dõi log, phát hiện IP có hành vi đáng ngờ (sai password nhiều lần, scan port) và tự động block bằng firewall:
sudo apt install fail2ban -y
# Tạo config local (không sửa file gốc)
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local
Cấu hình khuyến nghị cho VPS TrumVPS:
[DEFAULT]
bantime = 3600 # Block 1 giờ
findtime = 600 # Trong vòng 10 phút
maxretry = 3 # 3 lần fail = block
ignoreip = 127.0.0.1/8 YOUR_HOME_IP/32 # Whitelist IP nhà
[sshd]
enabled = true
port = 48912 # Port SSH đã đổi
logpath = %(sshd_log)s
maxretry = 3
bantime = 86400 # SSH: block 24h
[nginx-http-auth]
enabled = true
port = http,https
logpath = /var/log/nginx/error.log
maxretry = 5
[nginx-botsearch]
enabled = true
port = http,https
logpath = /var/log/nginx/access.log
maxretry = 5
[mysqld-auth]
enabled = true
port = 3306
logpath = /var/log/mysql/error.log
maxretry = 5
# Khởi động Fail2Ban
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
# Kiểm tra trạng thái
sudo fail2ban-client status
sudo fail2ban-client status sshd
Bước 8: Bật 2FA Cho SSH (Google Authenticator)
Thêm lớp bảo mật thứ 2: ngoài SSH key, cần mã OTP 6 số từ Google Authenticator:
sudo apt install libpam-google-authenticator -y
# Chạy setup cho user hiện tại
google-authenticator
# Trả lời:
# Do you want authentication tokens to be time-based? → y
# Do you want me to update your ~/.google_authenticator file? → y
# Do you want to disallow multiple uses? → y
# Rate limit: 3 login attempts per 30s → y
# Window size: → y (recommended)
# QUAN TRỌNG: Lưu secret key và emergency codes!
Cấu hình SSH + PAM để bắt buộc 2FA:
sudo nano /etc/ssh/sshd_config
# Thêm/sửa:
ChallengeResponseAuthentication yes
AuthenticationMethods publickey,keyboard-interactive
sudo nano /etc/pam.d/sshd
# Thêm dòng này CUỐI CÙNG (trên @include common-auth):
auth required pam_google_authenticator.so
sudo systemctl restart sshd
Bước 9: Automatic Security Updates
Không phải lúc nào cũng nhớ update thủ công. Cài unattended-upgrades để tự động cài bản vá bảo mật:
sudo apt install unattended-upgrades -y
sudo dpkg-reconfigure -plow unattended-upgrades
# Chọn "Yes"
# Cấu hình chi tiết
sudo nano /etc/apt/apt.conf.d/50unattended-upgrades
# Chỉ cài security updates (an toàn, không break app):
Unattended-Upgrade::Allowed-Origins {
"${distro_id}:${distro_codename}-security";
};
# Tự động reboot nếu cần (lúc 3AM):
Unattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::Automatic-Reboot-Time "03:00";
# Email thông báo sau khi update:
Unattended-Upgrade::Mail "admin@yourdomain.com";
Kiểm tra log tự động update:
cat /var/log/unattended-upgrades/unattended-upgrades.log
Bước 10: Giám Sát & Audit Định Kỳ
Lynis - Security Audit Tool
sudo apt install lynis -y
sudo lynis audit system
# Kết quả cho ra điểm security + danh sách warning cần fix
# Mục tiêu: Hardening index > 80/100
Logwatch - Báo cáo log hàng ngày
sudo apt install logwatch -y
sudo logwatch --detail High --range Today
# Tự động gửi email report hàng ngày (thêm vào crontab):
echo "0 6 * * * /usr/sbin/logwatch --output mail --mailto admin@yourdomain.com --detail High" | sudo crontab -
rkhunter - Quét rootkit & malware
sudo apt install rkhunter -y
sudo rkhunter --check --sk
# Update database và chạy hàng tuần:
echo "0 2 * * 0 /usr/bin/rkhunter --check --cronjob --report-warnings-only" | sudo crontab -
Trước & Sau: Hiệu Quả Bảo Mật
| Chỉ số | Trước bảo mật | Sau bảo mật (10 bước) |
|---|---|---|
| Brute force SSH/ngày | 2,300+ attempts | 0 (block sau 3 lần) |
| Login bằng password | ✅ Có thể | ❌ Bắt buộc SSH key + OTP |
| Root login | ✅ Mở | ❌ Tắt hoàn toàn |
| Port scan detection | ❌ Không có | ✅ CSF/UFW block |
| Auto update bảo mật | ❌ Manual | ✅ Tự động hàng ngày |
| Security audit | ❌ Không kiểm tra | ✅ Lynis + Logwatch + rkhunter |
| Thời gian bị hack trung bình | ~2 phút (password yếu) | Gần như không thể |
| Điểm Lynis Hardening Index | 45-55/100 | 75-85/100 |
Kết Hợp VPS TrumVPS + Bảo Mật = Giải Pháp Toàn Diện
VPS TrumVPS có sẵn các tính năng hỗ trợ bảo mật:
- OS sạch: Template Ubuntu 22.04/24.04 mới nhất, không bloatware
- IP sạch: IP datacenter chưa bị blacklist, phù hợp chạy web/email
- Backup snapshot: Tạo snapshot trước khi chỉnh sửa lớn, rollback nhanh khi cần
- Giá từ 40K/tháng: Có thể tạo VPS riêng làm jump host/bastion để bảo vệ VPS chính
Câu Hỏi Thường Gặp (FAQ)
1. VPS 40K có đủ tài nguyên chạy đủ bảo mật không?
Có. UFW + Fail2Ban tốn ~15MB RAM. CSF tốn ~30MB. Tổng bộ bảo mật cơ bản tốn dưới 50MB RAM — hoàn toàn phù hợp với VPS 1GB RAM của TrumVPS.
2. Tôi quên mất SSH key, làm sao vào lại VPS?
Nếu dùng VPS TrumVPS, bạn có thể dùng VNC Console từ panel quản lý để vào rescue mode và thêm SSH key mới. Đây là lý do nên backup SSH key ra nơi an toàn.
3. Có cần bảo mật nếu VPS chỉ chạy web cá nhân?
Có. Web cá nhân vẫn là mục tiêu của bot — chúng không phân biệt. Một VPS bị hack có thể bị dùng để gửi spam, mining crypto, hoặc tấn công người khác. Bảo mật cơ bản chỉ mất 30 phút nhưng bảo vệ VPS mãi mãi.
4. Fail2Ban vs CSF, nên chọn cái nào?
UFW + Fail2Ban cho VPS cá nhân, nhẹ và dễ cấu hình. CSF cho VPS production hoặc nếu bạn muốn email alert + web UI (CSF có plugin). Nếu không chắc, bắt đầu với UFW + Fail2Ban.
5. Sau khi bảo mật xong, tôi cần làm gì định kỳ?
- Hàng tuần:
sudo apt update && sudo apt upgradecác package không tự động update - Hàng tháng: Chạy
sudo lynis audit systemkiểm tra điểm security - Hàng tháng: Review log Fail2Ban/CSF xem có IP lạ không
- Mỗi 6 tháng: Review lại toàn bộ config, update lên OS version mới nếu cần
6. Tôi nên dùng Ubuntu hay CentOS/AlmaLinux để bảo mật tốt hơn?
Ubuntu được khuyến nghị vì có cộng đồng lớn, package cập nhật nhanh và tài liệu phong phú. Tuy nhiên AlmaLinux/Rocky Linux cũng rất ổn định. Quan trọng là bạn quen với OS nào thì dùng OS đó — bảo mật đúng cách trên OS nào cũng tốt.
Sẵn Sàng Bảo Vệ VPS Của Bạn?
Thuê VPS TrumVPS giá chỉ từ 40K/tháng — đủ tài nguyên chạy toàn bộ 10 bước bảo mật + website + ứng dụng.
Bảo vệ VPS khỏi 99% tấn công với hướng dẫn trên. Bắt đầu ngay hôm nay!
🚀 Thuê VPS TrumVPS Ngay💡 Nhập mã 42089QPI03TI để được giảm 9% tất cả gói VPS!