Fail2Ban filtro personalizado não aplicado

1

Eu tentei criar uma regra de cadeia personalizada em fail2ban , mas ela nunca é aplicada.

Eu não encontrei essa documentação oficial, posso sentir falta de algo.

/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

Nenhuma mensagem de erro, mas a cadeia parece estar ativa ...

$ 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:   

E a coisa estranha, regex é ok ...

fail2ban-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
    
por Dinath 29.05.2017 / 16:38

1 resposta

2

Há algumas coisas que você está perdendo e precisam corrigir para que o filtro funcione:

  1. Dentro do seu expressjs.conf você definiu findtime = 600 e maxretry = 5 Isso significa que em um espaço de 10 minutos (600s) você precisará ter 5 tentativas fracassadas (correspondência regex) para gerar o bloco automático / rejeitar iptables regra. jail.conf manpage:
   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.

Observando seus registros, você tem mais de 10 minutos entre a primeira entrada de log e a última entrada de log (5 tentativas) no log que você colou aqui. Primeiro: 20:49 , Último: 21:16

  1. Todos os seus registros são provenientes de 127.0.0.1 . Se você olhar seu jail.conf dentro do bloco [DEFAULT] , encontrará a configuração padrão ignoreip = 127.0.0.1/8 . A menos que você tenha alterado isso, é muito perigoso bloquear um endereço de host local, já que ele quebrará outros softwares usando esse endereço para comunicação interna.

  2. Você expressjs.conf não tem a configuração datepattern = , portanto, o fail2ban não pode adivinhar qual parte do arquivo de log é a data. Obtenha alguns exemplos dos arquivos /etc/fail2ban/filter.d e você encontrará o regex de data como datepattern = ^L %%d/%%m/%%Y - %%H:%%M:%%S ou datepattern = ^%%Y:%%m:%%d-%%H:%%M:%%S . Outro problema aqui é que sua "segunda" parte da data de registro não tem o zero à direita em sec < 10 (ex: 21:16:9 no seu último log) e isso precisa ser corrigido.

Dê uma olhada no wiki oficial do Fail2ban para obter exemplos e melhorar o filtro. Você tem muitas coisas para consertar.

    
por 01.06.2018 / 20:07