Hướng Dẫn Bảo Mật Server Toàn Diện – 10 Biện Pháp Cần Thiết Cho Máy Chủ Linux

Published on
Thuộc danh mục: Kiến Thức Hosting|Đăng bởi: Lê Thanh Giang|||17 min read
Facebook share iconLinkedIn share iconTwitter share iconPinterest share iconTumblr share icon
Hướng Dẫn Bảo Mật Server – Các Biện Pháp Cần Thiết Cho Máy Chủ Linux 2026

Bảo mật server là một trong những kỹ năng quan trọng nhất mà bất kỳ quản trị viên hệ thống nào cũng cần nắm vững. Một máy chủ Linux không được bảo vệ đúng cách có thể trở thành mục tiêu dễ dàng cho tin tặc — từ tấn công brute force SSH, khai thác lỗ hổng dịch vụ, cho đến cài cắm mã độc đào tiền ảo hoặc gửi thư rác.

Theo thống kê từ ShodanCensys, có hơn 30 triệu máy chủ Linux kết nối Internet công cộng, và một tỷ lệ đáng kể trong số đó vẫn sử dụng cấu hình mặc định — root login bật, password auth bật, firewall không được kích hoạt. Đây chính là cánh cửa mở cho các cuộc tấn công tự động quét diện rộng.

Bài viết này sẽ hướng dẫn bạn 10 biện pháp bảo mật server thiết yếu, từ cơ bản đến nâng cao, áp dụng được cho mọi bản phân phối Linux phổ biến (Ubuntu, Debian, CentOS, Rocky Linux, AlmaLinux). Nếu bạn chưa quen với dòng lệnh, hãy tham khảo trước các lệnh Linux cơ bản cho người mới quản trị hosting.

1. SSH Hardening — Củng Cố Cổng Vào Server

SSH (Secure Shell) là giao thức quản trị server từ xa phổ biến nhất. Nếu SSH bị xâm phạm, tin tặc có toàn quyền kiểm soát máy chủ. Đây là bước đầu tiên và quan trọng nhất trong bảo mật server.

1.1 Vô Hiệu Hóa Đăng Nhập Root

Người dùng root có toàn quyền trên hệ thống. Thay vì đăng nhập trực tiếp bằng root, hãy tạo một tài khoản sudo và chỉ dùng root khi thực sự cần:

# Tạo user mới
sudo adduser quantri

# Thêm vào nhóm sudo
sudo usermod -aG sudo quantri

# Kiểm tra
su - quantri
sudo whoami  # Kết quả: root

Sau đó tắt đăng nhập root trong SSH:

sudo nano /etc/ssh/sshd_config
# Sửa: PermitRootLogin no

1.2 Xác Thực Bằng SSH Key Thay Vì Mật Khẩu

SSH key an toàn hơn mật khẩu rất nhiều nhờ sử dụng cặp khóa bất đối xứng 2048 hoặc 4096 bit:

# Trên máy tính cá nhân (không phải server)
ssh-keygen -t rsa -b 4096 -C "email@example.com"

# Copy public key lên server
ssh-copy-id quantri@your-server-ip

# Kiểm tra đã copy thành công
ssh quantri@your-server-ip

Sau đó tắt xác thực bằng mật khẩu trong SSH:

sudo nano /etc/ssh/sshd_config
# Sửa các dòng:
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no

# Restart SSH
sudo systemctl restart sshd

Cảnh báo: Trước khi tắt PasswordAuthentication, hãy chắc chắn bạn đã kiểm tra đăng nhập bằng SSH key thành công. Nếu không, bạn sẽ mất quyền truy cập server!

1.3 Đổi Cổng SSH Mặc Định

Cổng 22 là mục tiêu quét đầu tiên của bot tấn công. Đổi sang cổng khác (ví dụ 2222) giúp giảm đáng kể lượng log fail:

sudo nano /etc/ssh/sshd_config
# Tìm dòng: #Port 22
# Sửa thành: Port 2222

# Cập nhật firewall (nếu dùng UFW)
sudo ufw allow 2222/tcp
sudo ufw delete allow 22/tcp

sudo systemctl restart sshd

1.4 Giới Hạn Người Dùng Được Phép SSH

