Meu desafio
Eu preciso fazer o tcpdumping de muitos dados - na verdade, a partir de 2 interfaces deixadas no modo promíscuo que são capazes de ver muito tráfego.
Resumindo
- Registrar todo o tráfego no modo promíscuo a partir de 2 interfaces
- Essas interfaces não recebem um endereço IP
- Os arquivos pcap devem ser rotacionados por ~ 1G
- Quando 10 TB de arquivos são armazenados, comece a truncar o mais antigo
O que eu faço atualmente
Agora eu uso o tcpdump assim:
ifconfig ethX promisc
ifconfig ethX promisc
tcpdump -n -C 1000 -z /data/compress.sh -i any -w /data/livedump/capture.pcap $FILTER
O $FILTER
contém src / dst filtros para que eu possa usar -i any
. A razão para isso é que eu tenho duas interfaces e gostaria de executar o dump em um único thread em vez de dois.
compress.sh
cuida da atribuição de tar a outro núcleo da CPU, compacta os dados, fornece um nome de arquivo razoável e move-o para um local de arquivamento.
Não posso especificar duas interfaces, portanto, escolhi usar filtros e despejar da any
interface.
No momento, não faço tarefas domésticas, mas planejo monitorar o disco e, quando tiver 100G, começarei a limpar os arquivos mais antigos - isso deve ser bom.
E agora; meu problema
Eu vejo pacotes descartados. Isso é de um dump que está em execução há algumas horas e coletou cerca de 250 GB de arquivos pcap:
430083369 packets captured
430115470 packets received by filter
32057 packets dropped by kernel <-- This is my concern
Como evitar que muitos pacotes sejam descartados?
Essas coisas que eu já tentei ou olhei
Alterou o valor /proc/sys/net/core/rmem_max
e o /proc/sys/net/core/rmem_default
que realmente ajudou - na verdade, ele cuidou de quase metade dos pacotes descartados.
Também observei o gulp - o problema com o gulp é que ele não suporta interfaces múltiplas em um processo e fica irritado se a interface não tiver um endereço IP. Infelizmente, isso é um disjuntor no meu caso.
O próximo problema é que, quando o tráfego flui através de um cano, não consigo fazer a rotação automática. Obter um arquivo enorme de 10 TB não é muito eficiente e eu não tenho uma máquina com 10 TB + RAM na qual eu possa executar o wireshark, então está pronto.
Você tem alguma sugestão? Talvez até uma maneira melhor de fazer meu despejo de tráfego completamente.