Fail2ban을 사용하는 방법과 감옥을 구성하는 방법을 알고 있지만 실제로 작동하는 방식이 마음에 들지 않습니다.
문제는 내 호기심을 자극한 특별한 감옥 옵션이 하나 있다는 것입니다 findtime
.
사용해야 하는 필터를 구성할 때주인Fail2ban이 어떤 IP를 비교하고 필요한 경우 금지할지 알 수 있도록 키워드(IP 주소 일치). 괜찮은.
하지만 시간 같은 건 없습니다. fall2ban은 TIME
키워드가 없기 때문에 로그 파일에 줄이 언제 추가되었는지 정확히 알 수 있는 방법이 없습니다. 그렇죠? 실제로 모든 타임라인에서 파일을 검색하고 계속 작동할 수 있습니다.
이는 FAIL2BAN이 주기적으로 파일을 스캔한다는 것을 의미하는 것 같습니다. 내부적으로 스캔 시간을 설정하여 findtime
자체 스캔 날짜와 비교하여 옵션을 처리할 수 있습니다.
우선, 내 말이 맞지? 그렇다면 스캔 주파수는 얼마입니까? 자주 검사해야 하는 대용량 로그 파일이 많으면 병목 현상이 발생하지 않을까요?
그렇다면 스캔 빈도가 옵션보다 좋으면 findtime
어떻게 될까요 ? 이것은 Fail2ban이 findtime
최소 스캔 빈도를 설정하기 위해 찾은 가장 작은 옵션 에 적응한다는 것을 의미합니까 ?
답변1
첫 번째. 이것은 (아마도) 답변은 아니지만 주석(그리고 약간 긴)보다 더 나을 수도 있습니다.
타임스탬프
귀하의 진술을 찾으십시오 :
실제로 모든 타임라인에서 파일을 검색하고 계속 작동할 수 있습니다.
문서와 충돌합니다. 무슨 뜻이에요일하다?
실패한 정규식을 직접 작성하려면 다음 사항을 알아야 합니다.
[...]
로그 줄이 실패 정규식과 일치하려면 실제로 두 부분이 일치해야 합니다.줄의 시작은 타임스탬프 패턴 또는 정규 표현식과 일치해야 합니다., 나머지 줄은 실패한 정규식과 일치해야 합니다.Failregex가 앞에 ^로 고정되어 있는 경우 앵커는 타임스탬프와 중간 공백 뒤의 나머지 줄의 시작을 참조합니다.
타임스탬프와 일치하는 패턴이나 정규식은 현재 기록되지 않으며 사용자가 읽거나 설정할 수 없습니다. 바라보다데비안 버그 #491253. 로그에 어떤 줄도 일치할 수 없으므로 실패2ban이 예상하지 않는 타임스탬프 형식이 있는 경우 문제가 발생합니다. 따라서 샘플 로그 줄(아래 예 참조)에 대해 실패한 새 정규식을 테스트하여 일치하는지 확인해야 합니다.Fail2ban이 로그 타임스탬프를 인식하지 못하는 경우 두 가지 옵션이 있습니다. 위의 예제 로그 줄과 같이 로깅에 보다 일반적인 타임스탬프 형식을 사용하도록 데몬을 재구성하거나 타임스탬프 형식을 요청하는 버그 보고서를 제출하십시오.
로그 파일은 다음과 같을 수 있습니다.구성된타임스탬프도 포함체재타임스탬프. (포함정보댓글에서 언급했듯이. )
또한 이 스레드, 특히 메시지 #14 및 #19를 참조하세요.
두 가지 예:
다음 명령을 사용하여 테스트할 수도 있습니다.
fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf
1 타임스탬프 없음:
$ fail2ban-regex ' [1.2.3.4] authentication failed' '\[<HOST>\] authentication failed'
Running tests
=============
Use failregex line : \[<HOST>\] authentication failed
Use single line : [1.2.3.4] authentication failed
Results
=======
Failregex: 0 total
Ignoreregex: 0 total
Date template hits:
Lines: 1 lines, 0 ignored, 0 matched, 1 missed
|- Missed line(s):
| [1.2.3.4] authentication failed
`-
타임스탬프가 있는 2개:
$ fail2ban-regex 'Jul 18 12:13:01 [1.2.3.4] authentication failed' '\[<HOST>\] authentication failed'
Running tests
=============
Use failregex line : \[<HOST>\] authentication failed
Use single line : Jul 18 12:13:01 [1.2.3.4] authentication failed
Results
=======
Failregex: 1 total
|- #) [# of hits] regular expression
| 1) [1] \[<HOST>\] authentication failed
`-
Ignoreregex: 0 total
Date template hits:
|- [# of hits] date format
| [1] MONTH Day Hour:Minute:Second
`-
Lines: 1 lines, 0 ignored, 1 matched, 0 missed
스캔 수
반응 시간을 평가하는 것은 매우 어렵습니다. Fail2ban 대기 중1 초스캔할 새 로그를 확인하기 전. 대부분의 경우에는 괜찮습니다. 그러나 maxretry에 지정된 것보다 더 많은 로그인 실패가 발생할 수 있습니다.
이와 관련하여 이 스레드를 참조하십시오.Re: Bug#481265: failure2ban: 폴링 간격을 구성할 수 없습니다..
하지만 다음에는선택 사항이지만 권장되는 소프트웨어일단 Garmin을 찾았습니다.
Gamin은 파일 변경 모니터입니다. Gamin은 "inotify" 활성화 커널을 사용함으로써 큰 이점을 얻습니다. 따라서 파일 수정을 위한 활성 폴링이 더 이상 필요하지 않습니다.
Gamin이 설치되어 있고 backend
in jail.conf
이자동차(또는노름) - Gamin을 사용합니다.
답변2
정규 표현식이 와일드카드를 사용하여 날짜를 "인식"하도록 하는 경우에만 날짜가 줄의 시작 부분에 있을 필요가 없다는 점에 유의하는 것이 중요합니다.
예: tomcat7
로그 파일에 다음과 같은 행이 있다고 가정합니다.
1.2.3.4 - - [13/Feb/2017:02:47:44 -0300] "GET /manager/html HTTP/1.1" 401 2486
1.2.3.4 - - [13/Feb/2017:02:47:45 -0300] "GET /manager/html HTTP/1.1" 401 2486
1.2.3.4 - - [13/Feb/2017:02:47:45 -0300] "GET /manager/html HTTP/1.1" 401 2486
1.2.3.4 - - [13/Feb/2017:02:47:45 -0300] "GET /manager/html HTTP/1.1" 401 2486
1.2.3.4 - - [13/Feb/2017:02:47:45 -0300] "GET /manager/html HTTP/1.1" 401 2486
1.2.3.4 - - [13/Feb/2017:02:47:46 -0300] "GET /manager/html HTTP/1.1" 401 2486
보세요, 날짜가 시작이 아니니 그게 문제겠죠.
그럼에도 불구하고 "datespace"가 포함된 정규식을 사용하여 테스트하면 테스트는 다음과 일치합니다.
$ fail2ban-regex '1.2.3.4 - - [13/Feb/2017:02:47:44 -0300] "GET /manager/html HTTP/1.1" 401 2486' '<HOST> - - \[.*\] "GET .* HTTP/1.1" 40\d \d+$'
Running tests
=============
Use regex line : <HOST> - - \[.*\] "GET .* HTTP/1.1" 40\d \d+$
Use single line: 1.2.3.4 - - [13/Feb/2017:02:47:44 -0300] "GET /man...
Matched time template Day/MONTH/Year:Hour:Minute:Second
Got time using template Day/MONTH/Year:Hour:Minute:Second
Results
=======
Failregex: 1 total
|- #) [# of hits] regular expression
| 1) [1] <HOST> - - \[.*\] "GET .* HTTP/1.1" 40\d \d+$
`-
Ignoreregex: 0 total
Summary
=======
Addresses found:
[1]
1.2.3.4 (Mon Feb 13 02:47:44 2017)
Date template hits:
2 hit(s): Day/MONTH/Year:Hour:Minute:Second
Success, the total number of match is 1