Saída do log tcpdump

5

O que eu quero basicamente é escrever todos os pacotes capturados pelo tcpdump em um arquivo a cada 3 dias. Então, basicamente, o tcpdump deve ser executado por 24 horas no dia 1 e gravar a saída em Day1.log e similar para Day2 e Day3. No 4º dia, ele deve repetir e gravar o registro no Dia 1 novamente. Isso é basicamente para verificar as tentativas de DDoS em meu servidor e descobrir o tipo de ataque, incluindo o IP do invasor, pois nos últimos sete dias minhas máquinas foram infectadas por DDoS e espero que isso aconteça novamente. Eu sei que é feito por alguns cronjobs, mas eu preciso dos comandos reais para colocar lá?

Eu também quero saber qual IP fez a quantidade de entrada em MB / seg no máximo, pois eu tenho um tráfego alto, então levaria quase 6 horas para continuar procurando esses arquivos pelo IP do invasor. Então, há alguma coisa no WireShark durante a análise desses arquivos que possa dizer quanta entrada em mb / s foi feita por um IP para o meu servidor? Se não, como devo encontrar isso?

Editar: --------------------------------------------

Vocês estão livres para postar suas idéias de combater isso também. Tudo que eu preciso é encontrar o IP do atacante, os dados de pacote que ele enviou e a entrada em mb / s feita para o meu servidor. Meus clientes não fazem mais do que 300kb / s de entrada, por isso, se definirmos um filtro para capturar mais de 1mb / s de entrada se for feito, poderíamos capturar isso.

    
por Asad Moeen 10.05.2012 / 20:35

6 respostas

7

Em vez de registrar todo o tráfego, sugiro o seguinte: Monitorar o número de pacotes enviados ao seu servidor. Se exceder um certo limite, registre um par de 1000 pacotes e espere por mais tempo.

Esse rastreamento de pacote deve conter muitas informações que podem ser usadas para análise. Além disso, não irá impor demasiada carga adicional ao seu servidor enquanto tudo estiver bem. Você pode usar o seguinte código bash hackeado como ponto de partida (pode ser iniciado em screen , por exemplo):

interface=eth0
dumpdir=/tmp/

while /bin/true; do
  pkt_old='grep $interface: /proc/net/dev | cut -d :  -f2 | awk '{ print $2 }''
  sleep 1
  pkt_new='grep $interface: /proc/net/dev | cut -d :  -f2 | awk '{ print $2 }''

  pkt=$(( $pkt_new - $pkt_old ))
  echo -ne "\r$pkt packets/s3[0K"

  if [ $pkt -gt 5000 ]; then
    echo -e "\n'date' Under attack, dumping packets."
    tcpdump -n -s0 -c 2000 -w $dumpdir/dump.'date +"%Y%m%d-%H%M%S"'.cap
    echo "'date' Packets dumped, sleeping now."
    sleep 300
  fi
done

Sinta-se à vontade para adaptá-lo às suas necessidades.

    
por 11.05.2012 / 09:32
14

Está aí nas man pages, tcpdump tem -G,

If specified, rotates the dump file specified with the -w option every
rotate_seconds seconds. Savefiles will have the name specified by -w
which should include a time format as defined by strftime(3). If no
time format is specified, each new file will overwrite the previous.

Portanto, tcpdump -i eth0 -s 65535 -G 86400 -w /var/log/caps/%F.pcap escreverá em /var/log/caps/%F.pcap (onde% F será 2012-05-10, 2012-05-11, 2012-05-12, etc). Lembre-se de que irá rodar 24 horas a partir do momento em que inicia o limite, pelo que não é tecnicamente por dia, a menos que o execute à meia-noite.

Eu não estou dizendo o que você está planejando fazer é uma boa idéia, só que esta é a solução que você está pedindo.

    
por 10.05.2012 / 21:26
4

Você certamente pode obter esses dados do tcpdump, mas não é totalmente direto.

Primeiro, o tcpdump grava em um formato de arquivo especial que não é um arquivo de log, portanto você precisaria de outra instância do tcpdump ou do Wireshark para analisar os arquivos de log. Mas aqui está uma sugestão básica:

  • escreve um script que mata qualquer tcpdump em execução e inicia um novo que grava em um arquivo de log com a data do dia em seu nome
  • executa o script do cron a cada meia-noite
  • tem uma entrada cron que limpa arquivos com mais de 3 dias no diretório em que você armazena os arquivos de log

Esteja avisado que o tcpdump fornece muita saída, então você precisará de uma boa quantidade de espaço livre em disco!

    
por 10.05.2012 / 20:45
3

Se você está no Linux, você pode usar o logrotate.

Algo como

   /var/log/dump.pcap {
       rotate 3
       daily
       postrotate
           /usr/bin/killall tcpdump
           /usr/sbin/tcpdump options -w /var/log/dump.pcap
       endscript
   }

Esta configuração de logrotate iria para, e. /etc/logrotate.d/tcpdump .

Você provavelmente tem uma linha em /etc/crontab ou como eu um script /etc/cron.daily/logrotate que chama logrotate.

O Logrotate quando processa esse arquivo renomeia /var/log/dump.pcap.1 para /var/log/dump.pcap.2 e /var/log/dump.pcap para /var/log/dump.pcap.1 e assim por diante. Então, quando todos esses arquivos forem renomeados e os mais antigos removidos (neste exemplo, /var/log/dump.pcap.2 seria removido antes da renomeação de .1 para .2), ele executará os comandos em postrotate . Infelizmente o tcpdump não sobrevive a um kill -HUP que é usado em outros deamons como o httpd, então essa receita mata-o e então inicia uma nova captura.

Note que no primeiro dia você pode querer iniciar o tcpdump manualmente.

Isso não foi testado, mas deve fazer o truque.

    
por 10.05.2012 / 21:28
1

Algo como darkstat pode ser mais útil para identificar hosts de alto tráfego, embora não armazene o tráfego real (ele registra números de porta embora).

    
por 10.05.2012 / 20:53
0

Eu usei tshark para fazer isso, mas você precisa ter cuidado.

tshark -i eth0 -a duraition:86400 -b -w x.pcap

Ou você pode definir opções de formato de saída complexas e redirecionar a saída padrão. O problema é que o tshark nunca descarta os pacotes recebidos, portanto, ele acaba ficando sem memória. corridas mais curtas são melhores.

Outra técnica que eu gosto é usar o iptables e o ULOG. existem vários daemons ulog que podem enviar coisas para arquivos de log comuns. Eu também usei o specter para converter relatórios ulog em mensagens.

    
por 10.05.2012 / 21:01