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:
- Dentro de usted
expressjs.conf
ha configuradofindtime = 600
ymaxretry = 5
Esto 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.conf
pá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
Todos sus registros provienen de
127.0.0.1
. Si miras eljail.conf
interior del[DEFAULT]
bloque, encontrarás laignoreip = 127.0.0.1/8
configuració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.expressjs.conf
No tiene la configuracióndatepattern =
establecida, por lo que fail2ban no puede adivinar qué parte del archivo de registro es la fecha. Obtenga algunos ejemplos de/etc/fail2ban/filter.d
archivos y encontrará expresiones regulares de fecha comodatepattern = ^L %%d/%%m/%%Y - %%H:%%M:%%S
odatepattern = ^%%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:9
en 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.