Como proteger o servidor contra um simples ataque DoS

1

Por favor, note que estou NÃO perguntando como proteger o servidor do DDoS . O que quero dizer é que, se alguém executar siege -c 1000 www.example.com em seu VPS. Isso resultará em meu servidor atendendo milhares de solicitações e diminuindo a velocidade. Se eu correr cerco para dizer, hospedagem compartilhada, não vejo a queda extrema na responsividade (de 60ms para 2000ms / request) que faço na minha máquina. Eu não espero poder mitigar um grande DDoS, mas eu gostaria de estar seguro do primeiro script-kiddie descobrindo o cerco :) Por outro lado, eu estou bem com o fato de que quando grandes quantidades de tráfego vêm de fontes legítimas, a resposta pode ser mais lenta.

    
por Tomáš Fejfar 10.09.2013 / 13:33

3 respostas

3

Você pode usar um firewall para limitar o número de conexões simultâneas e a taxa de novas conexões provenientes de uma rede (por exemplo, um / 32 para IPv4 e um / 64 para IPv6). Exemplo de como isso pode parecer usando iptables :

# Limit number of concurrent connections
-A INPUT -i eth0 -p tcp --syn -m connlimit --connlimit-above 50 -j DROP
# Limit rate of new connections
-A INPUT -i eth0 -p tcp --syn -m hashlimit --hashlimit-name tcp --hashlimit-mode srcip --hashlimit-above 3/sec --hashlimit-burst 7 --hashlimit-srcmask 32 -j DROP

(A mesma coisa para ip6tables exceto adicionar --connlimit-mask 64 ao primeiro e alterar --hashlimit-srcmask para 64 no segundo.)

Você também pode limitar a taxa de solicitações HTTP, por exemplo, com o módulo limit_req de nginx .

    
por 10.09.2013 / 13:51
1

Além de alguns firewalls básicos, dependemos do haproxy para realizar o pesado TCP. Descobrimos que ele roda círculos em torno de uma instância Apache HTTPd pronta para uso, tanto quanto qualquer tipo de ataque slowdos.

-A INPUT -p tcp -m tcp -m state --state RELATED,ESTABLISHED -j ACCEPT

-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j SYNFLOOD

-A INPUT -p tcp -m tcp --dport 80 -m state --state NEW -j HTTPDGUARD
-A INPUT -p tcp -m tcp --dport 443 -m state --state NEW -j HTTPDGUARD

-A HTTPDGUARD -m connlimit --connlimit-above 25 --connlimit-mask 32 -j HTTPDENY
-A HTTPDENY -j LOG --log-prefix "HTTP Flood: "
-A HTTPDENY -p tcp -m tcp -j REJECT --reject-with tcp-reset

-A SYNFLOOD -m state --state NEW -m recent --set --name SYNRATE --rsource
-A SYNFLOOD ! -s 150.156.24.0/24 -m state --state NEW -m recent --update \
   --seconds 5 --hitcount 200 --name SYNRATE --rsource -j DROP

-A INPUT -p tcp -m tcp --dport 80 -m state --state NEW -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -m state --state NEW -j ACCEPT

Mas, basicamente, você precisa bloquear o ataque, corrigir a exploração ou fazer as duas coisas.

    
por 10.09.2013 / 16:12
1
O fail2ban é uma das muitas ferramentas projetadas para lidar com essa situação. O fail2ban funcionou para mim ao parar alguns ataques de força bruta no ssh. Eu suponho que seu servidor é um linux.

    
por 10.09.2013 / 19:22