Bảo mật máy chủ Linux luôn là ưu tiên hàng đầu đối với các quản trị viên hệ thống, đặc biệt trong bối cảnh các cuộc tấn công brute-force và xâm nhập trái phép ngày càng gia tăng. Một trong những giải pháp hiệu quả và dễ triển khai để ngăn chặn tình trạng này là sử dụng Fail2ban.
Fail2ban là một công cụ mã nguồn mở giúp tự động giám sát các file log, phát hiện các hành vi đăng nhập bất thường và tự động chặn địa chỉ IP có dấu hiệu tấn công vào máy chủ. Việc cài đặt và cấu hình Fail2ban không quá phức tạp, nhưng hiệu quả mang lại trong việc phòng chống các mối nguy hại lại vô cùng lớn.
Trong bài viết này, chúng tôi sẽ hướng dẫn chi tiết cách bảo vệ máy chủ Linux của bạn với Fail2ban, từ khâu cài đặt đến cấu hình và tối ưu hóa, đảm bảo hệ thống của bạn luôn an toàn trước những mối đe dọa phổ biến hiện nay.

Cài đặt
Fail2ban có sẵn trong kho phần mềm của Ubuntu.
Để cài đặt, bạn sử dụng lệnh sau:
sudo apt install fail2ban
Lưu ý: Trên Ubuntu 22.04, Fail2ban sẽ bị tắt dịch vụ sau khi cài đặt do một số thiết lập mặc định có thể gây ra hành vi không mong muốn. Ngược lại, trên Ubuntu 24.04, dịch vụ này được kích hoạt mặc định.
Bạn có thể kiểm tra trạng thái dịch vụ bằng lệnh:
sudo systemctl status fail2ban
Đến đây là xong bước cài đặt.
Cấu hình trước khi sử dụng
Các tập tin cấu hình của Fail2ban nằm trong thư mục /etc/fail2ban/.
Khi liệt kê nội dung thư mục này, bạn sẽ thấy hai tập tin cấu hình quan trọng: fail2ban.conf và jail.conf.
fail2ban.confchứa các thiết lập toàn cục của Fail2ban, không nên chỉnh sửa trực tiếp.jail.confchứa các “jail” (các bộ lọc và hành động tương ứng).
Không nên chỉnh sửa trực tiếp các tập tin này vì khi cập nhật, các thay đổi có thể bị ghi đè.
Do đó, Fail2ban khuyến nghị bạn tạo bản sao cục bộ của các tập tin này để chỉnh sửa.
Bạn thực hiện bằng cách:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo cp /etc/fail2ban/fail2ban.conf /etc/fail2ban/fail2ban.local
Bây giờ bạn có thể chỉnh sửa an toàn các tập tin cấu hình này.
Cấu hình
Mở tập tin jail.local bằng trình soạn thảo bạn thích để kiểm tra các thiết lập.
Trong phần [DEFAULT] là các thiết lập áp dụng cho tất cả các dịch vụ được Fail2ban bảo vệ.
Ngoài ra, còn có các phần riêng biệt theo từng dịch vụ (jail cụ thể), ví dụ như [sshd], nơi bạn có thể ghi đè các thiết lập mặc định.
Một số biến quan trọng trong phần [DEFAULT] mà bạn có thể muốn thay đổi:
bantime: Thời gian chặn IP sau khi phát hiện tấn công (mặc định 10 phút). Bạn có thể đổi thành60mđể chặn trong 1 giờ.findtimevàmaxretry: Hai biến này xác định điều kiện để chặn IP.maxretrylà số lần thử đăng nhập sai tối đa trong khoảng thời gianfindtime.- Mặc định, nếu một IP thử đăng nhập sai hơn 5 lần trong 10 phút, IP đó sẽ bị chặn.
ignoreip: Danh sách các IP, mạng con (CIDR) hoặc tên miền mà Fail2ban sẽ không chặn. Mặc định dòng này bị comment. Bạn nên bỏ dấu # và thêm IP của mình vào để tránh bị khóa nhầm.
Cảnh báo qua email
Việc nhận cảnh báo qua email khi Fail2ban chặn IP là rất hữu ích.
Để cấu hình, bạn cần chỉnh hai biến trong jail.local:
destemail: Địa chỉ email nhận cảnh báo.sender: Địa chỉ email gửi cảnh báo.
Chú ý: Địa chỉ gửi phải có dạng:
sender = root@example.com
Không nên dùng hostname phức tạp như:
sender = root@host.example.com
Biến mta dùng để xác định chương trình gửi mail (mặc định là Sendmail). Nếu bạn dùng Postfix thì không cần thay đổi gì vì Fail2ban tự động nhận biết.
Hành động mặc định
Trong tập tin jail.local, biến action xác định hành động khi chặn IP:
action = %(action_)s
Mặc định, Fail2ban chỉ thêm luật tường lửa để từ chối kết nối từ IP đó, và sẽ tự động gỡ sau khi hết bantime.
Tuy nhiên hành động mặc định không gửi email cảnh báo, vì vậy bạn cần đổi thành:
action = %(action_mwl)s
action_mwl: Vừa chặn IP, vừa gửi email cảnh báo và ghi log.- Ngoài ra còn có các lựa chọn khác như
action_mw(gửi mail nhưng không ghi log) hayaction_cf_mwl(gửi mail, ghi log và cập nhật Cloudflare).
Các jail riêng biệt
Mỗi jail tương ứng với một dịch vụ hoặc bộ lọc riêng biệt. Ví dụ jail [sshd] dùng để bảo vệ SSH khỏi truy cập trái phép.
Mỗi jail cần được kích hoạt bằng dòng:
enabled = true
Mặc định chỉ jail [sshd] được bật, các jail khác đều tắt.
Bạn có thể mở file /etc/fail2ban/jail.d/defaults-debian.conf để xem jail [sshd] đã được bật.
Nếu bạn thay đổi cổng SSH, hãy cập nhật biến port trong phần này cho đúng.
Nếu bạn sử dụng NGINX và muốn bảo vệ trang web bằng mật khẩu, có thể bật jail [nginx-http-auth].
Khởi động Fail2ban
Vì jail [sshd] được bật sẵn, bạn có thể khởi động và kích hoạt dịch vụ Fail2ban bằng lệnh:
sudo systemctl start fail2ban
sudo systemctl enable fail2ban
Kiểm tra các jail đang hoạt động:
sudo fail2ban-client status
Ví dụ kết quả:
Status
|- Number of jail: 1
`- Jail list: sshd
Xem chi tiết một jail cụ thể, ví dụ sshd:
sudo fail2ban-client status sshd
Kết quả ví dụ:
Status for the jail: sshd
|- Filter
| |- Currently failed: 5
| |- Total failed: 21
| `- File list: /var/log/auth.log
`- Actions
|- Currently banned: 1
|- Total banned: 2
`- Banned IP list: 326.22.8.42
Nếu bạn đã tắt xác thực bằng mật khẩu cho SSH, số lần thất bại sẽ bằng 0.
Kết luận
Fail2ban là công cụ bảo mật hiệu quả giúp bảo vệ máy chủ khỏi các cuộc tấn công tự động bằng cách phát hiện và chặn các địa chỉ IP có hành vi đăng nhập sai nhiều lần. Việc cài đặt và cấu hình Fail2ban trên Ubuntu rất đơn giản, đồng thời cung cấp khả năng tùy chỉnh linh hoạt qua các tập tin cấu hình như jail.local.
Bằng cách thiết lập đúng bantime, findtime, maxretry và cấu hình cảnh báo email, bạn có thể nâng cao mức độ an toàn cho hệ thống đồng thời nhận được thông báo kịp thời khi có nguy cơ tấn công. Ngoài ra, Fail2ban hỗ trợ nhiều dịch vụ khác nhau như SSH, NGINX, Apache, giúp bảo vệ toàn diện cho máy chủ của bạn. Để đảm bảo hiệu quả lâu dài, bạn nên thường xuyên kiểm tra trạng thái và nhật ký hoạt động của Fail2ban.
Kết hợp với việc cập nhật phần mềm đều đặn, Fail2ban sẽ là lớp bảo vệ vững chắc giúp ngăn chặn các truy cập trái phép, giảm thiểu rủi ro mất an toàn thông tin cho máy chủ và hệ thống mạng của bạn. Đây là giải pháp không thể thiếu cho mọi quản trị viên hệ thống.









