- 1. Giới thiệu
- 2. Fail2Ban là gì ?
- 3. Các thành phần chính của Fail2Ban
- 4. Điều kiện chuẩn bị
- 5. Kiểm tra hệ điều hành
- 6. Cài đặt Fail2Ban trên Ubuntu và Debian
- 7. Cài đặt Fail2Ban trên AlmaLinux, Rocky Linux và RHEL
- 8. Cấu trúc thư mục cấu hình Fail2Ban
- 9. Cấu hình các thông số mặc định
- 10. Cấu hình Fail2Ban bảo vệ SSH
- 11. Cấu hình khi SSH sử dụng port tùy chỉnh
- 12. Lựa chọn backend phù hợp
- 13. Kiểm tra trạng thái Jail SSH
- 14. Theo dõi log của Fail2Ban
- 15. Gỡ chặn một địa chỉ IP
- 16. Whitelist IP quản trị
- 17. Tổng kết
1. Giới thiệu #
Máy chủ Linux khi được kết nối trực tiếp với Internet thường xuyên trở thành mục tiêu của các công cụ dò quét tự động. Trong đó, một trong những hình thức tấn công phổ biến nhất là Brute Force – kẻ tấn công liên tục thử nhiều tên đăng nhập và mật khẩu khác nhau nhằm chiếm quyền truy cập vào máy chủ.
Các dịch vụ thường bị nhắm đến gồm:
- SSH
- FTP
- Web Server
- Mail Server
- Trang quản trị hệ thống
- Các ứng dụng có chức năng đăng nhập
Để hạn chế những hành vi này, Quý Khách có thể sử dụng Fail2Ban.
Fail2Ban hoạt động bằng cách theo dõi log của dịch vụ. Khi phát hiện một địa chỉ IP có quá nhiều lần đăng nhập thất bại trong khoảng thời gian nhất định, Fail2Ban sẽ tự động thêm rule vào firewall để chặn địa chỉ IP đó. Trong bài viết này, chúng ta sẽ cài đặt Fail2Ban và cấu hình bảo vệ dịch vụ SSH trên máy chủ Linux.
2. Fail2Ban là gì ? #
Fail2Ban là một công cụ bảo mật mã nguồn mở dành cho hệ điều hành Linux. Công cụ này giúp hạn chế các cuộc tấn công dò mật khẩu bằng cách phân tích log của dịch vụ và chặn những địa chỉ IP có hành vi bất thường.
Quy trình hoạt động cơ bản của Fail2Ban gồm:
- Theo dõi log của dịch vụ.
- Phát hiện các lần xác thực thất bại.
- Xác định địa chỉ IP tạo ra những lần thất bại đó.
- Đếm số lần vi phạm trong một khoảng thời gian.
- Chặn IP thông qua firewall khi vượt quá ngưỡng cho phép.
- Tự động gỡ chặn sau khi hết thời gian quy định.
Ví dụ, có thể cấu hình Fail2Ban theo chính sách:
- Theo dõi các lần đăng nhập SSH thất bại trong 10 phút.
- Nếu một IP nhập sai mật khẩu 5 lần, IP đó sẽ bị chặn.
- Thời gian chặn là 1 giờ.
- Sau 1 giờ, Fail2Ban tự động gỡ rule chặn.
Fail2Ban có thể làm việc với nhiều cơ chế firewall khác nhau như:
- iptables
- nftables
- UFW
- firewalld
3. Các thành phần chính của Fail2Ban #
Để cấu hình Fail2Ban hiệu quả, cần hiểu ba thành phần chính gồm Jail, Filter và Action.
3.1. Jail #
Jail là một nhóm cấu hình dùng để bảo vệ một dịch vụ cụ thể.
Mỗi jail sẽ xác định:
- Dịch vụ cần bảo vệ.
- Port cần chặn.
- File log hoặc nguồn log cần theo dõi.
- Filter được sử dụng.
- Số lần vi phạm cho phép.
- Khoảng thời gian theo dõi.
- Thời gian chặn IP.
- Hành động sẽ được thực hiện khi IP vi phạm.
Ví dụ:
- Jail
sshdbảo vệ dịch vụ SSH. - Jail
nginx-http-authbảo vệ HTTP Authentication trên Nginx. - Jail
postfixtheo dõi hành vi bất thường liên quan đến Postfix.
3.2. Filter #
Filter chứa các biểu thức chính quy, còn gọi là failregex, dùng để xác định những dòng log nào được xem là hành vi đăng nhập thất bại.
Các filter mặc định thường được lưu tại:
/etc/fail2ban/filter.d/
Ví dụ filter dành cho SSH:
/etc/fail2ban/filter.d/sshd.conf
Fail2Ban sẽ so sánh các dòng log mới với biểu thức trong file filter. Nếu log khớp với mẫu thất bại, bộ đếm vi phạm của IP sẽ tăng lên.
3.3. Action #
Action xác định hành động Fail2Ban cần thực hiện khi một địa chỉ IP vượt quá số lần vi phạm cho phép.
Thông thường, action sẽ:
- Tạo rule firewall.
- Chặn IP vi phạm.
- Gỡ rule khi hết thời gian chặn.
- Gửi email cảnh báo nếu được cấu hình.
Các file action thường nằm tại:
/etc/fail2ban/action.d/
4. Điều kiện chuẩn bị #
Trước khi cài đặt, cần chuẩn bị:
- Máy chủ đang chạy hệ điều hành Linux.
- Tài khoản
roothoặc tài khoản có quyềnsudo. - Dịch vụ SSH đang hoạt động.
- Có quyền truy cập console, KVM hoặc giao diện quản trị VPS trong trường hợp bị khóa SSH.
- Biết port SSH hiện tại của máy chủ.
- Firewall trên máy chủ hoạt động bình thường.
Trong bài viết này, phần hướng dẫn chính được thực hiện trên Ubuntu hoặc Debian.
5. Kiểm tra hệ điều hành #
Kiểm tra phiên bản hệ điều hành bằng lệnh:
cat /etc/os-release
Có thể kiểm tra thêm thông tin kernel:
uname -r
6. Cài đặt Fail2Ban trên Ubuntu và Debian #
Cập nhật danh sách package và cài đặt Fail2Ban
sudo apt update
sudo apt install fail2ban -y
Kiểm tra phiên bản đã cài đặt, khởi động Fail2Ban và cấu hình tự khởi động cùng hệ thống:
fail2ban-client version
sudo systemctl enable --now fail2ban
Kiểm tra trạng thái:
sudo systemctl status fail2ban
sudo systemctl is-enabled fail2ban
sudo systemctl is-active fail2ban
7. Cài đặt Fail2Ban trên AlmaLinux, Rocky Linux và RHEL #
Đối với các hệ điều hành thuộc họ RHEL, Fail2Ban thường được cung cấp thông qua repository EPEL.
Cài đặt EPEL:
sudo dnf install epel-release -y
Cài đặt Fail2Ban:
sudo dnf install fail2ban -y
Khởi động dịch vụ:
sudo systemctl enable --now fail2ban
Kiểm tra trạng thái:
sudo systemctl status fail2ban
8. Cấu trúc thư mục cấu hình Fail2Ban #
Các file cấu hình chính của Fail2Ban nằm trong thư mục:
/etc/fail2ban/
Một số file và thư mục quan trọng:
/etc/fail2ban/fail2ban.conf
/etc/fail2ban/jail.conf
/etc/fail2ban/jail.local
/etc/fail2ban/jail.d/
/etc/fail2ban/filter.d/
/etc/fail2ban/action.d/
Trong đó:
fail2ban.conf: cấu hình hoạt động của daemon Fail2Ban.jail.conf: chứa cấu hình jail mặc định.jail.local: chứa các cấu hình tùy chỉnh của quản trị viên.jail.d/: chứa các file cấu hình jail riêng biệt.filter.d/: chứa các filter dùng để phân tích log.action.d/: chứa các action dùng để ban và unban IP.

