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

Bảo Vệ SSH Khỏi Tấn Công Brute Force

Giới Thiệu

Tấn công Brute Force vào SSH là một trong những mối đe dọa phổ biến nhất đối với các máy chủ Linux. Kẻ tấn công liên tục thử các tổ hợp tên người dùng và mật khẩu cho đến khi tìm được thông tin đăng nhập chính xác, từ đó giành quyền truy cập trái phép vào hệ thống của bạn. Việc không bảo vệ SSH đúng cách có thể dẫn đến mất dữ liệu, cài đặt phần mềm độc hại hoặc biến máy chủ của bạn thành một phần của botnet. Bài viết này sẽ hướng dẫn bạn các bước cần thiết để củng cố bảo mật SSH và ngăn chặn hiệu quả các cuộc tấn công brute force.

📋 Thời gian: 20-40 phút | Độ khó: Trung bình

Yêu Cầu

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

  • Quyền truy cập root hoặc sudo vào máy chủ Linux của bạn.
  • Kết nối SSH hiện có hoặc quyền truy cập console (nếu SSH đã bị khóa).
  • Kiến thức cơ bản về dòng lệnh Linux.
  • Trình soạn thảo văn bản như nano hoặc vi.

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

Bước 1: Kiểm Tra Nhật Ký và Xác Định Tấn Công

Trước tiên, hãy kiểm tra nhật ký hệ thống để xác nhận rằng bạn đang bị tấn công brute force. Các tệp nhật ký phổ biến là /var/log/auth.log (trên Debian/Ubuntu) hoặc /var/log/secure (trên CentOS/RHEL).

# Kiểm tra các lần đăng nhập SSH thất bại trên hệ thống Debian/Ubuntu
grep "Failed password" /var/log/auth.log | tail -n 20

# Hoặc trên hệ thống CentOS/RHEL
grep "Failed password" /var/log/secure | tail -n 20

# Để xem các địa chỉ IP đang cố gắng tấn công
grep "Failed password" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -nr | head -n 10

Bạn sẽ thấy nhiều dòng với thông báo "Failed password" từ cùng một địa chỉ IP hoặc nhiều địa chỉ IP khác nhau, đây là dấu hiệu rõ ràng của tấn công brute force.

Bước 2: Thay Đổi Cổng SSH Mặc Định

Cổng SSH mặc định (22) là mục tiêu hàng đầu của các bot tấn công. Thay đổi cổng sang một số khác có thể giảm đáng kể lượng truy cập không mong muốn.

# Mở file cấu hình SSH daemon
sudo nano /etc/ssh/sshd_config

Tìm dòng Port 22 và thay đổi 22 thành một số cổng khác chưa được sử dụng (ví dụ: 2222, 22222).

- #Port 22
+ Port 22222

⚠️ Lưu ý: Đảm bảo cổng bạn chọn không bị tường lửa chặn và không được sử dụng bởi dịch vụ nào khác. Sau khi thay đổi, bạn sẽ cần cập nhật quy tắc tường lửa.

# Khởi động lại dịch vụ SSH để áp dụng thay đổi
sudo systemctl restart sshd

# Cập nhật tường lửa (ví dụ: UFW trên Ubuntu)
# Cho phép cổng SSH mới
sudo ufw allow 22222/tcp
# Xóa quy tắc cho cổng cũ nếu có
sudo ufw delete allow 22/tcp

# Cập nhật tường lửa (ví dụ: firewalld trên CentOS/RHEL)
# Thêm cổng SSH mới
sudo firewall-cmd --permanent --add-port=22222/tcp
# Tải lại cấu hình tường lửa
sudo firewall-cmd --reload

✅ Khi kết nối lại, hãy sử dụng cổng mới: ssh -p 22222 user@your_server_ip.

Bước 3: Vô Hiệu Hóa Đăng Nhập Bằng Mật Khẩu và Sử Dụng Xác Thực Khóa SSH

