Fail2ban: Failregex에 사용된 정규식이 작동하지 않습니다(대괄호 ] 문제?!)

Fail2ban: Failregex에 사용된 정규식이 작동하지 않습니다(대괄호 ] 문제?!)

fall2ban을 사용하면 apache_access.log 파일의 내용을 기반으로 IP를 금지하고 싶습니다.

이것은 정규식 규칙과 일치시키려는 행의 예입니다.

197.221.254.56 - - [13/Jun/2022:22:59:59 +0200] "GET / HTTP/1.0" 400 0 "-" "-"

이것이 내 Fail2ban 사용자 정의 필터 파일입니다.

[Definition]

failregex = ^<ADDR> - - \[\S+ \S+\] "GET \/ HTTP\/1.0" 400 \S "-" "-"$
ignoreregex =

정규식은 'https://regex101.com/'과 같은 웹사이트에서 완벽하게 작동합니다.

하지만 다음과 같이 fall2ban-regex 도구를 사용할 때:

sudo fail2ban-regex /var/log/site1_access.log /etc/fail2ban/filter.d/les400enhttp1-0.conf

나는 무엇이든 일치합니다.

나는 이 간단한 정규식 규칙 을 사용해 보았습니다 . ^<ADDR> - - \[\S+ \S+ 그리고 그것 이 작동 했습니다 !

Results
=======

Failregex: 10 total
|-  #) [# of hits] regular expression
|   1) [10] ^<ADDR> - - \[\S+ \S+
`-

Ignoreregex: 0 total

Date template hits:
|- [# of hits] date format
|  [10] Day(?P<_sep>[-/])MON(?P=_sep)ExYear[ :]?24hour:Minute:Second(?:\.Microseconds)?(?: Zone offset)?
`-

Lines: 10 lines, 0 ignored, 10 matched, 0 missed
[processed in 0.03 sec]

하지만 정규식을 사용해 보면 다음과 같습니다. ^<ADDR> - - \[\S+ \S+\](왼쪽 사각형 sracket]오른쪽에 추가됨)) 'fail2ban-regex' 명령 반환:

Lines: 10 lines, 0 ignored, 0 matched, 10 missed
[processed in 0.03 sec]

|- Missed line(s):
|  36.170.59.167 - - [13/Jun/2022:22:59:59 +0200] "GET / HTTP/1.0" 400 0 "-" "-"
|  183.228.2.12 - - [13/Jun/2022:22:59:59 +0200] "GET / HTTP/1.0" 400 0 "-" "-"
|  183.228.2.12 - - [13/Jun/2022:22:59:59 +0200] "GET / HTTP/1.0" 400 0 "-" "-"
|  126.131.138.146 - - [13/Jun/2022:22:59:59 +0200] "GET / HTTP/1.0" 400 0 "-" "-"
|  197.221.254.56 - - [13/Jun/2022:22:59:59 +0200] "GET / HTTP/1.0" 400 0 "-" "-"
|  110.11.157.122 - - [13/Jun/2022:23:00:00 +0200] "GET / HTTP/1.0" 400 0 "-" "-"
|  220.135.236.27 - - [13/Jun/2022:23:00:00 +0200] "GET / HTTP/1.0" 400 0 "-" "-"
|  61.231.224.176 - - [13/Jun/2022:23:00:00 +0200] "GET / HTTP/1.0" 400 0 "-" "-"
|  106.165.107.215 - - [13/Jun/2022:23:00:00 +0200] "GET / HTTP/1.0" 400 0 "-" "-"
|  61.231.224.176 - - [13/Jun/2022:23:00:00 +0200] "GET / HTTP/1.0" 400 0 "-" "-"
`-

10개 놓쳤어요! 왼쪽 대괄호( ] )를 추가하면 예제 행 중 어느 것도 정규식과 일치하지 않습니다.

내 실수가 어디에 있는지 이해가 안 돼요... 도움을 주셔서 감사합니다 :)

답변1

당신이 원하는 것을 고전적인 방법으로 잡는 것이 더 나을 것입니다. 예:

\[.*\]

(당신이 발견한 문제를 일으키는) 날짜 패턴 부분은 분명히 Fail2ban에 의해 특별한 방식으로 처리됩니다.

다음 패턴을 시도해 보면:

\[\]

아이러니하게도 일치하는 것을 볼 수 있습니다. 이는 대괄호 안의 날짜 패턴이 제거되었음을 의미합니다. 그러니 그것을 고려하지 마십시오.

다음과 같이 사용할 수 있습니다.

^<ADDR> -.*\"(GET|POST|HEAD).*HTTP.*\"$

추신. 귀하의 failureregex는 실제로 필터 파일 내에서 주석 처리되어 있으므로 변경할 때 주석 처리를 제거하십시오.

관련 정보