Estou executando um servidor web Apache e gostaria de adicionar alguns limites de taxa simples por endereço IP individual.
No momento, estou recebendo o que parecem ser muitas solicitações de bot chegando ao site e isso está retardando um pouco as solicitações normais.
Eu gostaria de poder adicionar limitação de taxa para desacelerar os bots, ao mesmo tempo que não impede os rastreamentos do Googlebot quando ele aparece. Suponho que algo em torno de 20.000 solicitações/hora por IP deve bastar, provavelmente menos.
De qualquer forma, qual é o método mais simples para adicionar limitação de taxa ao Apache?
Até agora encontrei algumas opções:
mod_security
mod_evasive
mod_ratelimit
mod_limitpconn
Mas não parece haver uma solução clara e óbvia.
Alternativamente, parece que usar o Nginx como proxy reverso (e usar a limitação de taxa incorporada a ele) seria outra opção viável. Parece mais fácil de implementar do que o que descobri até agora também para o Apache. Embora eu prefira usar o Apache apenas se houver uma solução simples que esteja faltando.
Fail2Ban parece ser outra solução simples, mas não tenho certeza se poderia usá-lo para retornar 429
códigos de resposta quando um visitante atingir o limite de taxa.
O que você recomendaria?
mod_evasive
Achei
mod_evasive
a solução mais simples e eficaz para limitação de taxa simples.Foi mais fácil de configurar do que eu esperava e é a melhor solução que encontrei entre todas as opções do Apache (em oposição ao esforço de configurar o Nginx como um proxy reverso).
Este é o repositório do mod:
https://github.com/jzdziarski/mod_evasive
Como alternativa, existe um fork um pouco mais recente que permite retornar um código de resposta de
429
(em vez503
da versão original). Isso é preferível para permitir que bots como o Google saibam que estão atingindo seu limite de taxa e para ajustar sua taxa de rastreamento de acordo:https://github.com/jvdmr/mod_evasive
Eu optei pela segunda opção.
Instalar
O mod pode ser baixado e instalado com:
Você pode verificar se ele foi instalado usando:
Configuração
Use a seguinte configuração em seu arquivo de configuração do host virtual (por exemplo,
/etc/apache2/sites-available/000-default.conf
) para começar:Isso retornará um código de resposta 429 se alguém solicitar a mesma página 10 vezes em 1 segundo ou fizer 50 solicitações no site em 5 segundos . Ajuste esses números conforme necessário.
Eles serão então bloqueados por 20 segundos . Você pode definir um período de bloqueio bastante pequeno, pois esse período continuará se estendendo se eles fizerem novas solicitações de limitação de taxa enquanto ainda estiverem bloqueados.
Este link explica as configurações: https://www.linode.com/docs/guides/modevasive-on-apache/
Correndo
Depois de salvar sua configuração, basta reiniciar o Apache:
Você pode então verificar os IPs banidos mais recentemente
syslog
(não acredito que os IPs banidos do mod_evasive sejam gravados em seus próprios arquivos):Até agora está funcionando bem e, pelo que descobri, é o melhor mod de todas as opções disponíveis para limitação simples de taxa por IP no Apache.