Chuyển tới nội dung chính

Bảo Mật Máy Chủ Linux Cơ Bản: Các Bước Tăng Cường An Toàn

Giới Thiệu

Trong môi trường công nghệ ngày nay, việc bảo mật máy chủ là vô cùng quan trọng để bảo vệ dữ liệu và dịch vụ khỏi các mối đe dọa mạng. "Hardening" máy chủ Linux là quá trình tăng cường các biện pháp bảo mật để giảm thiểu bề mặt tấn công và củng cố khả năng phòng thủ của hệ thống. Hướng dẫn này sẽ trình bưy các bước cơ bản nhưng hiệu quả để bạn có thể bắt đầu quá trình bảo mật máy chủ Linux của mình.

📋 Thời gian: 45 phút | Độ khó: Cơ bản

Yêu Cầu

Để thực hiện theo hướng dẫn này, bạn cần:

  • Một máy chủ Linux đang hoạt động (ví dụ: Ubuntu, Debian, CentOS, RHEL).
  • Quyền truy cập root hoặc tài khoản người dùng có quyền sudo trên máy chủ.
  • Kết nối Internet trên máy chủ để cập nhật các gói phần mềm.
  • Kiến thức cơ bản về dòng lệnh Linux.

Các Bước Thực Hiện

Bước 1: Cập Nhật Hệ Thống Thường Xuyên

Việc đầu tiên và quan trọng nhất để duy trì bảo mật là đảm bảo hệ thống của bạn luôn được cập nhật. Các bản vá lỗi bảo mật thường xuyên được phát hành để khắc phục các lỗ hổng đã biết.

# Đối với hệ thống dựa trên Debian/Ubuntu
sudo apt update # Cập nhật danh sách gói
sudo apt upgrade -y # Nâng cấp các gói đã cài đặt
sudo apt dist-upgrade -y # Nâng cấp phân phối (nếu cần)
sudo apt autoremove -y # Xóa các gói không còn cần thiết

# Đối với hệ thống dựa trên RHEL/CentOS
sudo yum update -y # Cập nhật tất cả các gói
# Hoặc với Fedora/RHEL 8+
sudo dnf update -y # Cập nhật tất cả các gói

💡 Mẹo: Thiết lập cập nhật tự động có thể giúp bạn không bỏ lỡ các bản vá quan trọng, nhưng hãy luôn kiểm tra log sau khi cập nhật tự động.

Bước 2: Bảo Mật Dịch Vụ SSH

SSH (Secure Shell) là cổng chính để truy cập máy chủ từ xa. Bảo mật SSH là một trong những bước quan trọng nhất.

2.1 Tạo Người Dùng Mới và Tắt Đăng Nhập Root

Đăng nhập trực tiếp bằng tài khoản root qua SSH là một rủi ro bảo mật lớn. Hãy tạo một người dùng mới với quyền sudo và sử dụng tài khoản này.

# Tạo người dùng mới (ví dụ: adminuser)
sudo adduser adminuser

# Cấp quyền sudo cho người dùng mới
# Đối với Debian/Ubuntu: Thêm vào nhóm 'sudo'
sudo usermod -aG sudo adminuser

# Đối với RHEL/CentOS: Thêm vào nhóm 'wheel' và đảm bảo nhóm 'wheel' có quyền sudo
# Mở file /etc/sudoers (hoặc dùng visudo) và bỏ comment dòng sau:
# %wheel ALL=(ALL) ALL
sudo usermod -aG wheel adminuser

2.2 Cấu Hình Xác Thực Bằng Khóa SSH (Key-based Authentication)

Xác thực bằng khóa an toàn hơn nhiều so với mật khẩu.

  • Tạo cặp khóa SSH trên máy cục bộ của bạn (nếu chưa có): ssh-keygen -t rsa -b 4096
  • Sao chép khóa công khai lên máy chủ:
    ssh-copy-id adminuser@your_server_ip
    Hoặc copy thủ công:
    # Trên máy chủ, tạo thư mục nếu chưa có
    mkdir -p ~/.ssh
    chmod 700 ~/.ssh
    # Dán khóa công khai của bạn vào file authorized_keys
    nano ~/.ssh/authorized_keys
    chmod 600 ~/.ssh/authorized_keys

2.3 Chỉnh Sửa Cấu Hình SSHD

Mở file cấu hình SSH /etc/ssh/sshd_config và thực hiện các thay đổi sau:

sudo nano /etc/ssh/sshd_config

Tìm và sửa đổi các dòng sau:

