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. 내부적으로 이를 expressjs.conf설정했습니다. 즉, 자동 차단/거부 iptables 규칙을 생성하려면 10분(600초) 기간 내에 5번의 시도 실패(정규식 일치)가 있어야 합니다. 맨페이지: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.

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

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

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

보세요Fail2ban 공식 위키예제를 얻고 필터를 개선하세요. 정리할 게 많으시네요.

관련 정보