(D) DOS - tcpdump estabeleceu uma análise de conexões (muitas conexões estabelecidas)

1

Como posso depurar este problema?

(eu tenho capturas completas do tcpdump)

Eu tenho um servidor TCP no qual muitos clientes estabelecem conexões persistentes. Normalmente, todos esses clientes se comportam, e eu nunca alcanço as 1024 conexões de limite padrão do Linux (arquivos abertos) por processo.

Ontem alguém (ou algo assim) começou a se comportar mal e deixou muitas conexões abertas, forçando-me a reiniciar o servidor. Você pode ver seu comportamento no seguinte gráfico munin netstat:

Sempre que as conexões atingem 1000, reinicio o servidor. Apenas a quarta vez que o mau comportamento parou tão misteriosamente quanto começou, sem qualquer razão aparente. Algo semelhante aconteceu há uma semana.

Todas as conexões ruins vêm da mesma (sub) rede: eu posso isolá-las, mas existem algumas conexões válidas que vêm da mesma rede também (por isso não posso negar conexões dessa rede).

Até agora, usei o tcpdump, ethereal e ngrep, mas não encontrei uma maneira de examinar as conexões estabelecidas, mas isso não transfere dados.

  • Como devo procurar as capturas do tcpdump (pcap) para isolar as conexões mal-comportadas e estudá-las?
  • O que você sugeriria para impedir que isso acontecesse?

Obrigado!

    
por Fh. 20.07.2009 / 23:56

2 respostas

2

No Wireshark, vá para Estatísticas- > Conversas- > TCP . Tente olhar a lista para ver se algo parece estranho, por exemplo um host com um número anormalmente grande de conexões, bytes baixos transferidos ou uma baixa taxa de transferência. Se você realmente precisa, pode copiar os dados para uma planilha. (Você pode fazer algo semelhante no lado do servidor usando o netstat, por exemplo, no Linux, você pode executar netstat -nt | sort -n -t . -k5,5 -k6,6 -k7,7 -k8,8 para listar as conexões classificadas pelo endereço IP do cliente).

Se o problema estiver limitado a um ou dois clientes, você poderá analisar o tráfego deles para tentar reduzir ainda mais o problema.

(E se você realmente estiver usando o Ethereal, você deve atualizar para o Wireshark imediatamente. Divulgação: Eu sou o desenvolvedor líder.)

    
por 21.07.2009 / 22:27
1

A análise de protocolo não é difícil, mas é tediosa. O processo básico é iterativo, com os resultados da etapa anterior servindo como entrada para a próxima etapa da análise. Basicamente, você está sempre comparando o que deveria estar acontecendo com o que está acontecendo e anotando as anomalias.

Eu sugeriria começar com uma captura de pacote bruta com um filtro simples para limitar a captura às sub-redes problemáticas. Dependendo do protocolo da camada de aplicação, eu limitaria o tamanho da captura a ~ 100 bytes ou mais - o suficiente para obter os cabeçalhos do protocolo TCP e da camada inferior, bem como um pouco da camada de aplicação.

Uma vez que você saiba que tem um exemplo do comportamento problemático, carregue a captura bruta de pacotes em seu analisador de protocolo de escolha - tcpdump, wireshark, Netscout Sniffer, o que for. Agora você pode começar a procurar mais padrões que permitam isolar o tráfego do problema. Se você puder isolar o tráfego, poderá analisá-lo.

No comentário, mas fez uma boa recomendação para filtragem baseada em quadros SYN / ACK e ver se há endereços IP que possuem um grande número de conexões abertas.

Você pode então verificar as conexões desses endereços IP e contar quantos ficam ociosos e quantos trocam dados reais.

Dê uma olhada nos dados que estão sendo trocados. Os dados do Application Layer Protocol fazem sentido para o seu aplicativo? Conte o número de conexões em que faz sentido versus as conexões com anomalias.

Para alguns problemas bem conhecidos, os engenheiros especialistas foram criados para automatizar parte desse trabalho. Na minha opinião, isso é maior do que o IDS, um Expert Engine ou um conjunto de Expert Engines, que automatizam a análise de capturas de pacotes. Você pode encontrar um pacote que faça a análise que você precisa fazer. Enquanto isso, você pode começar a analisar os dados que você tem.

Se tudo que você tem é o tcpdump, você tem que usá-lo, mas eu prefiro os analisadores gráficos de protocolo, especialmente se tiver alguma funcionalidade de tabulação ou de gráficos. A GUI ajuda a visualizar os dados e muitos convenientemente codificam as partes do pacote para facilitar a leitura.

    
por 21.07.2009 / 00:47