Filtro personalizado Fail2Ban no aplicado

Filtro personalizado Fail2Ban no aplicado

Intenté crear unregla de cárcel personalizada en fail2ban, pero nunca se aplica.

No encontré dicha documentación oficial, podría perderme 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

No hay mensaje de error, pero la cárcel parece estar activa...

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

Y lo extraño es que la expresión regular está bien...

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

Respuesta1

Hay algunas cosas que te faltan y debes arreglar para que el filtro funcione:

  1. Dentro de usted expressjs.confha configurado findtime = 600y maxretry = 5Esto significa que en un espacio de 10 minutos (600 s) necesitará tener 5 intentos fallidos (coincidencia de expresiones regulares) para generar la regla automática de bloqueo/rechazo de iptables. jail.confpágina de manual:
   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.

Echando un vistazo a sus registros, tiene más de 10 minutos entre la primera entrada de registro y la última entrada de registro (5 intentos) en el registro que pegó aquí. Primero 20:49último:21:16

  1. Todos sus registros provienen de 127.0.0.1. Si miras el jail.confinterior del [DEFAULT]bloque, encontrarás la ignoreip = 127.0.0.1/8configuración predeterminada. A menos que haya cambiado eso, es bastante peligroso bloquear una dirección de host local ya que dañará otros software que usan esta dirección para la comunicación interna.

  2. expressjs.confNo tiene la configuración datepattern =establecida, por lo que fail2ban no puede adivinar qué parte del archivo de registro es la fecha. Obtenga algunos ejemplos de /etc/fail2ban/filter.darchivos y encontrará expresiones regulares de fecha como datepattern = ^L %%d/%%m/%%Y - %%H:%%M:%%So datepattern = ^%%Y:%%m:%%d-%%H:%%M:%%S. Otro problema aquí es que su "segunda" parte de la fecha de registro no tiene el cero final en el segundo < 10 (por ejemplo, 21:16:9en su último registro) y esto debe solucionarse.

Échale un vistazo alWiki oficial de Fail2banpara obtener ejemplos y mejorar su filtro. Tienes muchas cosas que arreglar.

información relacionada