Hướng Dẫn Cài Đặt Fail2Ban Chống Tấn Công Brute-Force SSH VPS

Khanh Bảo
Hướng Dẫn Cài Đặt Fail2Ban

Hướng Dẫn Cài Đặt Fail2Ban Chống Tấn Công Brute-Force SSH VPS

Dù đã cấu hình tường lửa UFW để kiểm soát Port ra vào, VPS của bạn vẫn có thể là mục tiêu của hàng nghìn lượt dò mật khẩu SSH tự động mỗi ngày từ các bot quét trên internet. Fail2ban chính là lớp phòng thủ bổ sung giúp tự động phát hiện và chặn đứng những địa chỉ IP có hành vi tấn công dò mật khẩu (Brute-Force), trước khi chúng kịp gây hại cho VPS Ubuntu của bạn.

Tấn công Brute-Force SSH là gì và nguy cơ mất VPS

Tấn công Brute-Force SSH là hình thức kẻ tấn công sử dụng phần mềm tự động để thử hàng loạt tổ hợp Username/Password khác nhau nhằm đăng nhập trái phép vào VPS qua giao thức SSH. Vì Port SSH mặc định (22) là mục tiêu bị quét nhiều nhất trên internet, gần như bất kỳ VPS nào có địa chỉ IP công khai cũng sẽ liên tục nhận được các lượt dò quét này, dù bạn có đang chủ động sử dụng VPS hay không.

Nếu không có biện pháp phòng vệ, một mật khẩu yếu hoàn toàn có thể bị dò ra chỉ sau vài giờ đến vài ngày, dẫn đến nguy cơ mất toàn quyền kiểm soát VPS, bị cài mã độc, biến VPS thành công cụ tấn công DDoS, hoặc đánh cắp toàn bộ dữ liệu quan trọng đang lưu trữ.

Cơ chế phát hiện và chặn IP của Fail2ban

Fail2ban hoạt động dựa trên ba thành phần chính phối hợp với nhau: Filter (bộ lọc định nghĩa mẫu biểu thức chính quy để nhận diện dòng log nào là một lượt đăng nhập thất bại), Jail (“nhà giam” gắn một Filter với một dịch vụ cụ thể cùng bộ tham số chặn riêng) và Action (hành động lệnh thực thi khi có IP vi phạm, mặc định là thêm rule chặn vào tường lửa).

Cơ chế vận hành cụ thể như sau: Fail2ban liên tục theo dõi (monitor) file log của dịch vụ được bảo vệ, phổ biến nhất là log của SSH tại /var/log/auth.log. Mỗi khi phát hiện một địa chỉ IP đăng nhập sai quá số lần cho phép trong một khoảng thời gian nhất định, Fail2ban sẽ tự động thêm một rule chặn (ban) IP đó vào tường lửa trong một khoảng thời gian được cấu hình sẵn, sau đó tự động gỡ chặn khi hết hạn.

Các bước cài đặt và cấu hình file jail.local

Fail2ban không được cài đặt sẵn trên Ubuntu, nhưng có thể cài đặt cực kỳ nhanh chóng chỉ với một lệnh:

sudo apt update && sudo apt install fail2ban -y

Sau khi cài đặt xong, thay vì chỉnh sửa trực tiếp file cấu hình gốc jail.conf (dễ bị ghi đè khi cập nhật phần mềm), bạn nên tạo một bản sao riêng có tên jail.local để tùy chỉnh:

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

Trong file jail.local, tìm đến mục [sshd] và điều chỉnh các tham số quan trọng sau theo nhu cầu bảo mật của bạn:

[sshd]
enabled = true
port = 22
maxretry = 5
findtime = 600
bantime = 3600
ignoreip = 127.0.0.1/8 123.45.67.89

Giải thích chi tiết ý nghĩa từng tham số:

Hướng Dẫn Cài Đặt Fail2Ban Chống Tấn Công Brute-Force SSH VPS