Xác thực bằng khóa SSH an toàn hơn nhiều so với mật khẩu vì nó sử dụng các cặp khóa mật mã (công khai và riêng tư).

💡 Tạo cặp khóa SSH (trên máy cục bộ của bạn):

ssh-keygen -t rsa -b 4096 -C "[email protected]"

Làm theo hướng dẫn để lưu khóa và đặt passphrase (mật khẩu bảo vệ khóa riêng tư).

Sao chép khóa công khai lên máy chủ:

ssh-copy-id -p 22222 user@your_server_ip

Thay 22222 bằng cổng SSH mới của bạn. Lệnh này sẽ sao chép khóa công khai của bạn vào file ~/.ssh/authorized_keys trên máy chủ.

Vô hiệu hóa đăng nhập bằng mật khẩu trên máy chủ:

sudo nano /etc/ssh/sshd_config

Tìm và chỉnh sửa các dòng sau:

- #PasswordAuthentication yes
+ PasswordAuthentication no
+ PubkeyAuthentication yes
- #PermitEmptyPasswords no
+ PermitEmptyPasswords no

⚠️ Cảnh báo: Đảm bảo bạn đã thử đăng nhập bằng khóa SSH thành công trước khi vô hiệu hóa đăng nhập bằng mật khẩu, nếu không bạn có thể bị khóa khỏi máy chủ!

# Khởi động lại dịch vụ SSH
sudo systemctl restart sshd

Từ giờ, bạn chỉ có thể đăng nhập bằng khóa SSH.

Bước 4: Cài Đặt và Cấu Hình Fail2ban

Fail2ban là một công cụ mạnh mẽ giúp tự động chặn các địa chỉ IP có hành vi đáng ngờ, bao gồm cả các cuộc tấn công brute force SSH.

# Cài đặt Fail2ban (trên Debian/Ubuntu)
sudo apt update
sudo apt install fail2ban

# Cài đặt Fail2ban (trên CentOS/RHEL)
sudo yum install epel-release
sudo yum install fail2ban

Cấu hình Fail2ban cho SSH: Tạo một file cấu hình cục bộ để ghi đè các thiết lập mặc định:

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local

Tìm phần [sshd] và đảm bảo nó được enabled (bỏ comment nếu cần):

[sshd]
enabled = true
port = ssh,22222 # Thêm cổng SSH mới của bạn vào đây
filter = sshd
logpath = %(sshd_log)s
maxretry = 3 # Số lần thư tối đa trước khi bị chặn
bantime = 1h # Thời gian chặn (ví dụ: 1 giờ)
findtime = 10m # Thời gian Fail2ban theo dõi các lần thử (ví dụ: 10 phút)

Bạn có thể điều chỉnh maxretry, bantime, và findtime theo nhu cầu.

# Khởi động lại dịch vụ Fail2ban
sudo systemctl restart fail2ban

# Kiểm tra trạng thái của Fail2ban và jail SSH
sudo fail2ban-client status sshd

Bạn sẽ thấy danh sách các địa chỉ IP bị chặn nếu có.

Bước 5: Giới Hạn Số Lần Thử Đăng Nhập và Thời Gian Đăng Nhập

Cấu hình SSH để giới hạn số lần thử mật khẩu và thời gian cho phép đăng nhập có thể làm chậm các cuộc tấn công.

sudo nano /etc/ssh/sshd_config

Tìm hoặc thêm các dòng sau:

+ MaxAuthAttempts 3    # Giới hạn số lần thử xác thực tối đa
+ LoginGraceTime 20 # Giới hạn thời gian đăng nhập (ví dụ: 20 giây)

MaxAuthAttempts 3 có nghĩa là sau 3 lần thử sai, kết nối sẽ bị đóng. LoginGraceTime 20 sẽ đóng kết nối nếu người dùng không đăng nhập thành công trong 20 giây.

# Khởi động lại dịch vụ SSH
sudo systemctl restart sshd

