Qual a melhor forma de se defender contra um ataque do DOS "slowloris" contra um servidor web Apache?

32

Recentemente, um script chamado "slowloris" ganhou atenção. O conceito básico do que o slowloris faz não é um ataque novo, mas, dada a atenção recente, vi um pequeno aumento nos ataques contra alguns dos sites da Apache.

No momento, não parece haver nenhuma defesa 100% contra isso.

A melhor solução que determinamos (até agora) é aumentar o MaxClients.

Obviamente, isso nada mais é do que aumentar os requisitos para o computador do invasor e, na verdade, não protege 100% o servidor.

Um outro relatório indica que o uso de um proxy reverso (como o Perlbal) na frente do servidor Apache pode ajudar a impedir o ataque.

Usar mod_evasive para limitar o número de conexões de um host e usar mod_security para negar solicitações que parecem ter sido emitidas por slowloris parecem ser a melhor defesa até agora.

Alguém no ServerFault está enfrentando ataques como esse? Em caso afirmativo, que medidas você implementou para defendê-lo / evitá-lo?

NOTA: Esta pergunta é para servidores Apache, pois eu entendo que os servidores Windows IIS não são afetados.

KPWINC
fonte

Respostas:

22

Eu experimentei esse ataque ... no meio do verão (23 de junho), onde você deveria estar no campo e beber cerveja:>

Coloquei meu Apache atrás do Varnish , que não apenas protegia do slowloris, mas também acelerava bastante as solicitações da Web.

Além disso, iptablesme ajudou:

iptables -I INPUT -p tcp --dport 80 \
         -m connlimit --connlimit-above 20 --connlimit-mask 40 -j DROP

Essa regra limita um host a 20 conexões com a porta 80, o que não deve afetar o usuário não malicioso, mas tornaria o slowloris inutilizável em um host.

Kristaps
fonte
4
+1 para a regra iptables.
26630 Tim Tim
1
Apenas um aviso. "Fora da caixa", o verniz não armazena em cache as páginas se tiver recebido cookies. Você precisa fazer algumas configurações personalizadas para contornar isso. Exemplos estão disponíveis no site e são fáceis de implementar.
David
O verniz é bastante programável, então você pode configurá-lo para ver o que está acontecendo e lidar com isso. No entanto, acho que, ao colocar um proxy na frente do apache, você está apenas movendo o problema do servidor da web para o proxy. O problema ainda está lá, apenas em um lugar diferente. As conexões / portas ainda serão usadas. Eu começaria com a regra iptables listada (ou o equivalente ao seu firewall) e depois procuraria um proxy.
David
1
o problema com o ataque sloworis é limitado ao modelo multithreading do apache (e a vários outros servidores da web que usam um modelo semelhante). O verniz deve sobreviver a isso.
Cian
4

mod_antiloris , simples assim.

LiraNuna
fonte
3

Se todos os seus módulos apache forem seguros para threads, o slowloris poderá ser derrotado simplesmente mudando para MPMs de evento ou de trabalho. ref: aqui

Cian
fonte
0

No momento, parece que não há mais nada a fazer para limitar as conexões simultâneas máximas por ip no servidor.

Maxwell
fonte
0

Há um patch de usuário que você pode tentar. Ele modifica o tempo limite com base na carga sob a qual o servidor está, mas, considerando seu status, você pode não querer usá-lo em uma máquina de produção, sem alguns testes sérios. Dê uma olhada aqui.

Dentrasi
fonte
0

O firewall baseado em iptable deve protegê-lo de várias conexões a partir de 1 ip.


fonte
0

Se isso ajudar outras pessoas, às vezes você pode solucionar esse problema com o Apache 2.2.15 ou superior com a seguinte configuração:

LoadModule reqtimeout_module modules/mod_reqtimeout.so
RequestReadTimeout header=20-40,MinRate=500 body=20,MinRate=500

Mais informações aqui: https://httpd.apache.org/docs/2.2/mod/mod_reqtimeout.html

MrCarrot
fonte