타임스탬프

타임스탬프

Fail2ban을 사용하는 방법과 감옥을 구성하는 방법을 알고 있지만 실제로 작동하는 방식이 마음에 들지 않습니다.

문제는 내 호기심을 자극한 특별한 감옥 옵션이 하나 있다는 것입니다 findtime.

사용해야 하는 필터를 구성할 때주인Fail2ban이 어떤 IP를 비교하고 필요한 경우 금지할지 알 수 있도록 키워드(IP 주소 일치). 괜찮은.

하지만 시간 같은 건 없습니다. fall2ban은 TIME키워드가 없기 때문에 로그 파일에 줄이 언제 추가되었는지 정확히 알 수 있는 방법이 없습니다. 그렇죠? 실제로 모든 타임라인에서 파일을 검색하고 계속 작동할 수 있습니다.

이는 FAIL2BAN이 주기적으로 파일을 스캔한다는 것을 의미하는 것 같습니다. 내부적으로 스캔 시간을 설정하여 findtime자체 스캔 날짜와 비교하여 옵션을 처리할 수 있습니다.

우선, 내 말이 맞지? 그렇다면 스캔 주파수는 얼마입니까? 자주 검사해야 하는 대용량 로그 파일이 많으면 병목 현상이 발생하지 않을까요?

그렇다면 스캔 빈도가 옵션보다 좋으면 findtime어떻게 될까요 ? 이것은 Fail2ban이 findtime최소 스캔 빈도를 설정하기 위해 찾은 가장 작은 옵션 에 적응한다는 것을 의미합니까 ?

답변1

첫 번째. 이것은 (아마도) 답변은 아니지만 주석(그리고 약간 긴)보다 더 나을 수도 있습니다.

타임스탬프

귀하의 진술을 찾으십시오 :

실제로 모든 타임라인에서 파일을 검색하고 계속 작동할 수 있습니다.

문서와 충돌합니다. 무슨 뜻이에요일하다?

수동 #filters(v 0.8) 상태:

실패한 정규식을 직접 작성하려면 다음 사항을 알아야 합니다.

  • [...]

  • 로그 줄이 실패 정규식과 일치하려면 실제로 두 부분이 일치해야 합니다.줄의 시작은 타임스탬프 패턴 또는 정규 표현식과 일치해야 합니다., 나머지 줄은 실패한 정규식과 일치해야 합니다.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이 설치되어 있고 backendin 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

관련 정보