Bước 6: Vô Hiệu Hóa Đăng Nh�ập Trực Tiếp Với Tài Khoản Root

Đăng nhập trực tiếp bằng tài khoản root là một rủi ro bảo mật lớn. Thay vào đó, bạn nên đăng nhập bằng một tài khoản người dùng thông thường và sử dụng sudo khi cần quyền root.

sudo nano /etc/ssh/sshd_config

Tìm dòng PermitRootLogin và thay đổi nó thành no.

- PermitRootLogin yes
+ PermitRootLogin no
# Khởi động lại dịch vụ SSH
sudo systemctl restart sshd

✅ Sau khi thay đổi này, bạn sẽ không thể đăng nhập trực tiếp với root qua SSH.

Troubleshooting

  • Bị khóa khỏi SSH sau khi thay đổi cấu hình:

    • Nguyên nhân: Có thể do cấu hình cổng SSH sai, quy tắc tường lửa chưa được cập nhật, hoặc bạn đã vô hiệu hóa mật khẩu mà chưa thiết lập xác thực khóa thành công.
    • Cách xử lý: Nếu bạn có quyền truy cập console (thông qua bảng điều khiển nhà cung cấp đám mây hoặc KVM), hãy đăng nhập trực tiếp, kiểm tra lại file /etc/ssh/sshd_config/var/log/auth.log để tìm lỗi. Đảm bảo quy tắc tường lửa của bạn cho phép cổng SSH mới.
    • 💡 Luôn mở một cửa sổ SSH thứ hai và không đóng cửa sổ hiện tại cho đến khi bạn xác nhận có thể đăng nhập bằng cấu hình mới.
  • Fail2ban không hoạt động như mong đợi:

    • Nguyên nhân: Cấu hình sai logpath, filter, hoặc port. Dịch vụ Fail2ban không chạy.
    • Cách xử lý: Kiểm tra trạng thái dịch vụ sudo systemctl status fail2ban. Xem nhật ký của Fail2ban: sudo tail -f /var/log/fail2ban.log. Đảm bảo logpath trong jail.local trỏ đúng đến nhật ký SSH của hệ thống bạn.
  • Quên passphrase của khóa SSH:

    • Cách xử lý: Bạn sẽ không thể sử dụng khóa đó. Bạn cần tạo một cặp khóa mới và sao chép khóa công khai lên máy chủ của mình (nếu bạn vẫn có quyền truy cập qua console hoặc một khóa SSH khác).

Kết Luận

Bảo vệ SSH khỏi tấn công brute force là một phần quan trọng của bảo mật máy chủ. Bằng cách áp dụng các biện pháp như thay đổi cổng mặc định, sử dụng xác thực khóa SSH, cài đặt Fail2ban, giới hạn số lần thử đăng nhập và vô hiệu hóa đăng nhập root trực tiếp, bạn đã tạo ra một lớp bảo vệ mạnh mẽ chống lại các mối đe dọa phổ biến nhất.

Best Practices:

  • Cập nhật hư thống thường xuyên: Đảm bảo hệ điều hành và các gói phần mềm luôn được cập nhật để vá các lỗ hổng bảo mật.
  • Sử dụng passphrase mạnh cho khóa SSH: Một passphrase mạnh sẽ bảo vệ khóa riêng tư của bạn ngay cả khi nó bị đánh cắp.
  • Giám sát nhật ký: Thường xuyên kiểm tra nhật ký hệ thống và Fail2ban để phát hiện sớm các hoạt động đáng ngờ.
  • Sao lưu cấu hình: Luôn sao lưu file cấu hình SSH (sshd_config) trước khi thực hiện các thay đổi lớn.
  • Hạn chế quyền truy cập: Chỉ cho phép những người dùng và địa chỉ IP cần thiết truy cập SSH.

Việc thực hiện các bước này sẽ giúp máy chủ của bạn an toàn hơn rất nhiều trước các cuộc tấn công mạng.