Vì vậy, tôi đã thực hiện một loạt nghiên cứu về cách thực hiện việc này sau khi xem cùng một địa chỉ IP lần lượt đánh vào cụm máy chủ web của tôi. Vì tôi đang sử dụng AWS, tôi cho rằng có thể có một cách dễ dàng và nó hoạt động rất tốt trong hai ngày đầu thử nghiệm 5 máy chủ.
Điều đầu tiên tôi khuyên là tạm thời vô hiệu hóa SELinux, chúng tôi sẽ giải quyết vấn đề này vào cuối. Tôi không phải là chuyên gia của Selinux nhưng những gì tôi đã làm cho đến nay.
Yêu cầu chính là nguồn tệp chia sẻ, tôi sử dụng AWS EFS. Khi ổ đĩa mới được cung cấp và gắn kết, tôi đã thay đổi logtarget bên trong /etc/fail2ban/fail2ban.conf thành thư mục con trong ổ EFS.
logtarget = /efsmount/fail2ban/server1.log
Sau đó, tôi đã viết một bộ lọc đơn giản và đặt nó vào /etc/fail2ban/filter.d/fail2ban-log.conf
[Definition]
failregex = .* Ban <HOST>
ignoreregex =
Đã thêm bộ lọc vào /etc/fail2ban/jail.local
[fail2ban-log]
enabled = true
port = http,https
findtime = 86400 ; 1 day
logpath = /efsmount/fail2ban/server1.log
/efsmount/fail2ban/server2.log
/efsmount/fail2ban/server3.log
/efsmount/fail2ban/server4.log
maxretry = 1
Sau đó khởi động lại fail2ban
sudo fail2ban-client reload
Càng xa càng tốt! Không có phần đau đớn là SELinux. Sau khi tôi để fail2ban chạy một chút, tôi đã chạy lệnh này cho phép fail2ban thông qua các bộ lọc.
sudo grep fail2ban /var/log/audit/audit.log | sudo audit2allow -M fail2ban-nfs
Audit2allow sẽ bảo bạn chạy lệnh này
sudo semodule -i fail2ban-nfs.pp
Tôi vẫn đang kiểm tra nhật ký SELinux của mình ở đây và ở đó để xem liệu có thêm từ chối nào không. Nếu bất cứ ai có một mẹo về cách làm cho Selinux rõ ràng đó bằng một phương pháp khác sẽ rất tuyệt vời.
sudo cat /var/log/audit/audit.log |grep fail2ban |grep denied
Tại thời điểm này tôi vẫn gặp lỗi khi khởi động lại fail2ban. Có một lỗi khi sử dụng action = action_mwl trong jail.local. Sau một chút loay hoay, tôi thấy cái này đang hoạt động cho đến nay. Từ những gì tôi đọc được vì dòng ngắt trong chỉ thị logpath trỏ đến nhiều tệp. Tôi đã thử với dấu phẩy, dấu cách, v.v. không có gì khác hoạt động với action_mwl.
action_mwm = %(banaction)s[name=%(__name__)s, bantime="%(bantime)s", port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]
%(mta)s-whois-matches[name=%(__name__)s, dest="%(destemail)s", chain="%(chain)s"]
action = %(action_mwm)s
Đừng quên bật lại Selinux!