Port 2222                  # Đổi cổng SSH mặc định 22 sang một cổng khác (ví dụ: 2222)
PermitRootLogin no # Tắt đăng nhập trực tiếp bằng tài khoản root
PasswordAuthentication no # Tắt xác thực bằng mật khẩu (chỉ dùng khóa SSH)
X11Forwarding no # Tắt X11 forwarding nếu không cần
UsePAM no # Tắt PAM nếu không cần (tăng cường bảo mật khi dùng key-based)
AllowUsers adminuser # Chỉ cho phép người dùng cụ thể đăng nhập (thay adminuser bằng tên người dùng của bạn)

⚠️ Cảnh báo: Đảm bảo bạn đã thử nghiệm đăng nhập bằng khóa SSH với tài khoản adminuser trên cổng mới trước khi tắt PasswordAuthenticationPermitRootLogin. Nếu không, bạn có thể bị khóa khỏi máy chủ.

Lưu file và khởi động lại dịch vụ SSH:

sudo systemctl restart sshd

✅ Bây giờ bạn sẽ đăng nhập bằng ssh -p 2222 adminuser@your_server_ip.

Bước 3: Cấu Hình Tường Lửa (Firewall)

Tường lửa là tuyến phòng thủ đầu tiên, kiểm soát lưu lượng truy cập mạng vào và ra khỏi máy chủ.

3.1 Cài Đặt và Cấu Hình UFW (Uncomplicated Firewall)

UFW là một giao diện đơn giản cho iptables, dễ sử dụng trên Debian/Ubuntu.

sudo apt install ufw -y

# Mặc định, từ chối tất cả các kết nối đến và cho phép tất cả các kết nối đi
sudo ufw default deny incoming
sudo ufw default allow outgoing

# Cho phép cổng SSH mới của bạn (ví dụ: 2222)
sudo ufw allow 2222/tcp

# Cho phép các dịch vụ web nếu bạn có (HTTP/HTTPS)
sudo ufw allow http
sudo ufw allow https

# Kích hoạt tường lửa
sudo ufw enable

⚠️ Cảnh báo: Luôn đảm bảo bạn đã cho phép cổng SSH mới trước khi kích hoạt tường lửa, nếu không bạn sẽ bị khóa khỏi máy chủ.

Kiểm tra trạng thái tường lửa:

sudo ufw status verbose

3.2 Cấu Hình firewalld (Đối với CentOS/RHEL)

sudo yum install firewalld -y
sudo systemctl start firewalld
sudo systemctl enable firewalld

# Mặc định, từ chối tất cả các kết nối đến
sudo firewall-cmd --set-default-zone=drop

# Cho phép cổng SSH mới của bạn (ví dụ: 2222)
sudo firewall-cmd --permanent --add-port=2222/tcp

# Cho phép các dịch vụ web nếu bạn có (HTTP/HTTPS)
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https

# Nạp lại cấu hình tường lửa để áp dụng thay đổi
sudo firewall-cmd --reload

Kiểm tra trạng thái tường lửa:

sudo firewall-cmd --list-all

Bước 4: Gỡ Bỏ Các Dịch Vụ Không Cần Thiết

Mỗi dịch vụ chạy trên máy chủ đều là một điểm tiềm năng có thể bị tấn công. Hãy gỡ bỏ hoặc tắt các dịch vụ mà bạn không sử dụng.

# Liệt kê tất cả các dịch vụ đang chạy
sudo systemctl list-units --type=service --state=running

# Ví dụ, nếu bạn không cần Apache hoặc Nginx
# sudo systemctl stop apache2 # hoặc nginx
# sudo systemctl disable apache2 # hoặc nginx
# sudo apt remove apache2 # hoặc nginx

# Ví dụ, nếu bạn không cần một số dịch vụ mạng như rpcbind, nfs
# sudo systemctl stop rpcbind
# sudo systemctl disable rpcbind

💡 Mẹo: Hãy cẩn thận khi gỡ bỏ dịch vụ. Đảm bảo bạn hiểu rõ chức năng của dịch vụ đó trước khi tắt hoặc gỡ bỏ để tránh ảnh hưởng đến hoạt động của máy chủ.

Bước 5: Cấu Hình Chính Sách Mật Khẩu Mạnh

Buộc người dùng sử dụng mật khẩu mạnh và thay đổi định kỳ. Bạn có thể sử dụng mô-đun PAM (Pluggable Authentication Modules) để thực thi chính sách mật khẩu.

# Cài đặt libpam-cracklib (trên Debian/Ubuntu) hoặc pam_pwquality (trên RHEL/CentOS)
sudo apt install libpam-cracklib -y # Debian/Ubuntu
# Hoặc trên RHEL/CentOS
# sudo yum install pam_pwquality -y

# Chỉnh sửa file cấu hình PAM để thêm yêu cầu về mật khẩu mạnh
# Ví dụ: /etc/pam.d/common-password (Debian/Ubuntu) hoặc /etc/security/pwquality.conf (RHEL/CentOS)
sudo nano /etc/pam.d/common-password

