Linux: impede a inundação TCP de saída

9

Eu rodei centenas de servidores web atrás de loadbalancers, hospedando muitos sites diferentes com uma infinidade de aplicativos (dos quais eu não tenho controle). Cerca de uma vez por mês, um dos sites é invadido e um script de flood é enviado para atacar algum banco ou instituição política. No passado, estas eram sempre inundações UDP que foram efetivamente resolvidas pelo bloqueio do tráfego UDP de saída no servidor da Web individual. Ontem eles começaram a inundar um grande banco americano de nossos servidores usando muitas conexões TCP para a porta 80. Como esse tipo de conexão é perfeitamente válido para nossos aplicativos, apenas bloqueá-los não é uma solução aceitável.

Estou considerando as alternativas a seguir. Qual desses você recomendaria? Você já implementou isso e como?

  • Limite nos pacotes TCP de saída do servidor da web (iptables) com a porta de origem! = 80
  • O mesmo, mas com enfileiramento (tc)
  • Taxa limite de tráfego de saída por usuário por servidor. Completamente um fardo administrativo, pois há potencialmente milhares de usuários diferentes por servidor de aplicativos. Talvez isso: como posso limitar a largura de banda por usuário?
  • Mais alguma coisa?

Naturalmente, também estou procurando maneiras de minimizar a chance de hackers entrarem em um dos nossos sites hospedados, mas como esse mecanismo nunca será 100% à prova d'água, quero limitar severamente o impacto de uma invasão.

Atualização: estou testando atualmente com essas regras, o que impediria esse ataque específico. Como você se propõe a torná-los mais genéricos? Estou perdendo um ataque conhecido do TCP DoS quando eu apenas classifico o limite em pacotes SYN?

iptables -A OUTPUT -p tcp --syn -m limit --limit 100/min -j ACCEPT
iptables -A OUTPUT -p tcp --syn -m limit --limit 1000/min -j LOG --log-prefix "IPTables-Dropped: " --log-level 4
iptables -A OUTPUT -p tcp --syn -j REJECT --reject-with tcp-reset

Felicidades!

    
por Willem 19.10.2012 / 12:30

2 respostas

3

As melhores soluções possíveis para a minha opinião e a que funcionou muito bem para mim é limitar o número de conexões / pacotes para o ip de destino. Definir o limite para uma taxa razoável impedirá que o invasor envie uma grande quantidade de conexões para o destino. Definir a porta e o protocolo não é uma boa ideia, porque se o invasor estiver enviando inundação http hoje, amanhã ele usará um tipo diferente de ataque. limitar as conexões por ip como geral seria uma solução para o seu problema.

Espero que ajude:)

    
por 22.10.2012 / 00:50
-3

A postura que sempre tomei é que um servidor web não deveria estar fazendo conexões TCP de saída - apenas enviando tráfego como um servidor respondendo a solicitações de entrada. (Eu também permito TCP de entrada apenas para o servidor web e SSH.) (Relacionado a isso eu também acredito que um servidor web nunca é o host certo para enviar e-mails.) Isso não apenas previne ataques externos - ele também adiciona um pouco de dificuldade aos ataques feitos em seus sistemas (hackers não podem obter uma janela xterm ou enviar seu kit de ferramentas para seu host).

    
por 25.10.2012 / 15:06