Como posso implementar a limitação de taxa com o Apache? (solicitações por segundo)

Quais técnicas e / ou módulos estão disponíveis para implementar a limitação de taxa robusta (solicitações | bytes / ip / tempo de unidade) no apache?

Ao melhor

  • mod_evasive (Focado mais na redução da exposição DoS)
  • mod_cband (Melhor destaque para controle de largura de banda ‘normal’)

e o resto

  • mod_limitipconn
  • mod_bw
  • mod_bwshare

Como dito neste post, parece possível usar o mod_security do Apache para implementar um limite de taxa por segundo.

A configuração é algo assim:

 SecRuleEngine On  SecAction initcol:ip=%{REMOTE_ADDR},pass,nolog SecAction "phase:5,deprecatevar:ip.somepathcounter=1/1,pass,nolog" SecRule IP:SOMEPATHCOUNTER "@gt 60" "phase:2,pause:300,deny,status:509,setenv:RATELIMITED,skip:1,nolog" SecAction "phase:2,pass,setvar:ip.somepathcounter=+1,nolog" Header always set Retry-After "10" env=RATELIMITED  ErrorDocument 509 "Rate Limit Exceeded" 

Existem várias maneiras de include firewalls de aplicativos da Web, mas a maneira mais fácil de implementar é usar um mod Apache.

Um desses mods que eu gostaria de recomendar é o mod_qos . É um módulo gratuito que é muito eficaz contra ataques do tipo Certin DOS, Bruteforce e Slowloris. Isso facilitará bastante a carga do seu servidor.

É muito poderoso .

A versão atual do módulo mod_qos implementa mecanismos de controle para gerenciar:

  • O número máximo de solicitações simultâneas para um local / recurso (URL) ou host virtual.

  • Limitação da largura de banda, como o número máximo permitido de solicitações por segundo para uma URL ou o máximo / mínimo de kbytes transferidos por segundo.

  • Limita o número de events de solicitação por segundo (condições de solicitação especiais).

  • Limita o número de events de solicitação dentro de um período de tempo definido.
  • Também pode detectar pessoas muito importantes (VIP) que podem acessar o servidor da Web sem ou com menos restrições.
  • Linha genérica de solicitação e filtro de header para negar operações não autorizadas.

  • Solicitar limitação e filtragem de dados do corpo (requer mod_parp).

  • Limita o número de events de solicitação para clientes individuais (IP).

  • Limitações no nível de conexão TCP, por exemplo, o número máximo de conexões permitidas a partir de um único endereço de origem IP ou controle dynamic de manutenção.

  • Prefere endereços IP conhecidos quando o servidor fica sem conexões TCP gratuitas.

Esta é uma configuração de exemplo para o que você pode usá-lo. Existem centenas de configurações possíveis para atender às suas necessidades. Visite o site para mais informações sobre controles.

 Sample configuration: # minimum request rate (bytes/sec at request reading): QS_SrvRequestRate 120 # limits the connections for this virtual host: QS_SrvMaxConn 800 # allows keep-alive support till the server reaches 600 connections: QS_SrvMaxConnClose 600 # allows max 50 connections from a single ip address: QS_SrvMaxConnPerIP 50 # disables connection restrictions for certain clients: QS_SrvMaxConnExcludeIP 172.18.3.32 QS_SrvMaxConnExcludeIP 192.168.10. 

http://opensource.adnovum.ch/mod_qos/

No Apache 2.4, há um novo módulo de estoque chamado mod_ratelimit . Para emular velocidades de modem, você pode usar o mod_dialup . Embora eu não veja porque você simplesmente não pode usar o mod_ratelimit para tudo.

Infelizmente, o mod_evasive não funciona como esperado quando usado em configurações que não são pré-configurações (as configurações recentes do apache são principalmente MPM)

Mais uma opção – mod_qos

Não é simples de configurar – mas poderoso.

http://opensource.adnovum.ch/mod_qos/