Tôi đang nghịch fail2ban trong kubernetes. Để làm được điều đó, tôi đã tạo một nhóm tạo thông báo nhật ký giả mạo: 2021-08-04 18:33:13 Xác thực không thành công 15.15.15.15 Tôi đã tạo một bộ lọc tùy chỉnh để kiểm tra xem fail2ban có hoạt động hay không. Lần đầu tiên tôi thử sử dụng fail2ban-regex với một tệp chứa 10 dòng thông báo tường trình này và nhận được kết quả này:
chạy thử nghiệm
=============
Sử dụng tệp bộ lọc failregex: test, basedir: /etc/fail2ban
Sử dụng tệp nhật ký: /logs.txt
Sử dụng mã hóa: UTF-8
Kết quả
=======
Failregex: tổng cộng 10
|- #) [# lần truy cập] biểu thức chính quy
| 1) [10] \sXác thực không thành công\s<HOST>
`-
Bỏ qua regex: tổng cộng 0
Số lần truy cập mẫu ngày:
|- [# lần truy cập] định dạng ngày
| [10] Năm cũ(?P<_sep>[-/.])Tháng(?P=_sep)Ngày(?:T| ?)24giờ:Phút:Giây(?:[.,]Micro giây)?(?:\ s*Zone offset)?
`-
Dòng: 10 dòng, 0 bị bỏ qua, 10 khớp, 0 bị bỏ lỡ
[được xử lý trong 0,12 giây]
nhưng khi tôi thử cùng một bộ lọc đối với tệp chứa nhật ký liên tục, tôi gặp lỗi này:
chạy thử nghiệm
=============
Sử dụng tệp bộ lọc failregex: test, basedir: /etc/fail2ban
Sử dụng tệp nhật ký: /logs/kubernetes.logs
Sử dụng mã hóa: UTF-8
Traceback (cuộc gọi gần đây nhất cuối cùng):
Tệp "/usr/bin/fail2ban-regex", dòng 34, trong <module>
exec_command_line()
Tệp "/usr/lib/python3.8/site-packages/fail2ban/client/fail2banregex.py", dòng 836, trong exec_command_line
nếu không fail2banRegex.start(args):
Tệp "/usr/lib/python3.8/site-packages/fail2ban/client/fail2banregex.py", dòng 776, bắt đầu
self. process(test_lines)
Tệp "/usr/lib/python3.8/site-packages/fail2ban/client/fail2banregex.py", dòng 584, đang xử lý
line_datetimestripped, ret, is_ignored = self.testRegex(dòng)
Tệp "/usr/lib/python3.8/site-packages/fail2ban/client/fail2banregex.py", dòng 456, trong testRegex
tìm thấy = self._filter. processLine(dòng, ngày)
Tệp "/usr/lib/python3.8/site-packages/fail2ban/server/filter.py", dòng 613, trong processLine
timeMatch = self.dateDetector.matchTime(dòng)
Tệp "/usr/lib/python3.8/site-packages/fail2ban/server/datedetector.py", dòng 368, trong matchTime
(dòng[khoảng cách] == self.__lastPos[2] chứ không phải self.__lastPos[2].isalnum())
IndexError: chỉ mục chuỗi nằm ngoài phạm vi
Và khi tôi kích hoạt bộ lọc cho fail2ban, tôi không có ip nào bị cấm, vì vậy tôi nghĩ rằng bộ lọc của tôi không hoạt động, nhưng tôi không thể tìm ra lỗi.
bộ lọc.conf:
[Sự định nghĩa]
failregex = \sXác thực thất bại\s<HOST>