Sau khi lưu file, khởi động lại dịch vụ Fail2ban để áp dụng cấu hình mới:

sudo systemctl restart fail2ban

💡 Mẹo: Nếu VPS của bạn đã đổi Port SSH sang một cổng riêng (ví dụ 29939) thay vì mặc định 22, đừng quên cập nhật lại đúng giá trị “port” trong jail.local, nếu không Fail2ban sẽ theo dõi sai Port và không thể bảo vệ được.

Whitelist IP tin cậy để tránh tự khóa mình

Tham số ignoreip cho phép bạn khai báo danh sách IP sẽ không bao giờ bị Fail2ban chặn, dù đăng nhập sai bao nhiêu lần. Đây là thiết lập rất nên có nếu bạn thường xuyên thao tác VPS từ một địa chỉ IP cố định (ví dụ IP nhà riêng hoặc văn phòng), tránh trường hợp chính bạn gõ nhầm mật khẩu vài lần rồi tự chặn bản thân ra khỏi VPS.

ignoreip = 127.0.0.1/8 ::1 123.45.67.89

Bảo vệ thêm các dịch vụ khác ngoài SSH

Fail2ban không chỉ giới hạn ở việc bảo vệ SSH. Bạn hoàn toàn có thể kích hoạt thêm các jail có sẵn để bảo vệ những dịch vụ khác đang chạy trên VPS, chỉ cần bật “enabled = true” cho jail tương ứng trong file jail.local:

  • [sshd] – bảo vệ đăng nhập SSH, theo dõi /var/log/auth.log
  • [nginx-http-auth] – bảo vệ trang đăng nhập có mật khẩu trên Nginx, theo dõi /var/log/nginx/error.log
  • [nginx-botsearch] – chặn bot quét tìm file/trang quản trị nhạy cảm, theo dõi /var/log/nginx/access.log
  • [postfix] – chống dò mật khẩu email qua Postfix, theo dõi /var/log/mail.log
  • [wordpress] – chống dò mật khẩu đăng nhập WordPress, cần cài thêm plugin hỗ trợ ghi log đăng nhập sai

Kết hợp Fail2ban với UFW

Theo mặc định, Fail2ban trên Ubuntu thường thao tác trực tiếp với iptables/nftables ở tầng thấp. Nếu VPS của bạn đã dùng UFW làm tường lửa chính (như hướng dẫn ở bài viết trước), nên chỉ định rõ Fail2ban thực thi lệnh chặn thông qua UFW để đồng bộ, tránh xung đột rule giữa hai công cụ:

[DEFAULT]
banaction = ufw

Sau khi cấu hình, mọi lượt IP bị Fail2ban chặn sẽ hiển thị luôn trong danh sách rule của UFW khi bạn kiểm tra bằng “sudo ufw status numbered”, giúp việc theo dõi và quản lý tập trung về một nơi duy nhất.

Hướng dẫn xem danh sách IP bị chặn và cách Unban IP

Để kiểm tra trạng thái hoạt động và danh sách IP đang bị Fail2ban chặn cho dịch vụ SSH, sử dụng lệnh:

sudo fail2ban-client status sshd

Kết quả trả về sẽ hiển thị số lượt bị chặn hiện tại cùng danh sách địa chỉ IP cụ thể. Trong trường hợp một IP hợp lệ (ví dụ chính IP của bạn) bị chặn nhầm do đăng nhập sai quá số lần cho phép, bạn có thể gỡ chặn (unban) ngay lập tức bằng lệnh:

sudo fail2ban-client set sshd unbanip 123.45.67.89

Kiểm tra log và xử lý sự cố Fail2ban không hoạt động

Nếu nghi ngờ Fail2ban không chặn đúng như kỳ vọng, trước tiên hãy xác nhận dịch vụ đang chạy ổn định:

sudo systemctl status fail2ban

