Como posso implementar limitação de taxa com Apache? (pedidos por segundo)
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
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.
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
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.