Fundamentalmente, esses ataques de negação de serviço envolvem enviar ao servidor mais solicitações do que ele pode manipular. Pode ser um grande número de bots enviando pedidos simples (embora não exija bilhões para derrubar um único servidor - alguns milhares de vezes) ou um punhado de bots enviando pedidos que são notoriamente longos para serem executados.
O segundo tipo de ataque é o mais cruel, porque um único bot poderia derrubar um servidor. Por exemplo, o LIMIT N OFFSET M
do MySQL é notoriamente lento quando M
se torna grande, então um ataque simples seria solicitar páginas de 200 a 300 em 500 em rápida sucessão, entupindo todos os threads de trabalho do MySQL. Em um servidor desprotegido, isso pode ser feito com o firebug. A única solução é identificar operações dispendiosas e, em seguida, otimizá-las, torná-las sequenciais (para que a obstrução dessa parte do site não diminua o restante do site) ou detectar IPs que solicitam operações dispendiosas e recuse-se a executar essa operação a menos que um determinado intervalo de espera seja respeitado.
O primeiro tipo de ataque é mais difícil, porque você precisa de muitos bots. Por outro lado, também é mais difícil parar no servidor: se você tiver milhares de bots enviando dados o mais rápido que puder, sua largura de banda será devorada pela inundação e não há nada que o servidor possa fazer a respeito (mesmo que se recusar 99% desses pedidos), então um roteador com prevenção contra inundações é uma boa aposta se você acha que pode ser um alvo.