Toàn bộ hoạt động của Fail2ban – từ việc phát hiện IP vi phạm đến khi thực thi chặn – đều được ghi lại tại file log riêng, rất hữu ích để chẩn đoán sự cố:

sudo tail -f /var/log/fail2ban.log

Nếu một Filter có vẻ không nhận diện đúng dòng log đăng nhập sai (ví dụ sau khi bạn tùy chỉnh format log), có thể kiểm thử trực tiếp bằng lệnh fail2ban-regex để xác nhận biểu thức chính quy có khớp với log thực tế hay không:

sudo fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf

⚠ Lưu ý: Sau khi VPS khởi động lại (reboot), Fail2ban sẽ tự nạp lại cấu hình từ jail.local nhưng danh sách IP đang bị chặn tạm thời sẽ được reset. Nếu cần duy trì danh sách chặn vĩnh viễn qua các lần khởi động lại, hãy cân nhắc kết hợp thêm danh sách chặn thủ công ở tầng UFW cho những IP đã xác định rõ là nguồn tấn công lâu dài.

Tổng hợp lệnh Fail2ban thường dùng

  • sudo systemctl status fail2ban – kiểm tra dịch vụ Fail2ban có đang chạy hay không
  • sudo fail2ban-client status – xem danh sách toàn bộ jail đang hoạt động
  • sudo fail2ban-client status sshd – xem chi tiết IP đang bị chặn của jail sshd
  • sudo fail2ban-client set sshd unbanip [IP] – gỡ chặn (unban) một IP cụ thể
  • sudo fail2ban-client set sshd banip [IP] – chặn thủ công một IP ngay lập tức
  • sudo fail2ban-regex [log] [filter] – kiểm thử một filter có khớp đúng định dạng log hay không
  • sudo systemctl restart fail2ban – khởi động lại để áp dụng cấu hình mới

Câu hỏi thường gặp về Fail2ban

Fail2ban có thay thế được tường lửa UFW không?

Không. Fail2ban và UFW hoạt động bổ trợ cho nhau: UFW kiểm soát Port nào được phép truy cập, còn Fail2ban tự động phát hiện và chặn tạm thời các IP có hành vi tấn công dựa trên log hệ thống. Nên sử dụng đồng thời cả hai để đạt hiệu quả bảo mật tốt nhất.

Cài Fail2ban có làm chậm VPS không?

Không đáng kể. Fail2ban tiêu tốn rất ít tài nguyên CPU/RAM vì chỉ theo dõi file log và thực thi rule chặn khi cần, phù hợp với cả VPS cấu hình thấp.

Bantime để giá trị -1 có ý nghĩa gì?

Đặt bantime = -1 nghĩa là chặn IP vi phạm vĩnh viễn cho đến khi bạn chủ động unban thủ công, thay vì tự động gỡ chặn sau một khoảng thời gian.

Vì sao nên khai báo IP của mình vào ignoreip?

Vì nếu không, chính bạn cũng có thể vô tình bị Fail2ban chặn khi gõ sai mật khẩu quá số lần cho phép, gây gián đoạn công việc dù không phải là hành vi tấn công thực sự.

Làm sao biết một Filter của Fail2ban có nhận diện đúng log không?

Dùng lệnh “fail2ban-regex” trỏ đến file log thực tế và file filter tương ứng để kiểm thử trước, tránh trường hợp cấu hình jail nhưng không hề bắt được lượt đăng nhập sai nào do sai định dạng log.

Kết hợp Fail2ban cùng UFW, whitelist đúng IP tin cậy, và mở rộng bảo vệ sang các dịch vụ khác ngoài SSH sẽ giúp VPS Ubuntu của bạn có một lớp phòng thủ tự động vững chắc trước hình thức tấn công dò mật khẩu – một trong những mối đe dọa phổ biến và âm thầm nhất mà bất kỳ máy chủ công khai nào cũng phải đối mặt hàng ngày.