Eu escrevi uma postagem no blog sobre como para fazer isso com o Apache 2.4 usando o OSSEC (um sistema de detecção de invasão baseado no host FOSS). Aqui está o TLDR:
- Use o mod_remoteip para registrar os IPs do cliente no lugar dos IPs do balanceador de carga.
- Na sua configuração vhost, use uma diretiva IncludeOptional dentro de um RequireAll para criar um diretório que contenha outros mod_authz_host , escritas por OSSEC.
- Crie um script de resposta ativa personalizado para o OSSEC adicione um arquivo com uma diretiva mod_authz_host como
Require not ip 1.2.3.4
ao diretório acima para cada endereço IP a partir do qual o OSSEC detecta atividades maliciosas.
- Configure o OSSEC para começar a usar o script de resposta ativa acima - Eu recomendaria copiar as configurações dos blocos
command
e active-response
config do padrão da OSSEC host-deny active-response, que bloqueia um endereço IP por 10 minutos se acionar um alerta em ou acima de nível 6 .
- Adicione algumas regras personalizadas ao arquivo de definição
local_rules.xml
da OSSEC para solicitações HTTP registradas no seu log de acesso do Apache que acionará a resposta ativa acima quando corresponder com X frequency em Y timeframe (como dizer mais de 50 vezes em 10 segundos, ou o que você considera abusivo).
Se você ainda não estiver usando o OSSEC (ou algum outro HIDS), recomendo-o com entusiasmo - é muito fácil de configurar e oferece várias funcionalidades prontas para uso. A DigitalOcean tem uma boa instalação do OSSEC tutorial para o Ubuntu 14.04 (que você pode acompanhar muito bem mesmo para outros linuxes). Você pode simplesmente instalá-lo no modo "local" em cada um dos seus servidores para começar, e depois reorganizá-lo para usar sua sofisticada arquitetura cliente-servidor.
Observe também que esta técnica requer o reinício automático do Apache toda vez que um IP é adicionado à lista de bloqueio, o que pode não ser um bom começo para alguns.