Không nên chỉnh sửa trực tiếp file:
/etc/fail2ban/jail.conf
Nguyên nhân là các thay đổi trong file này có thể bị ghi đè khi package Fail2Ban được cập nhật. Thay vào đó, nên tạo file .local trong thư mục:
/etc/fail2ban/jail.d/
Ví dụ:
/etc/fail2ban/jail.d/sshd.local
Cách này giúp cấu hình gọn hơn, dễ kiểm tra và hạn chế ảnh hưởng khi nâng cấp phần mềm.
9. Cấu hình các thông số mặc định #
Có thể tạo một file chứa các thông số áp dụng chung cho tất cả jail:
sudo nano /etc/fail2ban/jail.d/defaults.local
Thêm nội dung:
[DEFAULT]
ignoreip = 127.0.0.1/8 ::1
bantime = 1h
findtime = 10m
maxretry = 5
Ý nghĩa của các thông số:
- ignoreip: Xác định các địa chỉ IP không bị Fail2Ban chặn. Ví dụ: ignoreip = 127.0.0.1/8 ::1
Cấu hình trên bỏ qua:
- Địa chỉ loopback IPv4.
- Địa chỉ loopback IPv6.
Có thể thêm IP quản trị cố định:
- ignoreip = 127.0.0.1/8 ::1 x.x.x.x
- ignoreip = 127.0.0.1/8 ::1 x.x.x.x/24
Không nên whitelist một dải IP quá rộng vì có thể làm giảm hiệu quả bảo vệ.
- bantime: Xác định thời gian một địa chỉ IP bị chặn.
- findtime: Xác định khoảng thời gian Fail2Ban dùng để đếm số lần vi phạm.
- maxretry: Xác định số lần thất bại tối đa được cho phép trong
findtime.
10. Cấu hình Fail2Ban bảo vệ SSH #
Tạo file cấu hình riêng cho SSH:
sudo nano /etc/fail2ban/jail.d/sshd.local
Quý Khách thêm nội dung sau:
[sshd]
enabled = true
port = ssh
filter = sshd
backend = systemd
maxretry = 5
findtime = 10m
bantime = 1h
Ý nghĩa:
enabled = true: kích hoạt jail.port = ssh: bảo vệ port SSH mặc định.filter = sshd: sử dụng filter SSH có sẵn.backend = systemd: đọc log từ systemd journal.maxretry = 5: chặn sau 5 lần thất bại.findtime = 10m: đếm các lần thất bại trong 10 phút.bantime = 1h: chặn IP trong 1 giờ.

