Parece que eu toquei na armadilha XY - e perdi completamente um software que já estou usando para outras coisas: Fail2ban . Como a intenção original era parar os lixiviadores, isso é facilmente feito com uma cadeia correspondente.
Suposições
- o site contém páginas informativas com links para recursos locais (por exemplo, arquivos ZIP ou PDF), que podem ser facilmente correspondidos a partir de QUERY_STRING
- visitantes "normais" navegam nas páginas, mas escolhem apenas alguns "recursos"
- um "leecher", processando todas as páginas, naturalmente afetaria mais "arquivos de recursos" em um curto período de tempo do que um "visitante normal" em todo o dia. No meu caso, 50 acertos / d já seriam suficientes para um "visitante normal".
Filtro Fail2Ban
O filtro Fail2Ban faz uso dessas suposições, correspondendo apenas aos recursos. Isso pode ser feito por meio de extensões de arquivo (exemplo acima: .pdf
ou .zip
) ou por um caminho (por exemplo, com todos os recursos localizados em /downloads
- mas deve se certificar de não coincidir com as "páginas normais". um exemplo de filtro (para ser colocado em /etc/fail2ban/filter.d/apache-leecher.conf
):
[Definition] # Match all our resources below /downloads: failregex = ^ -.*"(GET|POST) /download.*" # Alternatively, match all PDF/ZIP files # failregex = ^ -.*"(GET|POST) .*\.(zip|pdf)"
(Eu coloquei a variante ZIP / PDF como comentário; você deve ter apenas um failregex
no seu arquivo de filtro)
Fail2Ban Jail
Agora, para a cadeia correspondente, configurada em /etc/fail2ban/jail.conf
:
[apache-leecher] # download no more than 100 files per hour, or get blocked for 6h (21600s) enabled = true port = http,https filter = apache-leecher logpath = /var/log/httpd/access_log maxretry = 100 findtime = 3600 bantime = 21600
Parece funcionar (já pegou 2 candidatos), mas pode precisar de alguns ajustes. Qualquer pessoa em situação semelhante deve ser capaz de adaptar facilmente os itens acima para corresponder ao site.