fail2ban detecta la IP del atacante pero no la prohíbe y lee los registros con lentitud

fail2ban detecta la IP del atacante pero no la prohíbe y lee los registros con lentitud

Desde hace unos días estoy recibiendo ataques de algunas direcciones IP a mi nginx. Decidí usar fail2ban para prohibirlo automáticamente, pero noté que no funciona muy bien. Puedo ver en los registros que se detectan las direcciones IP, pero no se prohíben como se esperaba.

Mi expediente de la cárcel es:

[nginx-40x-req]
enabled  = true
bantime.rndtime = 2800
bantime.increment = true
port     = http,https
filter   = nginx-40x-req
logpath  = /var/log/nginx/access.log
maxretry = 5

y mi filtro se ve así:

[Definition]
failregex = ^{"status": (400|401|403), "request_time": [0-9\.]+,\s+"remote_addr": "<HOST>",

En mi nginx agregué un mapa para detectar sus solicitudes y devuelve 403 cuando se detecta. Los registros se ven así:

{"status": 403, "request_time": 0.000,  "remote_addr": "xx.xx.xx.xx", "@timestamp": "2021-09-03T18:32:34+02:00", "type": "nginx", "hostname": "vps-e642f340", "host": "d.itsyjd.com", "uri": "/v2/speed_test", "request": "GET https://d.itsyjd.com/v2/speed_test HTTP/1.1", "request_method": "GET", "request_proto": "http", "request_proto_proxy": "-", "request_uri": "/v2/speed_test", "request_args": "-", "server_proto": "HTTP/1.1", "body_bytes_sent": 552, "http_referer": "-", "http_user_agent": "Mozilla/5.0 (Linux; Android 8.0; MHA-AL00 Build/HUAWEIMHA-AL00; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.132 MQQBrowser/6.2 TBS/044304 Mobile Safari/537.36 (compatible; Baiduspider/2.0;+http://www.baidu.com/search/spider.html)", "msec": 1630686754.923, "upstream_connect_time": -, "upstream_header_time": -, "upstream_response": -, "pipe": "p", "gzip_ratio": "-", "brotli_ratio": "-", "remote_user": "-", "bad_request": "1"}

En mi fail2ban puedo ver muchos mensajes que dicen que se detectó la dirección IP:

2021-09-03 18:34:31,494 fail2ban.filter         [32586]: INFO    [nginx-40x-req] Found xx.xx.xx.xx - 2021-09-03 18:29:33

Pero todavía no se prohíben esas direcciones IP.

Una cosa que he notado es que la velocidad de lectura de fail2ban es más lenta que la velocidad de registro, así que comencé a pensar que tal vez ese sea el problema, porque cuando esas IP están prohibidas y fail2ban lee en tiempo real, entonces otras direcciones IP se prohíben sin problema. . Max_retry es 5 y todas las direcciones IP se han detectado más de 5 veces, por lo que deben prohibirse.

Alguien sabe qué puedo estar haciendo mal (porque seguro es algo que no estoy viendo).

Atentamente.

EDITAR: Después de escribir este mensaje, vi que está baneando, pero funciona muy lento. En unos 15 minutos ha baneado unas 4 direcciones IP de unas 11, cuando cada segundo se están detectando un montón de veces.

EDITAR2: Borrar el registro con un simple echo "" > <logfile>ha activado las prohibiciones.

Mi versión de fail2ban es 0.10.2

Con el atacante problemático prohibido y recibiendo solo unas pocas solicitudes, fail2ban lee en tiempo real y prohíbe:

2021-09-03 18:46:13,759 fail2ban.filter         [32586]: INFO    [nginx-40x-req] Found XX.XX.XX.XX - 2021-09-03 18:46:13
2021-09-03 18:46:13,909 fail2ban.actions        [32586]: NOTICE  [nginx-40x-req] Ban XX.XX.XX.XX
2021-09-03 18:46:18,855 fail2ban.filter         [32586]: INFO    [nginx-40x-req] Found XX.XX.XX.XX - 2021-09-03 18:46:18
2021-09-03 18:47:07,004 fail2ban.filter         [32586]: INFO    [nginx-40x-req] Found XX.XX.XX.XX - 2021-09-03 18:47:06
2021-09-03 18:48:34,390 fail2ban.filter         [32586]: INFO    [nginx-40x-req] Found XX.XX.XX.XX - 2021-09-03 18:48:34
2021-09-03 18:48:54,230 fail2ban.filter         [32586]: INFO    [nginx-40x-req] Found XX.XX.XX.XX - 2021-09-03 18:48:54
2021-09-03 18:48:54,231 fail2ban.filter         [32586]: INFO    [nginx-40x-req] Found XX.XX.XX.XX - 2021-09-03 18:48:54
2021-09-03 18:48:54,231 fail2ban.filter         [32586]: INFO    [nginx-40x-req] Found XX.XX.XX.XX - 2021-09-03 18:48:54
2021-09-03 18:48:54,335 fail2ban.actions        [32586]: NOTICE  [nginx-40x-req] Ban XX.XX.XX.XX
2021-09-03 18:50:08,488 fail2ban.filter         [32586]: INFO    [nginx-40x-req] Found XX.XX.XX.XX - 2021-09-03 18:50:08

Así que sigo pensando que el problema tal vez sea la velocidad de lectura.

EDITAR3:

Finalmente actualicé la versión de fail2ban a 0.11.2, agregué un patrón de fecha y cambié el detector de direcciones. Ahora parece leer el archivo nginx mucho más rápido.

[Definition]
failregex = ^{"status": (400|401|403), "request_time": [0-9\.]+,\s+"remote_addr": "<ADDR>",
datepattern = "@timestamp": "%%Y-%%m-%%dT%%H:%%M:%%S%%z"

Respuesta1

  1. No es recomendable monitorear el registro de acceso, verfail2ban/wiki :: Mejores prácticasespecialmente la parte "Reducir el tráfico de registros parásitos".
  2. Las expresiones regulares inapropiadas también pueden causar que fail2bans "la velocidad de lectura pueda ser más lenta que la velocidad de registro", pero no veo que su RE no sea bueno. Pero se puede hacer más rápido, solo necesitaría cambiar el formato de registro para eso. Además, especificar datos únicos y precisos datepatternpuede ayudar a acelerar el procesamiento.
  3. Todo en uno podría crear la condición de carrera conocida, fail2ban se vio afectado hasta la versión 0.10.5, verhttps://github.com/fail2ban/fail2ban/issues/2660para más detalles (la solución se publicó en v.0.10.6/v.0.11.2)

Tenga en cuenta también las respuestas a preguntas similares, por ejemplohttps://github.com/fail2ban/fail2ban/issues/3021#issuecomment-834287295.

información relacionada