Chuyển đến nội dung chính

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.

Bảo mật máy chủ Linux VPS

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:

bash
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:

bash
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:

bash
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:

bash
# 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:

bash
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):

bash
ssh-keygen -t ed25519 -C "my-vps-key"

Bước 3.2: Sao chép Public Key lên máy chủ

bash
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ủ:

bash
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):

ini
# Đổ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!

bash
# 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.

bash
# 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ở:

bash
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:

bash
sudo apt install -y fail2ban

Tạo file cấu hình tùy chỉnh /etc/fail2ban/jail.local:

bash
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:

bash
sudo systemctl restart fail2ban

Kiểm tra các IP đang bị giam (Banned IP):

bash
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, nosuidnodev:

Mở file /etc/fstab:

bash
sudo nano /etc/fstab

Thêm dòng sau vào cuối file:

text
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:

bash
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:

bash
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:

bash
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ể:

bash
# 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ụcTrạng thái khuyến nghịCông cụ thực hiện
Tài khoản RootVô hiệu hóa đăng nhập từ xasshd_config: PermitRootLogin no
Mật khẩu SSHTắt hoàn toàn, chỉ dùng SSH Keysshd_config: PasswordAuthentication no
Cổng SSHĐổi sang cổng phi tiêu chuẩn (>1024)sshd_config: Port 2222
Tường lửaChặn toàn bộ cổng vào trừ cổng dịch vụUFW
Chống Brute-forceTự động ban IP nhập saiFail2ban
Vá lỗi bảo mậtCập nhật tự động hàng ngàyUnattended-Upgrades
Bảo vệ RAM ảoGắn cờ noexec cho /dev/shm/etc/fstab
Kiểm toán định kỳQuét lỗ hổng hàng tuầnLynis

Á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.

💬

Thảo luận & Bình luận

Đă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.