나는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
필터가 작동하려면 누락된 부분이 있으며 수정해야 할 사항이 있습니다.
- 내부에는 iptables 자동 차단/거부 규칙을 생성하려면 10분(600초) 동안 5번의 시도 실패(정규식 일치)가 필요하다는 것을 의미 합니다
expressjs.conf
. 맨페이지:findtime = 600
maxretry = 5
jail.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
모든 로그의 출처는 입니다
127.0.0.1
. 블록jail.conf
내부를 보면 기본 구성[DEFAULT]
을 찾을 수 있습니다ignoreip = 127.0.0.1/8
. 이를 변경하지 않는 한, 내부 통신을 위해 이 주소를 사용하는 다른 소프트웨어를 중단시키므로 로컬 호스트 주소를 차단하는 것은 매우 위험합니다.expressjs.conf
구성이 설정 되어 있지 않으므로 Fail2bandatepattern =
은 로그 파일의 어느 부분이 날짜인지 추측할 수 없습니다. 파일 에서 몇 가지 예를 얻으면 또는/etc/fail2ban/filter.d
같은 날짜 정규식을 찾을 수 있습니다 . 여기서 또 다른 문제는 로그 날짜의 "두 번째" 부분에 초 < 10(예: 마지막 로그) 에 후행 0이 없으므로 이 문제를 해결해야 한다는 것입니다.datepattern = ^L %%d/%%m/%%Y - %%H:%%M:%%S
datepattern = ^%%Y:%%m:%%d-%%H:%%M:%%S
21:16:9
다음을 살펴보세요.Fail2ban 공식 위키예제를 얻고 필터를 더 좋게 만들 수 있습니다. 고쳐야 할 것이 많습니다.