Como lidar com o ataque de conexões TCP no Linux

1

Meu servidor está sendo inundado até que o apache fique sem resposta, e preciso de ajuda para encontrar e bloquear os endereços IP responsáveis .

Normalmente, não tenho mais de 150 conexões. Agora eu tenho milhares:

netstat -nat | awk '{print $6}' | sort | uniq -c | sort -n
      1 established)
      1 Foreign
     13 LAST_ACK
     20 CLOSING
     30 SYN_RECV
     41 LISTEN
     44 FIN_WAIT1
     74 FIN_WAIT2
     77 CLOSE_WAIT
    273 ESTABLISHED
   1960 TIME_WAIT

O gráfico MRTG mostra claramente as conexões normais até o início do ataque:

Este é o resultado da contagem de conexões por IP (somente no final da lista):

netstat -atun | awk '{print $5}' | cut -d: -f1 | sed -e '/^$/d' |sort | uniq -c | sort -n
  5 4.59.90.216
  5 4.59.90.222
  5 4.59.90.237
  5 4.59.90.242
  5 74.125.26.95
  6 186.158.143.202
  6 216.58.219.162
  6 4.59.90.251
  7 104.24.5.60
  7 216.58.192.66
  7 4.59.90.212
  7 4.59.90.231
  7 4.59.90.241
  9 216.58.192.98
 10 189.177.214.89
 10 23.10.101.162
 11 4.59.90.226
 12 85.94.197.200
 25 216.58.219.66
 31 216.58.219.130
 40 0.0.0.0
 86 83.101.136.42
1026 10.0.0.2

O último é o IP do servidor, não sei porque é mostrado. Obrigado.

    
por andreszs 09.03.2017 / 16:53

1 resposta

3

Uma coisa que você pode tentar limitar o impacto das conexões no apache é limitá-las.

Existem algumas maneiras de fazer isso, mas uma maneira pode ser:

iptables -A INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --set
iptables -A INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --update --seconds 600 --hitcount 5 -j DROP

Isso permitiria 5 novas conexões para a porta 80 por IP de origem em 10 minutos, o que pode ajudar você a ganhar mais tempo para pesquisar mais. Se o problema está atingindo mais do que apenas o apache, você pode considerar aplicá-lo a todas as conexões TCP, mas eu também sugiro que você adicione uma exceção para sua conexão SSH nesse caso.

Possivelmente vale a pena investigar se você não tem o fail2ban, que pode configurar para examinar seus logs do Apache e bloquear hosts com base em determinados critérios.

Não tenho certeza se recomendaria implantá-lo agora (o potencial para algo dar errado parece um pouco alto), mas valeria a pena colocar na lista de possíveis soluções a longo prazo.

De passagem: tudo isso está assumindo que o problema é a capacidade de resposta / carga do Apache, não a carga na sua conexão com a Internet.

Se todo o seu uplink estiver saturado, não há muito o que fazer em seu host, já que o problema está mais avançado do que isso.

Se você é baseado na nuvem, talvez valha a pena ver quais opções existem. Se você não for, talvez valha a pena ver se uma empresa de proteção CDN / DDoS (cloudflare vem à mente, mas eu não posso falar por seus serviços) poderia ajudar.

Eu também tenderia a querer descobrir o que sua máquina está fazendo com todas essas conexões - netstat -ptn pode ser de alguma ajuda

Além disso, você pode ver se iftop ou iptraf ajudam você a entender melhor o que está acontecendo. Veja também link

    
por 09.03.2017 / 17:04