Pergunta

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

Foi útil?

Solução

A melhor

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

eo resto

Outras dicas

Tal como referido na neste blog postar parece possível usar mod_security para implementar um limite de taxa por segundo.

A configuração é algo como isto:

SecRuleEngine On

<LocationMatch "^/somepath">
  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
</LocationMatch>

ErrorDocument 509 "Rate Limit Exceeded"

Existem inúmeros caminho, incluindo firewalls de aplicativos web, mas a coisa mais fácil de implementar, se usando um mod Apache.

Um tal mod que eu gostaria de recomendar é mod_qos . É um módulo livre que está veryf eficaz contra certin DOS, Bruteforce e tipo de ataques Slowloris. Isso irá facilitar a sua carga do servidor um pouco.

É muito poderoso .

A versão atual do mod_qos implementos módulo de controle de mecanismos para gerir:

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

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

  • Limita o número de solicitação de eventos por segundo (pedido especial condições).

  • Limita o número de eventos de pedidos dentro de um período de tempo definido.
  • Ele também pode detectar pessoas muito importantes (VIP), que podem acessar o servidor web sem ou com menos restrições.
  • Generic linha de solicitação eo filtro de cabeçalho de negar não autorizada operações.

  • limitação Pedido dados corpo e filtrando (requer mod_parp).

  • Limita o número de eventos de pedidos para clientes individuais (IP).

  • Limitações quanto ao nível de conexão TCP, por exemplo, o número máximo de conexões permitidas de um endereço IP de origem única ou dinâmico keep-alive controle.

  • Prefere conhecido endereços IP quando o servidor é executado fora do TCP livre conexões.

Esta é uma configuração de amostra do que você pode usá-lo para. Há 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/

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

Infelizmente, mod_evasive não vai funcionar como esperado quando usado em configurações não-prefork (setups recente apache são principalmente MPM)

mais uma opção - mod_qos

Não simples de configurar -., Mas poderosa

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

Depende por que você quer limite de taxa.

Se é para proteger contra a sobrecarga do servidor, ele realmente faz sentido colocar NGINX na frente dele, e configure limitação de taxa lá. Faz sentido, porque NGINX usa muito menos recursos, algo como alguns MB para cada dez mil ligações. Então, se o servidor está inundada, NGINX fará o limite de taxa (usando uma quantidade insignificante de recursos) e só passar o tráfego permitido para Apache.

Se tudo que você está depois é a simplicidade, em seguida, usar algo como mod_evasive.

Como de costume, se é para proteger contra ataques DDoS ou DoS, use um serviço como Cloudflare que também tem limitação de taxa.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top