❤️ AZDIGI chính thức cập nhật hệ thống blog mới hoàn chỉnh. Tuy nhiên có thể một số bài viết bị sai lệch hình ảnh, hãy ấn nút Báo cáo bài viết ở cuối bài để AZDIGI cập nhật trong thời gian nhanh nhất. Chân thành cám ơn.
Bạn vừa mua VPS mới, SSH vào, cài vài thứ rồi chạy app. Nghe quen không? Đa số mọi người làm đúng như vậy, và đa số VPS bị hack cũng bắt đầu từ đó.
📚 Bài này thuộc Serie Quản trị VPS Linux.

Thực tế là VPS mới giống như một căn nhà mở toang cửa giữa phố. Các bot tự động trên internet sẽ scan IP mới trong vòng 10-15 phút đầu tiên. Chúng thử brute-force SSH, quét port, tìm service lỗi thời. Nếu bạn không khóa cửa kịp thì chỉ là vấn đề thời gian.
Bài này mình tổng hợp 15 bước bảo mật thiết yếu cho VPS Linux. Không phải lý thuyết suông, mà là checklist thực tế bạn có thể làm ngay sau khi nhận VPS. Cuối bài có cả script tự động hóa để tiết kiệm thời gian.
Bài viết hướng dẫn trên cả Ubuntu (22.04/24.04) và AlmaLinux (8/9). Mỗi bước mình sẽ ghi lệnh cho cả hai distro.
Bước 1: Update hệ thống ngay lập tức
Việc đầu tiên luôn là update. VPS mới thường chạy image cũ vài tuần hoặc vài tháng. Trong khoảng thời gian đó có thể đã có hàng chục bản vá bảo mật được phát hành.
Ubuntu:
sudo apt update && sudo apt upgrade -y
AlmaLinux:
sudo dnf update -y
Nếu kernel được update, bạn nên reboot lại VPS:
sudo reboot
Sau khi reboot, kiểm tra lại bằng uname -r để chắc chắn kernel mới đã được load.
Bước 2: Tạo user admin, disable root login
Đăng nhập trực tiếp bằng root là thói quen nguy hiểm. Root có toàn quyền trên hệ thống, một lệnh sai cũng đủ phá hỏng mọi thứ. Ngoài ra, bot brute-force luôn nhắm vào user root đầu tiên vì chúng biết chắc user này tồn tại.
Tạo user mới và thêm vào group sudo:
Ubuntu:
# Tạo user mới
adduser deployer
# Thêm vào group sudo
usermod -aG sudo deployer
📖 Xem chi tiết: User, Group và Sudo trên Linux
AlmaLinux:
# Tạo user mới
adduser deployer
# Thêm vào group wheel (tương đương sudo trên RHEL)
usermod -aG wheel deployer
# Đặt password
passwd deployer
Sau khi tạo xong, mở terminal mới và thử SSH bằng user vừa tạo. Chắc chắn đăng nhập được rồi mới tiếp tục bước sau.
Disable root login trong SSH:
sudo nano /etc/ssh/sshd_config
Tìm dòng PermitRootLogin và sửa thành:
PermitRootLogin no
Restart SSH:
sudo systemctl restart sshd
Lưu ý quan trọng: luôn giữ session SSH hiện tại mở khi thay đổi cấu hình SSH. Nếu cấu hình sai, bạn vẫn còn session cũ để sửa lại. Mất session sẽ mất quyền truy cập.
Bước 3: Dùng SSH key thay password
Password dù mạnh đến đâu vẫn có thể bị brute-force (chỉ là cần thời gian). SSH key sử dụng mã hóa bất đối xứng, gần như không thể bị phá bằng brute-force thông thường.
Trên máy local (laptop/PC của bạn), tạo SSH key:
# Tạo key Ed25519 (khuyến nghị)
ssh-keygen -t ed25519 -C "your-email@example.com"
# Hoặc RSA 4096-bit nếu cần tương thích hệ thống cũ
ssh-keygen -t rsa -b 4096 -C "your-email@example.com"
📖 Xem chi tiết: Hướng dẫn tạo và sử dụng SSH Key
Copy public key lên VPS:
ssh-copy-id deployer@your-server-ip
Hoặc copy thủ công nếu ssh-copy-id không khả dụng (ví dụ trên Windows):
# Trên VPS, đăng nhập bằng user deployer
mkdir -p ~/.ssh
chmod 700 ~/.ssh
nano ~/.ssh/authorized_keys
# Paste nội dung file id_ed25519.pub vào đây
chmod 600 ~/.ssh/authorized_keys
Test đăng nhập bằng key từ terminal mới trước khi disable password ở bước 7.
Bước 4: Đổi port SSH
Bước này là optional. Đổi port SSH không thực sự tăng bảo mật (security through obscurity), nhưng nó giảm đáng kể lượng noise từ bot scan tự động. Thay vì hàng nghìn lần thử đăng nhập mỗi ngày, bạn sẽ thấy log sạch hơn nhiều.
sudo nano /etc/ssh/sshd_config
Tìm dòng #Port 22, bỏ comment và đổi thành port khác:
Port 2244
Chọn port trong khoảng 1024-65535, tránh các port phổ biến như 2222, 8022. Và nhớ mở port mới trong firewall TRƯỚC KHI restart SSH, nếu không bạn sẽ tự khóa mình ngoài.
Nếu dùng SELinux trên AlmaLinux, bạn cần cho phép port mới:
# AlmaLinux với SELinux
sudo semanage port -a -t ssh_port_t -p tcp 2244
Mở port trong firewall rồi mới restart SSH:
# Ubuntu (UFW)
sudo ufw allow 2244/tcp
# AlmaLinux (firewalld)
sudo firewall-cmd --permanent --add-port=2244/tcp
sudo firewall-cmd --reload
sudo systemctl restart sshd
Mở terminal mới, thử kết nối qua port mới:
ssh -p 2244 deployer@your-server-ip
Bước 5: Cấu hình firewall
Firewall là lớp phòng thủ cơ bản nhất. Nguyên tắc đơn giản: chỉ mở port nào bạn thực sự cần, đóng hết phần còn lại.
Ubuntu (UFW):
# Cài UFW (thường đã có sẵn trên Ubuntu)
sudo apt install ufw -y
# Cấu hình mặc định: chặn tất cả incoming, cho phép outgoing
sudo ufw default deny incoming
sudo ufw default allow outgoing
# Mở SSH (đổi port nếu bạn đã thay ở bước 4)
sudo ufw allow 22/tcp
# Mở HTTP và HTTPS nếu chạy web server
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# Bật firewall
sudo ufw enable
# Kiểm tra
sudo ufw status verbose
📖 Xem chi tiết: Firewall trên Linux VPS – UFW và firewalld
AlmaLinux (firewalld):
# firewalld thường đã có sẵn trên AlmaLinux
sudo systemctl enable --now firewalld
# Kiểm tra zone hiện tại
sudo firewall-cmd --get-active-zones
# Mở SSH, HTTP, HTTPS
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
# Reload để áp dụng
sudo firewall-cmd --reload
# Kiểm tra
sudo firewall-cmd --list-all
Sau khi bật firewall, thử SSH từ terminal mới để chắc chắn bạn không tự khóa mình.
Bước 6: Cài Fail2ban
Firewall chặn port, nhưng port SSH vẫn phải mở. Fail2ban theo dõi log và tự động ban IP nào đăng nhập sai quá nhiều lần. Nó như một bảo vệ đứng cổng, ai gõ sai password 5 lần thì cấm cửa.
Ubuntu:
sudo apt install fail2ban -y
📖 Xem chi tiết: Cài đặt và cấu hình Fail2ban
AlmaLinux:
sudo dnf install epel-release -y
sudo dnf install fail2ban -y
Tạo file cấu hình local (không sửa file gốc để tránh bị ghi đè khi update):
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local
Thêm hoặc sửa phần [sshd]:
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 5
bantime = 3600
findtime = 600
Trên AlmaLinux, logpath cần đổi thành /var/log/secure thay vì /var/log/auth.log.
sudo systemctl enable --now fail2ban
# Kiểm tra trạng thái
sudo fail2ban-client status sshd
Nếu bạn muốn giải pháp hiện đại hơn, có thể thay Fail2ban bằng CrowdSec. CrowdSec hoạt động tương tự nhưng có thêm cơ chế chia sẻ threat intelligence giữa cộng đồng người dùng.
Bước 7: Disable password authentication
Sau khi đã cấu hình SSH key ở bước 3 và chắc chắn đăng nhập bằng key hoạt động tốt, bước tiếp theo là tắt hoàn toàn đăng nhập bằng password qua SSH.
sudo nano /etc/ssh/sshd_config
📖 Xem chi tiết: SSH Hardening toàn diện – Ed25519, 2FA và nhiều hơn
Sửa các dòng sau:
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no
sudo systemctl restart sshd
Trước khi restart SSH, hãy chắc chắn 100% là bạn đã đăng nhập được bằng SSH key. Nếu tắt password mà key không hoạt động, bạn sẽ bị khóa ngoài VPS. Cách duy nhất để vào lại là qua console/VNC của nhà cung cấp hosting.
Bước 8: Cấu hình auto-update
Bạn không thể ngồi SSH vào VPS mỗi ngày để chạy update. Auto-update giúp hệ thống tự cài bản vá bảo mật mà không cần bạn can thiệp.
Ubuntu (unattended-upgrades):
sudo apt install unattended-upgrades -y
sudo dpkg-reconfigure -plow unattended-upgrades
Kiểm tra cấu hình:
sudo nano /etc/apt/apt.conf.d/50unattended-upgrades
Đảm bảo dòng sau không bị comment (cho phép tự động cài security updates):
"${distro_id}:${distro_codename}-security";
Bạn cũng có thể bật thông báo email khi có update được cài:
Unattended-Upgrade::Mail "your-email@example.com";
AlmaLinux (dnf-automatic):
sudo dnf install dnf-automatic -y
sudo nano /etc/dnf/automatic.conf
Sửa các dòng:
[commands]
upgrade_type = security
apply_updates = yes
sudo systemctl enable --now dnf-automatic.timer
# Kiểm tra timer
sudo systemctl status dnf-automatic.timer
Bước 9: Cài logwatch để theo dõi hệ thống
Log là nơi ghi lại mọi thứ xảy ra trên server. Nhưng đọc log thủ công thì không ai làm hàng ngày. Logwatch tự động phân tích log và gửi bạn bản tóm tắt, giúp phát hiện bất thường mà không cần ngồi đọc hàng nghìn dòng.
Ubuntu:
sudo apt install logwatch -y
📖 Xem thêm: Đọc log hệ thống trên Linux VPS
AlmaLinux:
sudo dnf install logwatch -y
Chạy thử báo cáo:
sudo logwatch --detail Med --range today --output stdout
Cấu hình gửi báo cáo hàng ngày qua email:
sudo nano /etc/logwatch/conf/logwatch.conf
Output = mail
MailTo = your-email@example.com
Detail = Med
Range = yesterday
Logwatch sẽ tự chạy hàng ngày qua cron. Bạn sẽ nhận được email tóm tắt các hoạt động đăng nhập, lỗi service, disk usage và nhiều thông tin khác.
Bước 10: Giới hạn sudo access
Không phải user nào cũng cần quyền sudo. Nguyên tắc least privilege: chỉ cấp quyền tối thiểu cần thiết cho mỗi user.
Kiểm tra ai đang có quyền sudo:
# Ubuntu
getent group sudo
# AlmaLinux
getent group wheel
Nếu cần giới hạn user chỉ chạy được một số lệnh nhất định với sudo, dùng visudo:
sudo visudo
Ví dụ cho phép user webapp chỉ restart nginx:
webapp ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx, /usr/bin/systemctl reload nginx
Với VPS cá nhân, thường bạn chỉ cần 1 user admin có full sudo. Nhưng nếu có nhiều người truy cập (dev team, deploy bot), hãy tạo user riêng và giới hạn quyền cho từng người.
Bước 11: Tắt services không dùng
Mỗi service đang chạy là một cánh cửa tiềm ẩn cho attacker. VPS mới thường có sẵn một số service mà bạn không cần. Tắt chúng đi.
Liệt kê các service đang chạy:
sudo systemctl list-units --type=service --state=running
Một số service thường không cần trên VPS:
cups(dịch vụ in ấn)avahi-daemon(mDNS, dùng cho mạng local)bluetooth(VPS không có bluetooth)postfix(nếu không cần gửi mail từ server)
Tắt và disable service:
# Dừng ngay lập tức
sudo systemctl stop cups
# Disable để không chạy khi reboot
sudo systemctl disable cups
# Hoặc gộp cả hai
sudo systemctl disable --now cups
Đừng tắt bừa bãi service mà bạn không biết. Nếu không chắc service nào đó làm gì, hãy tìm hiểu trước bằng systemctl status tên-service hoặc search Google.
Bước 12: Cấu hình timezone và NTP
Nghe có vẻ đơn giản, nhưng sai timezone và thời gian không đồng bộ gây ra nhiều vấn đề hơn bạn tưởng. Log ghi sai giờ khiến việc debug rất khó. Cron job chạy sai thời điểm. SSL certificate có thể bị reject nếu thời gian lệch quá nhiều.
Đặt timezone:
# Xem timezone hiện tại
timedatectl
# Đặt timezone (ví dụ Asia/Ho_Chi_Minh)
sudo timedatectl set-timezone Asia/Ho_Chi_Minh
# Liệt kê tất cả timezone có sẵn
timedatectl list-timezones | grep Asia
Cấu hình NTP để đồng bộ thời gian:
# Bật NTP sync (dùng systemd-timesyncd hoặc chrony)
sudo timedatectl set-ntp true
# Kiểm tra trạng thái
timedatectl
Trên AlmaLinux, chrony thường được cài sẵn. Kiểm tra:
sudo systemctl status chronyd
chronyc tracking
Bước 13: Backup tự động
Bảo mật tốt đến đâu cũng không thể loại trừ 100% rủi ro. Backup là lưới an toàn cuối cùng. Nếu VPS bị hack, bị xóa dữ liệu, hoặc đơn giản là bạn chạy nhầm lệnh rm -rf, backup giúp bạn khôi phục lại mọi thứ.
📖 Xem chi tiết: Backup VPS Linux – rsync, tar và chiến lược sao lưu
Mình đã có bài hướng dẫn chi tiết về backup tự động trên VPS Linux, bao gồm backup local, backup lên cloud storage (S3, Backblaze B2), và cấu hình cron job. Bạn có thể đọc tại đây:
👉 [Bài 14: Tự động backup VPS Linux](/bai-14-backup-tu-dong-vps-linux/)
Một số nguyên tắc backup cơ bản:
- Backup ít nhất hàng ngày
- Lưu backup ở nơi khác VPS hiện tại (offsite)
- Test restore định kỳ để chắc chắn backup hoạt động
- Giữ nhiều bản backup (rotation), đừng chỉ giữ bản mới nhất
Bước 14: Kiểm tra port mở
Sau khi cấu hình firewall, bạn nên kiểm tra lại xem thực tế có những port nào đang mở. Đôi khi firewall rule không hoạt động như bạn nghĩ, hoặc có service nào đó bind vào port mà bạn quên.
Dùng ss để xem port đang listen:
# Liệt kê tất cả port TCP đang listen
sudo ss -tlnp
# Liệt kê cả TCP và UDP
sudo ss -tulnp
Kết quả sẽ hiển thị dạng:
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=1234,fd=3))
LISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=5678,fd=6))
LISTEN 0 511 0.0.0.0:443 0.0.0.0:* users:(("nginx",pid=5678,fd=7))
Nếu thấy port nào lạ đang listen mà bạn không nhận ra, kiểm tra process nào đang dùng port đó:
sudo lsof -i :port-number
Scan từ bên ngoài bằng nmap (chạy từ máy khác hoặc dùng dịch vụ online):
# Scan từ máy local
nmap -sV your-server-ip
Mục tiêu: chỉ thấy đúng các port bạn cố ý mở (SSH, HTTP, HTTPS). Nếu thấy port lạ, hãy tìm hiểu và đóng lại.
Bước 15: Audit định kỳ với Lynis
15 bước trên giúp bạn có nền tảng bảo mật tốt. Nhưng bảo mật không phải việc làm một lần rồi quên. Hệ thống thay đổi theo thời gian, cấu hình bị drift, package mới được cài thêm. Bạn cần audit định kỳ.
Lynis là công cụ audit bảo mật mã nguồn mở, scan toàn bộ hệ thống và đưa ra báo cáo chi tiết cùng đề xuất cải thiện.
Cài đặt:
Ubuntu:
sudo apt install lynis -y
AlmaLinux:
sudo dnf install lynis -y
Chạy audit:
sudo lynis audit system
Lynis sẽ scan hàng loạt mục: kernel, authentication, networking, storage, firewall, software, file permissions… và đưa ra điểm hardening index. Lần đầu chạy, đừng sợ nếu điểm thấp. Đọc phần suggestions và fix dần.
Mình sẽ có bài riêng trong serie Bảo mật Linux để hướng dẫn chi tiết cách sử dụng Lynis, đọc hiểu báo cáo, và xử lý từng warning. Ở bài này, bạn chỉ cần biết cách cài và chạy scan cơ bản.
Lịch audit gợi ý:
- Sau khi setup xong VPS: chạy scan đầu tiên, lưu làm baseline
- Mỗi tháng: chạy lại 1 lần, so sánh với baseline
- Sau mỗi thay đổi lớn: cài thêm service, update hệ thống, đổi cấu hình
Script tự động hóa setup bảo mật
15 bước ở trên nếu làm thủ công cũng mất kha khá thời gian. Dưới đây là script Bash tự động hóa các bước cơ bản. Script này không thay thế toàn bộ checklist, nhưng giúp bạn hoàn thành phần lớn cấu hình nhanh hơn.
Script này dành cho setup ban đầu. Chạy với quyền root trên VPS mới. Đọc kỹ trước khi chạy, và chỉnh sửa các biến ở đầu script cho phù hợp với nhu cầu.
#!/bin/bash
# VPS Security Setup Script
# Tương thích: Ubuntu 22.04/24.04 & AlmaLinux 8/9
# Chạy với quyền root trên VPS mới
set -euo pipefail
# ============ CẤU HÌNH ============
NEW_USER="deployer"
SSH_PORT="2244"
TIMEZONE="Asia/Ho_Chi_Minh"
# ==================================
echo "=== VPS Security Setup ==="
# Detect distro
if [ -f /etc/os-release ]; then
. /etc/os-release
DISTRO=$ID
else
echo "Không xác định được distro. Thoát."
exit 1
fi
echo "[1/10] Update hệ thống..."
if [ "$DISTRO" = "ubuntu" ] || [ "$DISTRO" = "debian" ]; then
apt update && apt upgrade -y
elif [ "$DISTRO" = "almalinux" ] || [ "$DISTRO" = "rocky" ] || [ "$DISTRO" = "centos" ]; then
dnf update -y
fi
echo "[2/10] Tạo user $NEW_USER..."
if ! id "$NEW_USER" &>/dev/null; then
adduser "$NEW_USER"
if [ "$DISTRO" = "ubuntu" ] || [ "$DISTRO" = "debian" ]; then
usermod -aG sudo "$NEW_USER"
else
usermod -aG wheel "$NEW_USER"
fi
echo "User $NEW_USER đã tạo. Hãy đặt password thủ công nếu cần: passwd $NEW_USER"
else
echo "User $NEW_USER đã tồn tại, bỏ qua."
fi
echo "[3/10] Tạo thư mục .ssh cho $NEW_USER..."
USER_HOME=$(eval echo "~$NEW_USER")
mkdir -p "$USER_HOME/.ssh"
chmod 700 "$USER_HOME/.ssh"
touch "$USER_HOME/.ssh/authorized_keys"
chmod 600 "$USER_HOME/.ssh/authorized_keys"
chown -R "$NEW_USER":"$NEW_USER" "$USER_HOME/.ssh"
echo "Hãy paste public key vào: $USER_HOME/.ssh/authorized_keys"
echo "[4/10] Cấu hình SSH..."
SSHD_CONFIG="/etc/ssh/sshd_config"
cp "$SSHD_CONFIG" "${SSHD_CONFIG}.bak.$(date +%Y%m%d)"
# Đổi port
sed -i "s/^#*Port .*/Port $SSH_PORT/" "$SSHD_CONFIG"
# Disable root login
sed -i "s/^#*PermitRootLogin .*/PermitRootLogin no/" "$SSHD_CONFIG"
# Disable password auth
sed -i "s/^#*PasswordAuthentication .*/PasswordAuthentication no/" "$SSHD_CONFIG"
echo "[5/10] Cấu hình firewall..."
if [ "$DISTRO" = "ubuntu" ] || [ "$DISTRO" = "debian" ]; then
apt install ufw -y
ufw default deny incoming
ufw default allow outgoing
ufw allow "$SSH_PORT"/tcp
ufw allow 80/tcp
ufw allow 443/tcp
echo "y" | ufw enable
else
systemctl enable --now firewalld
firewall-cmd --permanent --add-port="$SSH_PORT"/tcp
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload
# SELinux: cho phép SSH port mới
if command -v semanage &>/dev/null; then
semanage port -a -t ssh_port_t -p tcp "$SSH_PORT" 2>/dev/null || true
fi
fi
echo "[6/10] Cài Fail2ban..."
if [ "$DISTRO" = "ubuntu" ] || [ "$DISTRO" = "debian" ]; then
apt install fail2ban -y
else
dnf install epel-release -y
dnf install fail2ban -y
fi
cat > /etc/fail2ban/jail.local << EOF
[sshd]
enabled = true
port = $SSH_PORT
maxretry = 5
bantime = 3600
findtime = 600
EOF
systemctl enable --now fail2ban
echo "[7/10] Cấu hình auto-update..."
if [ "$DISTRO" = "ubuntu" ] || [ "$DISTRO" = "debian" ]; then
apt install unattended-upgrades -y
echo 'APT::Periodic::Update-Package-Lists "1";' > /etc/apt/apt.conf.d/20auto-upgrades
echo 'APT::Periodic::Unattended-Upgrade "1";' >> /etc/apt/apt.conf.d/20auto-upgrades
else
dnf install dnf-automatic -y
sed -i 's/^apply_updates = .*/apply_updates = yes/' /etc/dnf/automatic.conf
sed -i 's/^upgrade_type = .*/upgrade_type = security/' /etc/dnf/automatic.conf
systemctl enable --now dnf-automatic.timer
fi
echo "[8/10] Cấu hình timezone và NTP..."
timedatectl set-timezone "$TIMEZONE"
timedatectl set-ntp true
echo "[9/10] Tắt services không cần thiết..."
for svc in cups avahi-daemon bluetooth; do
if systemctl is-active --quiet "$svc" 2>/dev/null; then
systemctl disable --now "$svc"
echo "Đã tắt: $svc"
fi
done
echo "[10/10] Cài Lynis..."
if [ "$DISTRO" = "ubuntu" ] || [ "$DISTRO" = "debian" ]; then
apt install lynis -y
else
dnf install lynis -y
fi
echo ""
echo "========================================="
echo " Setup hoàn tất!"
echo "========================================="
echo ""
echo "QUAN TRỌNG - Kiểm tra trước khi đóng session này:"
echo " 1. Mở terminal mới"
echo " 2. SSH bằng key: ssh -p $SSH_PORT $NEW_USER@your-server-ip"
echo " 3. Nếu KHÔNG đăng nhập được, dùng session này để sửa lại"
echo ""
echo "Các bước cần làm thủ công:"
echo " - Paste SSH public key vào $USER_HOME/.ssh/authorized_keys"
echo " - Test SSH bằng key trước khi restart sshd"
echo " - Chạy: sudo systemctl restart sshd"
echo " - Chạy Lynis scan: sudo lynis audit system"
echo " - Cấu hình backup (xem bài 14)"
echo "========================================="
Lưu script và chạy:
# Lưu script
nano /root/secure-vps.sh
# Cấp quyền chạy
chmod +x /root/secure-vps.sh
# Chạy
sudo ./root/secure-vps.sh
Script cố ý KHÔNG tự restart SSH. Lý do: bạn cần paste SSH key vào authorized_keys và test đăng nhập bằng key trước. Nếu script tự restart SSH mà chưa có key, bạn sẽ bị khóa ngoài.
Checklist tổng hợp
Dưới đây là checklist để bạn đối chiếu. Mỗi lần setup VPS mới, đi qua danh sách này và đánh dấu từng bước:
| STT | Bước bảo mật | Trạng thái |
|---|---|---|
| 1 | Update hệ thống | ☐ |
| 2 | Tạo user admin, disable root login SSH | ☐ |
| 3 | Cấu hình SSH key | ☐ |
| 4 | Đổi port SSH (optional) | ☐ |
| 5 | Cấu hình firewall (UFW / firewalld) | ☐ |
| 6 | Cài Fail2ban / CrowdSec | ☐ |
| 7 | Disable password authentication | ☐ |
| 8 | Cấu hình auto-update | ☐ |
| 9 | Cài logwatch / monitoring | ☐ |
| 10 | Giới hạn sudo access | ☐ |
| 11 | Tắt services không dùng | ☐ |
| 12 | Cấu hình timezone và NTP | ☐ |
| 13 | Backup tự động | ☐ |
| 14 | Kiểm tra port mở | ☐ |
| 15 | Audit định kỳ (Lynis) | ☐ |
Bài viết liên quan
Các bài hướng dẫn chi tiết cho từng bước bảo mật:
- Tạo và sử dụng SSH Key
- SSH Hardening toàn diện – Ed25519, 2FA
- Firewall trên Linux VPS – UFW và firewalld
- Cài đặt Fail2ban trên Ubuntu
- Đọc log hệ thống – journalctl
- Backup VPS Linux – rsync, tar
- Bot cảnh báo đăng nhập SSH qua Telegram
- Script Monitor tài nguyên VPS qua Telegram
Tổng kết
15 bước trong checklist này không phải là tất cả những gì bạn có thể làm để bảo mật VPS. Nhưng đây là nền tảng. Hoàn thành xong 15 bước này, VPS của bạn đã an toàn hơn phần lớn VPS ngoài kia.
Một số điểm mình muốn nhấn mạnh:
- Thứ tự quan trọng. Luôn test SSH trước khi thay đổi cấu hình xác thực. Mất quyền truy cập SSH là vấn đề lớn nhất bạn có thể tự gây ra.
- Bảo mật là quá trình liên tục. Không phải setup một lần rồi quên. Chạy Lynis định kỳ, đọc log, update hệ thống.
- Backup là bảo mật. Khi mọi thứ thất bại, backup là thứ duy nhất cứu bạn.
Trong serie Bảo mật Linux sắp tới, mình sẽ đi sâu hơn vào từng chủ đề: hardening SSH nâng cao, cấu hình CrowdSec, sử dụng Lynis để audit chi tiết, và nhiều hơn nữa.
Có thể bạn cần xem thêm
- Bảo vệ SSH toàn diện trên Linux VPS
- Lynis - Tự kiểm tra bảo mật Linux VPS
- Firewall nâng cao trên Linux VPS - UFW và firewalld cho production
- Troubleshooting VPS Linux - Cách xủ lý sự cố VPS phổ biến
- Firewall trên Linux VPS - UFW và firewalld từ cơ bản đến thực tế
- Backup và phục hồi sự cố cho VPS Linux - Kế hoạch toàn diện
Về tác giả
Trần Thắng
Chuyên gia tại AZDIGI với nhiều năm kinh nghiệm trong lĩnh vực web hosting và quản trị hệ thống.