Fail2Ban 맞춤 필터가 적용되지 않았습니다.

Fail2Ban 맞춤 필터가 적용되지 않았습니다.

나는Fail2ban의 사용자 정의 감옥 규칙, 그러나 결코 적용되지 않습니다.

그러한 공식 문서를 찾지 못했기 때문에 뭔가 놓쳤을 수도 있습니다.

/etc/fail2ban/filter.d/expressjs.conf

[Definition]
failregex = .* from ip <HOST>

/etc/fail2ban/jail.conf

[express-js]
enabled  = true
filter   = expressjs
logpath  = /var/log/expressjs/slowin-killer.log
maxretry = 5
bantime  = 3600
findtime = 600

/var/log/expressjs/slowin-killer.log

[20-5-2017 20:49:57] Failed to authentificate user "[email protected]" from ip 127.0.0.1
[20-5-2017 20:57:19] Failed to authentificate user "[email protected]" from ip 127.0.0.1
[20-5-2017 20:59:20] Failed to authentificate user "[email protected]" from ip 127.0.0.1
[20-5-2017 21:12:47] Failed to authentificate user "[email protected]" from ip 127.0.0.1
[20-5-2017 21:16:9] Failed to authentificate user "[email protected]" from ip 127.0.0.1

오류 메시지는 없지만 감옥이 활성화된 것 같습니다...

$ fail2ban-client status expressjs
Status for the jail: expressjs
|- Filter
|  |- Currently failed: 0
|  |- Total failed: 0
|  `- File list:    /var/log/expressjs/slowin-killer.log
`- Actions
   |- Currently banned: 0
   |- Total banned: 0
   `- Banned IP list:   

그리고 이상한 점은 정규 표현식이 괜찮다는 것입니다 ...

failure2ban-regex /var/log/expressjs/slowin-killer.log /etc/fail2ban/filter.d/expressjs.conf

Running tests
=============

Use   failregex filter file : expressjs, basedir: /etc/fail2ban
Use         log file : /var/log/expressjs/slowin-killer.log
Use         encoding : UTF-8


Results
=======

Failregex: 27 total
|-  #) [# of hits] regular expression
|   1) [27] .* from ip <HOST>
`-

Ignoreregex: 0 total

Date template hits:
|- [# of hits] date format
|  [34] Day(?P<_sep>[-/])Month(?P=_sep)(?:Year|Year2) 24hour:Minute:Second
|  [1] (?:DAY )?MON Day Year 24hour:Minute:Second(?:\.Microseconds)?
`-

Lines: 162 lines, 0 ignored, 27 matched, 135 missed
[processed in 0.01 sec]

Missed line(s): too many to print.  Use --print-all-missed to print all 135 lines

답변1

필터가 작동하려면 누락된 부분이 있으며 수정해야 할 사항이 있습니다.

  1. 내부에는 iptables 자동 차단/거부 규칙을 생성하려면 10분(600초) 동안 5번의 시도 실패(정규식 일치)가 필요하다는 것을 의미 합니다 expressjs.conf. 맨페이지:findtime = 600maxretry = 5jail.conf
   findtime
          time interval (in seconds) before the current time where failures will count towards a ban.

   maxretry
          number of failures that have to occur in the last findtime seconds to ban then IP.

로그를 살펴보면 여기에 붙여넣은 로그의 첫 번째 로그 항목과 마지막 로그 항목(5회 시도) 사이에 10분 이상이 있습니다. 첫 번째: 20:49, 마지막:21:16

  1. 모든 로그의 출처는 입니다 127.0.0.1. 블록 jail.conf내부를 보면 기본 구성 [DEFAULT]을 찾을 수 있습니다 ignoreip = 127.0.0.1/8. 이를 변경하지 않는 한, 내부 통신을 위해 이 주소를 사용하는 다른 소프트웨어를 중단시키므로 로컬 호스트 주소를 차단하는 것은 매우 위험합니다.

  2. expressjs.conf구성이 설정 되어 있지 않으므로 Fail2ban datepattern =은 로그 파일의 어느 부분이 날짜인지 추측할 수 없습니다. 파일 에서 몇 가지 예를 얻으면 또는 /etc/fail2ban/filter.d같은 날짜 정규식을 찾을 수 있습니다 . 여기서 또 다른 문제는 로그 날짜의 "두 번째" 부분에 초 < 10(예: 마지막 로그) 에 후행 0이 없으므로 이 문제를 해결해야 한다는 것입니다.datepattern = ^L %%d/%%m/%%Y - %%H:%%M:%%Sdatepattern = ^%%Y:%%m:%%d-%%H:%%M:%%S21:16:9

다음을 살펴보세요.Fail2ban 공식 위키예제를 얻고 필터를 더 좋게 만들 수 있습니다. 고쳐야 할 것이 많습니다.

관련 정보