Kiểm tra cấu hình trước khi restart:
sudo fail2ban-client -t
Nếu cấu hình hợp lệ, kết quả sẽ hiển thị:
OK: configuration test is successful
Khởi động lại Fail2Ban:
sudo systemctl restart fail2ban
Kiểm tra danh sách jail:
sudo fail2ban-client status

11. Cấu hình khi SSH sử dụng port tùy chỉnh #
Port SSH mặc định là 22. Tuy nhiên, nhiều hệ thống thay đổi port SSH để hạn chế các lượt dò quét tự động.
Kiểm tra port SSH hiện tại:
sudo sshd -T | grep '^port'
Trong trường hợp SSH sử dụng port 2244, chỉnh file:
sudo nano /etc/fail2ban/jail.d/sshd.local
Cấu hình:
[sshd]
enabled = true
port = 2244
filter = sshd
backend = systemd
maxretry = 5
findtime = 10m
bantime = 1h
Kiểm tra và khởi động lại:
sudo fail2ban-client -t
sudo systemctl restart fail2ban
Quý Khách không nên giữ port = ssh nếu dịch vụ thực tế đang lắng nghe trên một port khác.
12. Lựa chọn backend phù hợp #
Backend xác định cách Fail2Ban đọc log. Trên các hệ thống Linux hiện đại sử dụng systemd, có thể sử dụng:
backend = systemd
Khi sử dụng backend này, Fail2Ban đọc dữ liệu từ systemd journal và thường không cần khai báo logpath. Trên hệ thống ghi log SSH vào file /var/log/auth.log, có thể sử dụng:
backend = auto
logpath = /var/log/auth.log
Ví dụ:
[sshd]
enabled = true
port = ssh
filter = sshd
backend = auto
logpath = /var/log/auth.log
maxretry = 5
findtime = 10m
bantime = 1h
Trên AlmaLinux, Rocky Linux hoặc RHEL, log xác thực có thể nằm tại:
/var/log/secure
Do đó có thể cấu hình:
logpath = /var/log/secure
Không nên đồng thời khai báo sai logpath khi sử dụng backend = systemd, vì có thể khiến jail không đọc được đúng nguồn log.
13. Kiểm tra trạng thái Jail SSH #
Quý Khách xem danh sách jail đang hoạt động:
sudo fail2ban-client status
Và xem chi tiết jail SSH:
sudo fail2ban-client status sshd
14. Theo dõi log của Fail2Ban #
Log Fail2Ban thường được lưu tại:
/var/log/fail2ban.log
Theo dõi log theo thời gian thực:
sudo tail -f /var/log/fail2ban.log
Tìm các sự kiện ban và unban:
sudo grep -Ei "Ban|Unban" /var/log/fail2ban.log
Có thể xem log thông qua systemd:
sudo journalctl -u fail2ban
Theo dõi trực tiếp:
sudo journalctl -u fail2ban -f
Xem log trong một giờ gần nhất:
sudo journalctl -u fail2ban --since "1 hour ago"
15. Gỡ chặn một địa chỉ IP #
Để gỡ chặn một IP khỏi jail SSH:
sudo fail2ban-client set sshd unbanip x.x.x.x
Kiểm tra lại:
sudo fail2ban-client status sshd
Lệnh này thường được sử dụng khi IP của Quý Khách bị chặn do nhập sai mật khẩu nhiều lần.
16. Whitelist IP quản trị #
Trước khi thử nghiệm Fail2Ban, nên whitelist địa chỉ IP quản trị cố định để tránh tự khóa quyền truy cập.
Quý Khách chỉnh file:
sudo nano /etc/fail2ban/jail.d/defaults.local
Cấu hình:
[DEFAULT]
ignoreip = 127.0.0.1/8 ::1 x.x.x.x
Whitelist nhiều IP:
ignoreip = 127.0.0.1/8 ::1 x.x.x.x x.x.x.x
Whitelist subnet:
ignoreip = 127.0.0.1/8 ::1 x.x.x.x/24
Sau khi thay đổi:
sudo fail2ban-client -t
sudo systemctl restart fail2ban
17. Tổng kết #
Fail2Ban là một công cụ đơn giản nhưng hiệu quả trong việc bảo vệ máy chủ Linux trước các cuộc tấn công dò mật khẩu.
Bằng cách phân tích log và tự động chặn những địa chỉ IP có quá nhiều lần xác thực thất bại, Fail2Ban giúp giảm đáng kể lượng truy cập độc hại đến các dịch vụ như SSH, Nginx, Apache, FTP và Mail Server.
Đối với một máy chủ mới triển khai, Quý Khách nên bắt đầu bằng việc kích hoạt jail cho SSH. Sau khi kiểm tra hệ thống hoạt động ổn định, có thể mở rộng thêm các jail dành cho web server, mail server hoặc ứng dụng nội bộ.
Tuy nhiên, để xây dựng một hệ thống an toàn, Fail2Ban cần được kết hợp với firewall, SSH key, chính sách mật khẩu phù hợp, giới hạn quyền truy cập và quy trình giám sát log định kỳ.
Nếu Quý Khách cần hỗ trợ có thể liên hệ qua các kênh sau:
- Tổng đài hỗ trợ khách hàng: 1900 6806 – phím 2
- Email: support@vHost.vn
- Ticket: https://members.vhost.vn/tickets/new/