Tìm dòng có password requisite pam_cracklib.so hoặc password requisite pam_pwquality.so và thêm các tham số như:

# minlen=12       # Độ dài tối thiểu 12 ký tự
# lcredit=-1 # Ít nhất 1 chữ thường
# ucredit=-1 # Ít nhất 1 chữ hoa
# dcredit=-1 # Ít nhất 1 chữ số
# ocredit=-1 # Ít nhất 1 ký tự đặc biệt
# retry=3 # Thử lại 3 lần

Bỏ comment và điều chỉnh các tham số này theo chính sách của bạn.

Để buộc người dùng thay đổi mật khẩu sau một thời gian nhất định:

sudo chage -M 90 adminuser # Buộc adminuser đổi mật khẩu sau 90 ngày

Bước 6: Kiểm Tra và Cấu Hình SELinux/AppArmor

SELinux (Security-Enhanced Linux) và AppArmor là các hệ thống kiểm soát truy cập bắt buộc (MAC) giúp tăng cường bảo mật bằng cách hạn chế các chương trình có thể làm gì.

6.1 Đối với SELinux (RHEL/CentOS)

Kiểm tra trạng thái SELinux:

sestatus

Nếu trạng thái không phải enforcing, hãy chỉnh sửa /etc/selinux/config và đặt SELINUX=enforcing. Sau đó khởi động lại máy chủ.

sudo nano /etc/selinux/config
# Đặt:
# SELINUX=enforcing

⚠️ Cảnh báo: Thay đổi SELinux sang chế độ enforcing có thể gây ra lỗi cho các ứng dụng chưa được cấu hình đúng. Hãy kiểm tra kỹ các log (ví dụ: audit.log) sau khi bật.

6.2 Đối với AppArmor (Debian/Ubuntu)

Kiểm tra trạng thái AppArmor:

sudo aa-status

Đảm bảo các cấu hình quan trọng đang ở chế độ enforce. Nếu bạn có các dịch vụ tùy chỉnh, bạn có thể cần tạo hồ sơ AppArmor cho chúng.

Troubleshooting

  • Bị khóa khỏi máy chủ sau khi đổi cổng SSH hoặc cấu hình tường lửa:

    • ⚠️ Nếu bạn có quyền truy cập console (ví dụ: qua nhà cung cấp dịch vụ cloud), hãy sử dụng nó để đăng nhập với quyền root.
    • Kiểm tra lại file /etc/ssh/sshd_config và cấu hình tường lửa (ufw status hoặc firewall-cmd --list-all).
    • Đảm bảo cổng SSH mới đã được phép trong tường lửa.
    • Khởi động lại dịch vụ SSH (sudo systemctl restart sshd).
    • Nếu bạn tắt PasswordAuthentication mà chưa thiết lập key-based auth đúng cách, bạn sẽ cần bật lại nó tạm thời qua console để khắc phục.
  • Lỗi cú pháp trong file cấu hình SSHD:

    • Dịch vụ SSHD có thể không khởi động được. Kiểm tra log: sudo journalctl -u sshd.
    • Sử dụng sudo sshd -t để kiểm tra cú pháp file cấu hình trước khi khởi động lại dịch vụ.
  • Không thể chư�y lệnh sudo:

    • Đảm bảo tài khoản người dùng của bạn đã được thêm vào nhóm sudo (Debian/Ubuntu) hoặc wheel (RHEL/CentOS) và nhóm này có quyền sudo trong /etc/sudoers.
    • Kiểm tra sudo visudo để đảm bảo không có lỗi cú pháp.

Kết Luận

Bảo mật máy chủ Linux là một quá trình liên tục, không phải là một công việc một lần. Các bước trên cung cấp một nền tảng vững chắc để tăng cường an toàn cho máy chủ của bạn.

Best Practices:

  • Sao lưu thường xuyên: Luôn có bản sao lưu dữ liệu quan trọng.
  • Theo dõi log: Thường xuyên kiểm tra các file log hệ thống (/var/log/syslog, auth.log, secure...) để phát hiện các hoạt động đáng ngờ.
  • Cập nhật định kỳ: Duy trì thói quen cập nhật hệ thống và phần mềm.
  • Kiểm tra bảo mật: Định kỳ quét lỗ hổng và kiểm tra cấu hình bảo mật.
  • Nguyên tắc đặc quyền tối thiểu: Cấp cho người dùng và dịch vụ quyền hạn tối thiểu cần thiết để hoạt động.

Bằng cách áp dụng những biện pháp này, bạn sẽ cải thiện đáng kể khả năng chống chịu của máy chủ Linux trước các mối đe dọa tiẩm ẩn.