Chỉ cho phép một số user nhất định đăng nhập SSH:

sudo nano /etc/ssh/sshd_config
# Thêm dòng:
AllowUsers quantri devops admin

sudo systemctl restart sshd

Nếu bạn dùng PuTTY trên Windows để SSH vào server, hãy xem thêm hướng dẫn tải và sử dụng PuTTY miễn phí để cấu hình SSH key đúng cách.

2. Cấu Hình Tường Lửa (Firewall)

Tường lửa là lớp bảo vệ đầu tiên cho server, kiểm soát luồng dữ liệu vào-ra dựa trên port, giao thức và địa chỉ IP.

2.1 Sử Dụng UFW (Uncomplicated Firewall) — Ubuntu/Debian

UFW là công cụ đơn giản hóa iptables, phù hợp cho người mới:

# Cài đặt (Ubuntu thường có sẵn)
sudo apt update
sudo apt install ufw -y

# Mặc định chặn mọi kết nối đến
sudo ufw default deny incoming
sudo ufw default allow outgoing

# Cho phép SSH (nếu đã đổi port thì dùng port mới)
sudo ufw allow ssh
# Hoặc: sudo ufw allow 2222/tcp

# Cho phép HTTP/HTTPS
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

# Bật UFW
sudo ufw enable

# Kiểm tra trạng thái
sudo ufw status verbose

2.2 Sử Dụng firewalld — CentOS/RHEL/Rocky Linux

# Cài đặt
sudo dnf install firewalld -y
sudo systemctl enable --now firewalld

# Cho phép dịch vụ
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload

# Kiểm tra
sudo firewall-cmd --list-all

Bạn có thể tìm hiểu thêm về cách triển khai web server an toàn trong hướng dẫn cài đặt Nginx trên VPS bao gồm cả cấu hình firewall.

3. Fail2ban — Tự Động Chặn Brute Force

Fail2ban là công cụ quét log server, phát hiện các lần đăng nhập thất bại liên tiếp và tự động thêm rule firewall để chặn IP tấn công.

# Cài đặt
sudo apt install fail2ban -y    # Ubuntu/Debian
# sudo dnf install fail2ban -y  # CentOS/RHEL

# Copy file cấu hình
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

# Cấu hình
sudo nano /etc/fail2ban/jail.local

Thêm hoặc chỉnh sửa các thông số:

