사용자 이름/비밀번호 조합을 추측하여 사용자 이름/비밀번호로 보호된 모기 서비스에 가입하려는 무차별 대입 IP 주소를 차단하기 위해 Fail2ban 필터를 작성하려고 합니다. 잘못된 세부 정보로 구독을 시도하면 mosquitto는 아래와 같이 두 줄의 로그를 작성합니다.
1544984465: New connection from 123.123.123.123 on port 1883.
1544984465: Socket error on client <unknown>, disconnecting.
나는 다음을 사용하여 이 두 줄의 패턴과 일치하는 정규식을 작성했습니다.https://regex101.com/"아나콘다 맛"으로 설정하세요. 정규식은 다음과 같습니다.
\s(?P<date>\d+)\: New connection from (?P<host>[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}) .+\n(?P=date): Socket error on client \<unknown\>, disconnecting.
불행하게도, fall2ban은 다음 정규식을 사용하여 로그에서 일치하는 항목을 찾을 수 없습니다:
# fail2ban-regex '/var/log/testlog.log' '\s(?P<date>\d+)\: New connection from (?P<host>[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}) .+\n(?P=date): Socket error on client \<unknown\>, disconnecting.'
Running tests
=============
Use failregex line : \s(?P<date>\d+)\: New connection from (?P<host>[0-...
Use log file : /var/log/testlog.log
Use encoding : UTF-8
Results
=======
Failregex: 0 total
Ignoreregex: 0 total
Date template hits:
|- [# of hits] date format
| [13] Epoch
`-
Lines: 13 lines, 0 ignored, 0 matched, 13 missed
[processed in 0.00 sec]
|- Missed line(s):
| 1544984465: New connection from 123.123.123.123 on port 1883.
| 1544984465: Socket error on client <unknown>, disconnecting.
| 1544984466: New connection from 123.123.123.123 on port 1883.
| 1544984466: Socket error on client <unknown>, disconnecting.
| 1544984468: New connection from 123.123.123.123 on port 1883.
| 1544984468: Socket error on client <unknown>, disconnecting.
| 1544984469: New connection from 123.123.123.123 on port 1883.
| 1544984469: Socket error on client <unknown>, disconnecting.
| 1544984470: New connection from 123.123.123.123 on port 1883.
| 1544984470: Socket error on client <unknown>, disconnecting.
| 1544984471: New connection from 123.123.123.123 on port 1883.
| 1544984471: Socket error on client <unknown>, disconnecting.
| 1544984473: New connection from 123.123.123.123 on port 1883.
`-
Fail2ban 버전은 0.9.6-1.el6.1입니다. Centos 6 서버에서 실행됩니다.
답변1
글쎄, 내가 해냈어. 질문은 다음과 같습니다.
정규식(failregex,ignoreregex)은 날짜/시간이 로그 줄에서 제거되었다고 가정합니다(fail2ban이 ATM에서 내부적으로 작동하는 방식입니다). 원천:https://fail2ban.readthedocs.io/en/latest/filters.html
필터링하려면 maxlines = 2를 추가해야 합니다.
최종/작업 필터는 다음과 같습니다:
[Init]
maxlines = 2
[Definition]
failregex = .+ New connection from <HOST> on port \d+\.\n.+Socket error on client <unknown>
ignoreregex =