Bảo mật máy chủ Linux VPS: Cẩm nang toàn diện 8 bước chống tấn công
Hướng dẫn thực chiến từng bước thiết lập bảo mật máy chủ Linux VPS mới: Vô hiệu hóa mật khẩu SSH, thiết lập SSH Key Ed25519, cấu hình Fail2ban, tường lửa UFW và cập nhật tự động Unattended-Upgrades.

Tại sao bảo mật máy chủ VPS là nhiệm vụ sống còn?
Ngay sau khi bạn khởi tạo một máy chủ ảo (VPS) hoặc Dedicated Server có IP tĩnh công khai, các botnet tự động trên khắp thế giới sẽ bắt đầu quét cổng và thực hiện hàng chục nghìn lượt tấn công brute-force mỗi ngày vào cổng SSH (cổng 22 mặc định).
Nếu bạn giữ nguyên cấu hình mặc định (dùng tài khoản root với mật khẩu dạng chữ), việc máy chủ bị chiếm quyền điều khiển (compromised), bị cài đặt mã độc đào tiền ảo hoặc biến thành botnet phát tán thư rác chỉ là vấn đề thời gian.
Trong bài viết này, chúng tôi sẽ hướng dẫn bạn quy trình 8 bước chuẩn hóa bảo mật máy chủ Linux (Hardening Checklist) được áp dụng tại các tổ chức công nghệ hàng đầu, giúp biến máy chủ của bạn thành một "pháo đài" kiên cố trước mọi cuộc tấn công tự động.
1. Cập nhật hệ thống và kích hoạt bản vá tự động
Bước đầu tiên sau khi nhận VPS là cập nhật toàn bộ các gói phần mềm và hạt nhân hệ điều hành (Kernel) lên phiên bản mới nhất:
sudo apt update && sudo apt upgrade -y
Kích hoạt tính năng tự động cập nhật bản vá bảo mật (Unattended Upgrades)
Để máy chủ tự động cài đặt các bản vá lỗi bảo mật khẩn cấp từ Canonical mà không cần bạn can thiệp thủ công:
sudo apt install -y unattended-upgrades
sudo dpkg-reconfigure --priority=low unattended-upgrades
Cấu hình file /etc/apt/apt.conf.d/50unattended-upgrades để tự động dọn dẹp các gói thừa và tự khởi động lại vào ban đêm (3h sáng) nếu cần thiết:
sudo tee -a /etc/apt/apt.conf.d/50unattended-upgrades << 'EOF'
Unattended-Upgrade::Remove-Unused-Dependencies "true";
Unattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::Automatic-Reboot-Time "03:00";
EOF
2. Tạo tài khoản người dùng riêng (Sudo User) và khóa tài khoản Root
Không bao giờ làm việc hàng ngày trực tiếp bằng tài khoản root. Thay vào đó, hãy tạo một user riêng và cấp quyền sudo:
# Tạo user mới (ví dụ: devadmin)
sudo adduser devadmin
# Thêm user vào nhóm sudo
sudo usermod -aG sudo devadmin
Kiểm tra chuyển sang user mới để đảm bảo quyền sudo hoạt động chuẩn:
su - devadmin
sudo whoami
# Kết quả hiển thị 'root' là thành công
3. Khóa xác thực bằng Mật khẩu và Chỉ dùng SSH Key (Ed25519)
Mật khẩu dù dài đến đâu vẫn có nguy cơ bị lộ hoặc bị quét vét cạn. Phương thức xác thực tối ưu nhất hiện nay là sử dụng SSH Key thuật toán Ed25519.
Bước 3.1: Tạo SSH Key trên máy cá nhân của bạn (Local machine)
Trên máy tính của bạn (macOS, Linux hoặc Windows PowerShell):
ssh-keygen -t ed25519 -C "my-vps-key"
Bước 3.2: Sao chép Public Key lên máy chủ
ssh-copy-id -i ~/.ssh/id_ed25519.pub devadmin@<IP_MÁY_CHỦ>
Bước 3.3: Vô hiệu hóa đăng nhập mật khẩu và Root Login
Mở file cấu hình SSH trên máy chủ:
sudo nano /etc/ssh/sshd_config
Tìm và chỉnh sửa các dòng sau (đảm bảo không bị comment # ở đầu):
# Đổi cổng SSH mặc định (ví dụ: 2222 thay vì 22) để giảm 99% lượng bot quét tự động
Port 2222
# Cấm hoàn toàn root đăng nhập từ xa
PermitRootLogin no
# Cấm đăng nhập bằng mật khẩu thường (chỉ chấp nhận SSH Key)
PasswordAuthentication no
PermitEmptyPasswords no
# Tắt xác thực Challenge Response
KbdInteractiveAuthentication no
# Giới hạn thời gian đăng nhập và số lần thử
LoginGraceTime 30
MaxAuthTries 3
!WARNING Trước khi khởi động lại dịch vụ SSH, hãy mở thêm một cửa sổ Terminal mới và thử kết nối qua SSH Key với cổng mới để chắc chắn bạn không bị khóa ở ngoài!
# Kiểm tra cú pháp cấu hình
sudo sshd -t
# Khởi động lại dịch vụ SSH
sudo systemctl restart ssh
4. Thiết lập Tường lửa nghiêm ngặt với UFW
Ubuntu tích hợp sẵn công cụ quản lý tường lửa UFW (Uncomplicated Firewall). Hãy áp dụng quy tắc bảo mật chuẩn: Chặn toàn bộ chiều vào, cho phép toàn bộ chiều ra, và chỉ mở các cổng dịch vụ thực sự cần thiết.
# Thiết lập chính sách mặc định
sudo ufw default deny incoming
sudo ufw default allow outgoing
# Mở cổng SSH (nhớ thay bằng cổng bạn đã đổi ở bước 3)
sudo ufw allow 2222/tcp comment 'Custom SSH'
# Mở cổng Web nếu máy chủ chạy Website
sudo ufw allow 80/tcp comment 'HTTP'
sudo ufw allow 443/tcp comment 'HTTPS'
# Kích hoạt tường lửa
sudo ufw enable
Kiểm tra trạng thái các cổng đang mở:
sudo ufw status verbose
5. Cài đặt và cấu hình Fail2ban chống Brute-Force
Fail2ban là công cụ tự động quét log hệ thống và chặn IP (bằng cách thêm luật vào tường lửa) đối với bất kỳ kẻ tấn công nào nhập sai thông tin xác thực quá số lần quy định.
Cài đặt Fail2ban:
sudo apt install -y fail2ban
Tạo file cấu hình tùy chỉnh /etc/fail2ban/jail.local:
sudo tee /etc/fail2ban/jail.local << 'EOF'
[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5
banaction = ufw
[sshd]
enabled = true
port = 2222
mode = aggressive
logpath = %(sshd_log)s
EOF
Khởi động lại Fail2ban:
sudo systemctl restart fail2ban
Kiểm tra các IP đang bị giam (Banned IP):
sudo fail2ban-client status sshd
6. Bảo vệ bộ nhớ chia sẻ (/dev/shm)
Thư mục /dev/shm là bộ nhớ tạm chia sẻ giữa các tiến trình, thường bị hacker lợi dụng để biên dịch và thực thi mã độc ẩn danh. Hãy gắn thêm cờ noexec, nosuid và nodev:
Mở file /etc/fstab:
sudo nano /etc/fstab
Thêm dòng sau vào cuối file:
tmpfs /dev/shm tmpfs defaults,noexec,nosuid,nodev 0 0
Áp dụng thay đổi ngay mà không cần khởi động lại:
sudo mount -o remount /dev/shm
7. Cấu hình bảo mật nhân Linux qua sysctl (Kernel Hardening)
Tinh chỉnh các thông số mạng của nhân Linux để chống tấn công giả mạo gói tin IP Spoofing, từ chối dịch vụ SYN Flood và Smurf Attacks:
sudo tee /etc/sysctl.d/99-security.conf << 'EOF'
# Chống tấn công SYN Flood
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 2048
net.ipv4.tcp_synack_retries = 2
# Chống giả mạo gói tin IP Spoofing
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
# Không chấp nhận chuyển hướng gói tin ICMP
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv6.conf.all.accept_redirects = 0
net.ipv6.conf.default.accept_redirects = 0
# Tắt chức năng Send ICMP Redirects
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
# Phớt lờ các yêu cầu Ping Broadcast
net.ipv4.icmp_echo_ignore_broadcasts = 1
# Giới hạn ghi log lỗi giả mạo
net.ipv4.icmp_ignore_bogus_error_responses = 1
EOF
Kích hoạt cấu hình ngay:
sudo sysctl -p /etc/sysctl.d/99-security.conf
8. Quét mã độc và theo dõi thay đổi tệp tin với Lynis
Lynis là công cụ kiểm toán bảo mật (Security Auditing) mã nguồn mở hàng đầu dành cho Linux. Nó sẽ quét toàn bộ hệ thống và đưa ra điểm số bảo mật (Hardening Index) kèm hướng dẫn khắc phục cụ thể:
# Cài đặt Lynis
sudo apt install -y lynis
# Tiến hành quét toàn bộ hệ thống
sudo lynis audit system
Sau khi quét xong, hãy xem tóm tắt tại /var/log/lynis-report.dat và kiểm tra mục Suggestions để hoàn thiện các lỗ hổng còn sót lại.
Bảng tổng kết Checklist bảo mật
| Hạng mục | Trạng thái khuyến nghị | Công cụ thực hiện |
|---|---|---|
| Tài khoản Root | Vô hiệu hóa đăng nhập từ xa | sshd_config: PermitRootLogin no |
| Mật khẩu SSH | Tắt hoàn toàn, chỉ dùng SSH Key | sshd_config: PasswordAuthentication no |
| Cổng SSH | Đổi sang cổng phi tiêu chuẩn (>1024) | sshd_config: Port 2222 |
| Tường lửa | Chặn toàn bộ cổng vào trừ cổng dịch vụ | UFW |
| Chống Brute-force | Tự động ban IP nhập sai | Fail2ban |
| Vá lỗi bảo mật | Cập nhật tự động hàng ngày | Unattended-Upgrades |
| Bảo vệ RAM ảo | Gắn cờ noexec cho /dev/shm | /etc/fstab |
| Kiểm toán định kỳ | Quét lỗ hổng hàng tuần | Lynis |
Áp dụng đầy đủ 8 bước trên sẽ giảm thiểu tới 99.9% rủi ro bị tấn công tự động, giúp máy chủ của bạn luôn vận hành ổn định và an toàn tuyệt đối.



Đăng nhập bằng tài khoản GitHub để đặt câu hỏi hoặc đóng góp ý kiến cho bài viết.