Como o fail2ban detecta o tempo de uma tentativa de intrusão se os arquivos de log não tiverem registro de data e hora?

5

Eu sei como usar o fail2ban e como configurar uma cadeia, mas não me sinto confortável em como isso realmente funciona.

O problema é que há uma opção particular de prisão que desperta minha curiosidade: findtime .

Quando eu configuro um filtro, é necessário usar a palavra-chave HOST (endereço IP de correspondência), para que o fail2ban possa saber o IP para comparar e banir, se necessário. Tudo bem.

Mas não há tempo para isso: o fail2ban não sabe a hora exata em que uma linha foi adicionada a um arquivo de log, porque não há TIME palavra-chave, certo? Na verdade, ele pode verificar arquivos sem tempo em qualquer linha e ainda funcionará.

Acho que isso significa que o fail2ban está examinando os arquivos periodicamente: ele define um tempo de verificação internamente para que ele possa manipular opções como findtime comparando suas próprias datas de verificação.

Primeiro, estou certo? Em caso afirmativo, qual é a frequência de varredura? Não pode ser um gargalo se houver muitos arquivos de log grandes para escanear com frequência?

Então, o que aconteceu se a frequência de varredura for superior às opções findtime ? Isso significa que o fail2ban se adapta à opção mínima findtime que encontrou para definir sua frequência mínima de varredura?

    
por Gui-Don 16.01.2015 / 18:53

2 respostas

7

Primeiramente. Esta (talvez) não é uma resposta, mas talvez seja melhor do que um comentário (e um pouco longo para isso).

Carimbos de hora

Encontre sua declaração:

Actually, it can scan files without any time on any line and it will still work.

conflitando com a documentação. O que você quer dizer com trabalho ?

Os filtros manuais # (v 0.8) declaram :

If you're creating your own failregex expressions, here are some things you should know:

  • [...]

  • In order for a log line to match your failregex, it actually has to match in two parts: the beginning of the line has to match a timestamp pattern or regex, and the remainder of the line has to match your failregex. If the failregex is anchored with a leading ^, then the anchor refers to the start of the remainder of the line, after the timestamp and intervening whitespace.

  • The pattern or regex to match the time stamp is currently not documented, and not available for users to read or set. See Debian bug #491253. This is a problem if your log has a timestamp format that fail2ban doesn't expect, since it will then fail to match any lines. Because of this, you should test any new failregex against a sample log line, as in the examples below, to be sure that it will match. If fail2ban doesn't recognize your log timestamp, then you have two options: either reconfigure your daemon to log with a timestamp in a more common format, such as in the example log line above; or file a bug report asking to have your timestamp format included.

Note que os arquivos de log podem ser configurados para incluir os timestamps, bem como o formato dos timestamps. (Isso inclui dmesg como mencionado no comentário.)

Veja também este tópico, as Mensagens # 14 e # 19 em particular:

Dois exemplos:

Note que você também pode testar com comandos como:

fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf

1 Sem carimbo de hora:

$ 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 Com carimbo de data / hora:

$ 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

Tempos de verificação

Manual # Tempo de reação :

It is quite difficult to evaluate the reaction time. Fail2ban waits 1 second before checking for new logs to be scanned. This should be fine in most cases. However, it is possible to get more login failures than specified by maxretry.

A esse respeito, veja também este tópico: Re: Bug # 481265: fail2ban: Poll intervalo não é configurável .

Mas, no software opcional, mas recomendado , é possível encontrar o Gamin.

Gamin is a file alteration monitor. Gamin greatly benefits from a "inotify"-enabled kernel. Thus, active polling is no longer required to get the file modifications.

Se o Gamin estiver instalado e backend em jail.conf estiver definido como auto (ou gamin ) - será utilizado o Gamin.

    
por 17.01.2015 / 07:36
0

É importante notar que a data não precisa estar no começo da linha, se e somente se, você permitir que a regex "reconheça" com um caractere curinga.

Por exemplo: suponha que em tomcat7 logfiles são algumas linhas como estas:

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

olhando para eles, a data não está no começo, e isso deve ser um problema.

No entanto, se você testá-lo com um regex que tenha uma "sala para a data", o teste corresponderá:

$ 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
    
por 16.02.2017 / 19:22

Tags