[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5

[sshd]
enabled = true
port = ssh
logpath = %(sshd_log)s
maxretry = 3

Bạn có thể cấu hình fail2ban cho nhiều dịch vụ khác — web server (Apache/Nginx), Postfix, Dovecot, vsftpd...

# Khởi động
sudo systemctl enable --now fail2ban

# Kiểm tra trạng thái
sudo fail2ban-client status
sudo fail2ban-client status sshd

4. Cập Nhật Bảo Mật Tự Động

Phần mềm lỗi thời với lỗ hổng bảo mật đã biết là nguyên nhân hàng đầu khiến server bị xâm nhập. Cập nhật kịp thời là biện pháp đơn giản nhưng cực kỳ hiệu quả.

4.1 Cập Nhật Hệ Thống Thủ Công

sudo apt update && sudo apt upgrade -y          # Ubuntu/Debian
# sudo dnf update -y                            # CentOS/RHEL

Kiểm tra các bản cập nhật bảo mật riêng:

sudo apt list --upgradable 2>/dev/null | grep -i security

4.2 Cấu Hình Cập Nhật Tự Động (unattended-upgrades)

sudo apt install unattended-upgrades -y
sudo dpkg-reconfigure --priority=low unattended-upgrades
# Chọn "Yes" khi được hỏi

Kiểm tra cấu hình:

sudo nano /etc/apt/apt.conf.d/50unattended-upgrades

Đảm bảo các dòng sau được bỏ comment:

"origin=Ubuntu,archive=jammy-security";
"origin=Debian,archive=bookworm-security";

Lưu ý: Với các server production, bạn nên có môi trường staging để kiểm tra bản cập nhật trước khi áp dụng lên server thật.

Nếu bạn đang tìm hiểu về VPS, hãy xem VPS là gì? để hiểu rõ hơn về môi trường server bạn đang quản lý.

5. Quản Lý Người Dùng Và Phân Quyền

5.1 Nguyên Tắc Least Privilege

Mỗi người dùng chỉ nên có quyền tối thiểu cần thiết để thực hiện công việc:

# Tạo user với home directory
sudo adduser tennguoidung

# Thêm vào nhóm cụ thể thay vì sudo
sudo usermod -aG www-data tennguoidung  # Ví dụ: nhóm web

# Xóa user không còn sử dụng
sudo deluser tennguoidung
sudo rm -rf /home/tennguoidung

5.2 Phân Quyền File An Toàn

# File: 644 (rw-r--r--)
# Thư mục: 755 (rwxr-xr-x)

# Thiết lập mặc định an toàn
echo "umask 027" >> ~/.bashrc

# Ví dụ cho web directory
sudo chown -R www-data:www-data /var/www/html
sudo find /var/www/html -type d -exec chmod 755 {} \;
sudo find /var/www/html -type f -exec chmod 644 {} \;

5.3 Khóa Tài Khoản Không Sử Dụng

# Khóa tài khoản
sudo passwd -l tennguoidung

# Thay đổi shell thành /usr/sbin/nologin
sudo usermod -s /usr/sbin/nologin tennguoidung

6. Bảo Mật Các Dịch Vụ Phổ Biến

6.1 MySQL/MariaDB

# Chạy script bảo mật
sudo mysql_secure_installation

Script này sẽ hướng dẫn bạn:

  • Đặt mật khẩu root
  • Xóa anonymous user
  • Tắt remote root login
  • Xóa database test
  • Reload privilege table

Tạo user riêng cho từng ứng dụng thay vì dùng root:

CREATE USER 'tenapp'@'localhost' IDENTIFIED BY 'matkhau_manh';
GRANT ALL PRIVILEGES ON ten_db.* TO 'tenapp'@'localhost';
FLUSH PRIVILEGES;

6.2 PHP

Cấu hình PHP an toàn trong php.ini:

disable_functions = exec,passthru,shell_exec,system,popen,proc_open,curl_exec,curl_multi_exec
open_basedir = /var/www/html:/tmp
expose_php = Off
display_errors = Off
allow_url_fopen = Off
allow_url_include = Off

6.3 Nginx / Apache

Thêm security headers trong cấu hình web server:

# Nginx — trong server block
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Permissions-Policy "geolocation=(), microphone=(), camera=()" always;

Tắt hiển thị phiên bản server:

# Nginx: trong http block
server_tokens off;
# Apache: trong httpd.conf hoặc .htaccess
ServerTokens Prod
ServerSignature Off

Nếu bạn muốn tìm hiểu sâu hơn, xem thêm Nginx là gì?Apache là gì? để hiểu rõ cách cấu hình bảo mật cho từng loại web server.

7. Kernel Hardening — Củng Cố Nhân Linux

Tinh chỉnh tham số kernel thông qua sysctl giúp bảo vệ server khỏi nhiều dạng tấn công mạng:

sudo nano /etc/sysctl.d/99-security.conf

Thêm các dòng sau:

# Chống IP Spoofing
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1

# Không chuyển tiếp IP (nếu không cần làm router)
net.ipv4.ip_forward = 0
net.ipv6.conf.all.forwarding = 0

# Chống SYN Flood
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_syn_retries = 2
net.ipv4.tcp_synack_retries = 2

# Không phản hồi ICMP redirect
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.all.send_redirects = 0

# Bảo vệ khỏi time-wait assassination
net.ipv4.tcp_rfc1337 = 1

# Tắt source routing
net.ipv4.conf.all.accept_source_route = 0

Áp dụng ngay mà không cần reboot:

sudo sysctl -p /etc/sysctl.d/99-security.conf

8. Phát Hiện Xâm Nhập Và Kiểm Tra Bảo Mật

8.1 Lynis — Công Cụ Audit Bảo Mật Toàn Diện

Lynis quét toàn bộ hệ thống, phát hiện điểm yếu và đưa ra gợi ý khắc phục:

# Cài đặt
sudo apt install lynis -y

# Chạy audit
sudo lynis audit system

# Xem gợi ý
sudo lynis show suggestions

Kết quả đầu ra bao gồm điểm bảo mật tổng thể và danh sách chi tiết các khuyến nghị.

8.2 RKHunter — Phát Hiện Rootkit

Rootkit là phần mềm độc hại ẩn sâu trong hệ thống, thường không bị phát hiện bởi antivirus thông thường:

sudo apt install rkhunter -y

# Cập nhật database
sudo rkhunter --propupd

# Kiểm tra
sudo rkhunter --check --skip-keypress

8.3 AIDE — Kiểm Tra Toàn Vẹn File

AIDE (Advanced Intrusion Detection Environment) tạo cơ sở dữ liệu checksum của các file quan trọng và cảnh báo khi có thay đổi:

sudo apt install aide -y

# Khởi tạo database
sudo aideinit
sudo mv /var/lib/aide/aide.db.new /var/lib/aide/aide.db

# Kiểm tra hàng ngày
sudo aide --check

Kết hợp với bảo mật website để có lớp bảo vệ toàn diện cả ở tầng ứng dụng lẫn hệ điều hành.

9. Giám Sát Log Và Cảnh Báo Sớm

9.1 Logrotate — Quản Lý Dung Lượng Log

Log server có thể chiếm hàng GB dung lượng ổ cứng nếu không được xoay vòng:

sudo nano /etc/logrotate.d/custom

Thêm cấu hình:

/var/log/*.log {
    weekly
    rotate 4
    compress
    delaycompress
    missingok
    notifempty
    postrotate
        systemctl reload rsyslog
    endscript
}

9.2 Auditd — Giám Sát Hành Vi Hệ Thống

auditd ghi lại tất cả hành động trên hệ thống — ai đã truy cập file nào, lệnh gì đã chạy:

sudo apt install auditd -y
sudo systemctl enable --now auditd

# Theo dõi thay đổi file cấu hình quan trọng
sudo auditctl -w /etc/ssh/sshd_config -p wa -k ssh_config
sudo auditctl -w /etc/passwd -p wa -k user_db
sudo auditctl -w /etc/shadow -p wa -k shadow_db

# Xem log
sudo ausearch -k ssh_config

9.3 Logwatch — Báo Cáo Log Hàng Ngày

sudo apt install logwatch -y

# Gửi báo cáo qua email mỗi sáng
sudo logwatch --detail high --mailto admin@example.com --service All --range yesterday

10. Danh Sách Kiểm Tra Bảo Mật Server

Dưới đây là checklist HTML bạn có thể in ra và đánh dấu khi hoàn thành từng bước:

STT

Biện Pháp

Mức Độ

Kiểm Tra

1

Tạo user sudo, tắt root login SSH

Cần thiếtsudo grep PermitRootLogin /etc/ssh/sshd_config
2SSH key thay mật khẩuCần thiếtsudo grep PasswordAuthentication /etc/ssh/sshd_config
3

Bật firewall (UFW/firewalld)

Cần thiết

sudo ufw status / sudo firewall-cmd --list-all

4Cài đặt Fail2banCần thiếtsudo fail2ban-client status
5

Cập nhật bảo mật tự động

Cần thiếtsudo dpkg -l | grep unattended-upgrades
6Phân quyền file đúngCần thiếtls -la /var/www/html
7Bảo mật MySQL/MariaDBCần thiếtsudo mysql_secure_installation
8PHP safe configCần thiếtphp -i | grep disable_functions
9

Security headers web server

Cần thiếtcurl -I https://yourdomain.com
10

Kernel hardening (sysctl)

Khuyến nghịsudo sysctl net.ipv4.tcp_syncookies
11Chạy Lynis auditKhuyến nghịsudo lynis audit system
12

Kiểm tra rootkit (rkhunter)

Khuyến nghịsudo rkhunter --check
13Thiết lập auditdKhuyến nghịsudo systemctl status auditd
14Sao lưu định kỳCần thiếtKiểm tra script backup
15

Cập nhật monitoring & alert

Khuyến nghịLogwatch / email alert

FAQ — Các Câu Hỏi Thường Gặp Về Bảo Mật Server

Bảo mật server khác gì với bảo mật website?

Bảo mật server tập trung vào hệ điều hành và hạ tầng — SSH, firewall, kernel, user, dịch vụ nền. Bảo mật website tập trung vào ứng dụng — CMS, plugin, SQL injection, XSS, SSL, WAF. Hai lớp bảo mật này bổ trợ cho nhau. Xem chi tiết tại hướng dẫn bảo mật website.

Có cần thiết phải tắt đăng nhập root không?

Có. Đây là biện pháp quan trọng nhất. Root có toàn quyền trên hệ thống, và log SSH sẽ luôn có hàng trăm lần thử đăng nhập root từ bot. Dùng user sudo và chuyển sang root chỉ khi cần bằng sudo -i hoặc su -.

Sau khi cấu hình xong, tôi nên làm gì tiếp theo?

Cập nhật hệ thống thường xuyên, theo dõi log định kỳ, chạy Lynis audit mỗi tháng. Nếu bạn dùng cloud hosting, hãy tìm hiểu thêm về Cloud Hosting là gì? để hiểu các lớp bảo mật bổ sung từ nhà cung cấp.

UFW có đủ để bảo vệ server không?

UFW là công cụ quản lý iptables, đủ để chặn các kết nối không mong muốn ở cấp độ cơ bản. Tuy nhiên, bạn nên kết hợp với Fail2ban, và nếu cần bảo vệ web application, hãy thêm WAF như Cloudflare hoặc ModSecurity.

Làm sao để phát hiện server đã bị hack?

Dấu hiệu thường gặp: CPU cao bất thường (có thể do đào coin), lưu lượng mạng tăng đột biến, file lạ xuất hiện, user mới không rõ nguồn gốc, log SSH có IP lạ, website bị chèn mã độc. Chạy rkhunterlynis audit ngay lập tức.

Bảo mật server có làm chậm website không?

Hầu hết các biện pháp đều có tác động không đáng kể. Một số cấu hình như SYN cookies hoặc rate limiting còn giúp server hoạt động ổn định hơn khi bị tấn công. Fail2ban và firewall hầu như không ảnh hưởng đến hiệu suất.

Có cần AppArmor hay SELinux không?

Nếu server của bạn xử lý dữ liệu nhạy cảm hoặc thuộc hệ thống quan trọng, nên bật AppArmor (Ubuntu/Debian) hoặc SELinux (CentOS/RHEL). Đây là lớp bảo vệ Mandatory Access Control (MAC) ngăn chặn các hành vi trái phép ngay cả khi có lỗ hổng.

Tôi nên kiểm tra bảo mật server bao lâu một lần?

Với server production, bạn nên kiểm tra hàng tuần các log và bản cập nhật, chạy audit đầy đủ hàng tháng, và kiểm tra rootkit hàng quý.

Kết Luận

Bảo mật server không phải là một đích đến mà là một quá trình liên tục. Mười biện pháp trong bài viết này tạo thành nền tảng vững chắc để bảo vệ máy chủ Linux của bạn:

  1. SSH hardening — đóng cổng vào chính
  2. Firewall — kiểm soát giao thông mạng
  3. Fail2ban — chặn brute force tự động
  4. Cập nhật bảo mật — vá lỗ hổng kịp thời
  5. Quản lý người dùng — ít quyền nhất có thể
  6. Bảo mật dịch vụ — MySQL, PHP, Nginx/Apache
  7. Kernel hardening — gia cố nhân hệ điều hành
  8. Phát hiện xâm nhập — Lynis, rkhunter, AIDE
  9. Giám sát log — auditd, logwatch
  10. Checklist — kiểm tra định kỳ

Nếu bạn mới bắt đầu, hãy làm lần lượt từ bước 1 đến bước 5 trong ngày đầu tiên, sau đó bổ sung các bước nâng cao dần dần. Và đừng quên — bảo mật là một vòng tròn, không phải đường thẳng: sau khi hoàn thành, hãy quay lại kiểm tra và cập nhật thường xuyên.

Tìm hiểu thêm về các lệnh Linux cơ bản nếu bạn cần nắm vững dòng lệnh trước khi bắt đầu hardening server.

Bình luận

0 bình luận

Đang tải...

Bài viết mới nhất

Bài viết liên quan

Newsletter border

Đăng ký để nhận tin từ RiverLee