Como proteger o servidor de um simples ataque DoS

Como proteger o servidor de um simples ataque DoS

Por favor, note que eu souNÃOperguntando como proteger o servidor deDDoS. O que quero dizer é que se alguém rodar siege -c 1000 www.example.comem seu VPS. Isso fará com que meu servidor atenda milhares de solicitações e fique lento. Se eu executar o cerco direcionado, por exemplo, hospedagem compartilhada, não vejo a queda extrema na capacidade de resposta (de 60 ms para 2.000 ms/solicitação) que vejo em minha máquina. Não espero ser capaz de mitigar grandes DDoS, mas gostaria de estar protegido contra o primeiro cerco de descoberta do script infantil :) Por outro lado, 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.

Responder1

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, /32 para IPv4 e /64 para IPv6). Exemplo de como pode ser 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, ip6tablesexceto adicionar --connlimit-mask 64ao primeiro e alterar --hashlimit-srcmaskno 64segundo.)

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

Responder2

Além de alguns firewalls básicos, contamos com o haproxy para fazer o trabalho pesado do TCP. Descobrimos que ele gira em torno de uma instância Apache HTTPd pronta para uso, no que diz respeito a qualquer tipo de ataque lento.

-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.

Responder3

fail2bané uma das muitas ferramentas projetadas para lidar com tal situação. fail2ban funcionou para mim para impedir alguns ataques de força bruta no ssh. Presumo que seu servidor seja Linux.

informação relacionada