fail2ban detecta o IP do invasor, mas não o bane e lê logs lentamente

fail2ban detecta o IP do invasor, mas não o bane e lê logs lentamente

Há alguns dias estou recebendo ataques de alguns endereços IP ao meu nginx. Decidi usar o fail2ban para bani-lo automaticamente, mas percebi que não está funcionando muito bem. Posso ver nos logs que está detectando os endereços IP, mas não está banindo conforme o esperado.

Meu arquivo de prisão é:

[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

e meu filtro ficou assim:

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

No meu nginx adicionei um mapa para detectar suas solicitações e retornar 403 quando detectado. Os logs ficam assim:

{"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"}

No meu fail2ban posso ver muitas mensagens dizendo que o endereço IP foi detectado:

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

Mas ainda não há proibição desses endereços IP.

Uma coisa que notei é que a velocidade de leitura do fail2ban é mais lenta que a velocidade do log, então comecei a pensar que talvez esse seja o problema, porque quando esses IP são banidos e o fail2ban lê em tempo real, então outros endereços IP são banidos sem problema . Max_retry é 5 e todos os endereços IP foram detectados mais de 5 vezes, portanto devem ser banidos.

Alguém sabe o que posso estar fazendo de errado (porque com certeza é algo que não estou vendo).

Atenciosamente.

EDIT: Depois de escrever esta mensagem vi que está banindo, mas está funcionando muito devagar. Em cerca de 15 minutos baniu cerca de 4 endereços IP de cerca de 11, quando a cada segundo eles estão sendo detectados muitas vezes.

EDIT2: Limpar o log com um simples echo "" > <logfile>acionou os banimentos.

Minha versão do fail2ban é 0.10.2

Com o invasor problemático banido e recebendo apenas algumas solicitações, o fail2ban está lendo em tempo real e banindo:

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

Então ainda estou pensando que o problema talvez seja a velocidade de leitura.

EDITAR3:

Finalmente atualizei a versão fail2ban para 0.11.2, adicionei um padrão de data e mudei o detector de endereço. Agora parece ler o arquivo nginx muito mais 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"

Responder1

  1. Não é aconselhável monitorar o log de acesso, consultefail2ban/wiki :: Melhores práticasespecialmente a parte "Reduzir o tráfego de log parasitário".
  2. Regexs inapropriados também podem fazer com que fail2bans "a velocidade de leitura possa ser mais lenta que a velocidade do log", só que não vejo que seu RE não seja bom. Mas isso pode ser feito mais rápido, bastando alterar o formato de registro para isso. A especificação de algo único e preciso também datepatternpode ajudar a acelerar o processamento.
  3. Em suma, ele poderia criar a condição de corrida conhecida, fail2ban foi afetado até v.0.10.5, consultehttps://github.com/fail2ban/fail2ban/issues/2660para obter detalhes (a correção foi lançada na v.0.10.6/v.0.11.2)

Observe também as respostas para questões semelhantes, por exemplohttps://github.com/fail2ban/fail2ban/issues/3021#issuecomment-834287295.

informação relacionada