Apache: limitar o número de solicitações / tráfego por IP?

12

Eu gostaria de permitir apenas que um IP use até, digamos, 1 GB, de tráfego por dia e, se esse limite for excedido, todas as solicitações desse IP serão descartadas até o dia seguinte. No entanto, uma solução mais simples em que a conexão é interrompida após uma certa quantidade de solicitações seria suficiente.

Já existe algum tipo de módulo que pode fazer isso? Ou talvez eu possa conseguir isso através de algo como iptables?

obrigado


fonte
Versão do Apache?
pehrs
2.2 --Filling o personagem limit--

Respostas:

5

Se você deseja uma solução Apache pura, bw_mod para Apache 2.0 e mod_bandwidth para Apache 1.3. Eles podem limitar a largura de banda do seu servidor para limitar o uso da largura de banda.

Há também o mod_limitipconn, que impede que um usuário faça muitas conexões com o seu servidor. O mod_cband é outra opção, mas nunca o usei.

Se você não quiser mexer na instalação do Apache, pode colocar um proxy squid na frente do Apache. Também lhe dá mais controle sobre a aceleração.

No entanto, na maioria dos casos, o problema são alguns objetos grandes quando você deseja limitar a largura de banda por IP e deseja enviar uma mensagem de erro sã quando um usuário extrai muitos dados e você o bloqueia. Nesse caso, pode ser mais fácil escrever um script PHP e armazenar as informações de acesso em uma tabela temporária em um banco de dados.

pehrs
fonte
2
Obrigado pelas sugestões. Eu já examinei bw_mod e mod_limitipconn, mas nenhum (tanto quanto eu sei) faz o que eu quero. O mod_limitipconn simplesmente limita-os a uma conexão de cada vez, e o bw_mod permite apenas limitar a taxa de download por IP. Quero bloqueá-los após uma certa quantidade de transferência / solicitações de dados. Na verdade, estou tentando me defender de certos usuários que sentem a necessidade de rastrear todo o site e baixar tudo. Vou dar uma olhada no proxy squid, parece interessante. Se isso não der certo, acho que vou recorrer à modificação da fonte bw_mod.
Você definiu seu robots.txt para não permitir aranhas?
pehrs
1
O problema com o robots.txt é que (assim como a RFC 3514), apenas bons robôs o respeitam.
Scott pacote de
É verdade, mas você descobrirá que a maioria das pessoas que acessam seu site usa ferramentas padrão. E muitos deles, como o wget, respeitam o robots.txt. Robots.txt também é a maneira correta de informar seus usuários que você não deseja que eles entendam.
pehrs
1
Eu tentei isso. No começo, o robots.txt era suficiente, então eles disseram ao Wget para ignorar o robots.txt, então eu tentei bloquear os agentes do usuário "não reconhecidos", mas depois eles falsificaram o agente do usuário. Eles tendem a fazer muitas solicitações de cabeçalho, enquanto os navegadores legítimos não fazem, portanto, posso examinar a limitação de solicitações de cabeçalho ou desativá-la completamente (menos desejável).
5

Esta é a minha solução iptables para esse tipo de problema. Ajuste --seconds --hitcountconforme necessário, também tabela iptables.

iptables -A FORWARD -m state --state NEW -m recent --rcheck --seconds 600 --hitcount 5 --name ATACK --rsource -j REJECT --reject-with icmp-port-unreachable
iptables -A FORWARD -d 192.168.0.113/32 -o eth1 -p tcp -m tcp --dport 80 -m recent --set --name ATACK --rsource -j ACCEPT

Explicado:

  1. iptablesverifique se o IP de origem está listado no arquivo / proc / net / ipt_recent / ATACK por 5 ou mais vezes em um intervalo de 600 segundos e se é uma nova solicitação. Se for, faça uma rejeição; outro

  2. iptables verifique se a solicitação está destinada à porta 80. Se sim, imprima o IP e o carimbo de data / hora em / proc / net / ipt_recent / ATACK e encaminhar o pacote.

Está funcionando bem para minhas necessidades.

Gustavo Feijo
fonte
3

Você já olhou para uma ferramenta como fail2ban? Pode ser um pouco pesado para você, mas permitiria limitar o número de solicitações que um determinado IP é permitido. Ele funciona examinando os logs e você define regras para quantas violações por tempo são permitidas, portanto, para você, podem ser solicitações por dia. Uma vez que eles analisam, ele pode fazer coisas como bloqueá-los usando ipchains.

Usei-o para bloquear ataques DDoS contra um servidor de email com muito sucesso. Porém, ele pode consumir uma quantidade significativa de energia do processador.

Peter Bagnall
fonte
atual; y prestes a implementar isso sozinho. Espero que funcione
Escuro Star1
1

tente mod_dosevasiveoumod_security

mod_dosevasive pode ser configurado para banir um IP após um número especificado ou solicitações de página para um site em um período de tempo especificado.

prophet.six
fonte