Monitore o tráfego TCP em uma porta específica

Monitore o tráfego TCP em uma porta específica

Pesquisei bastante por isso, mas não consigo encontrar um exemplo prático.

Meu objetivo é monitorar o tráfego TCP em uma porta específica para ver as conexões de entrada e gravá-las em um arquivo de texto. O problema é que também preciso de um carimbo de data/hora em cada linha para mostrar exatamente quando o cliente se conectou à segunda.

Já esgotei netstat, nmap e tcptrack, mas nenhum suporta carimbo de data/hora.

Eu estava pensando que um script de shell do Linux poderia funcionar se eu monitorasse uma porta local específica e escrevesse texto em um arquivo quando uma conexão fosse feita e apenas concatenar a data em cada linha.

Eu estava brincando com isso:

netstat -ano|grep 443|grep ESTABLISHED

assim como isso:

tcptrack -i eth0 port 443

mas nenhum deles atende às minhas necessidades, pois preciso do momento em que a conexão chegar.

Se você tiver alguma sugestão ou puder me indicar a direção certa, ficaria muito grato.

Obrigado. :)

Responder1

editar: Ainda estou recebendo votos positivos para isso anos depois. Por favor, não vá para esta resposta, oresponda usandoiptablesaqui é muito superior na minha opinião.


tcpdump port 443 and '(tcp-syn|tcp-ack)!=0'

ou only tcp-syn, ou only tcp-ack(meu palpite seria esse), dependendo do que você precisa.

Responder2

Você pode usar o suporte iptables no kernel Linux para isso.A vantagem é que não requer nenhum software extra para ser moderadamente útil. A desvantagem é que a configuração requer privilégios de root (mas como você está falando da porta 443, que é uma porta privilegiada, provavelmente precisará de privilégios de root na maioria das soluções).

Adicione uma regra iptables com algo como:

sudo iptables -I INPUT -p tcp --dport 443 --syn -j LOG --log-prefix "HTTPS SYN: "

(Ajuste a -I INPUTpeça de acordo com seu gosto.)

Quando a regra for acionada, uma entrada syslog será emitida pelo kernel. Por exemplo, com uma regra de entrada, a entrada de log pode ser semelhante a:

5 de dezembro 09:10:56 kernel do nome do host: [1023963.185332] HTTPS SYN: IN=ifX OUT= MAC=80:80:80:80:80:80:80:80:80:80:80:80:08:00 SRC=ABCD DST=WXYZ LEN=52 TOS=0x00 PREC=0x20 TTL=119 ID=11901 DF PROTO=TCP SPT=37287 DPT=443 WINDOW=8192 RES=0x00 SYN URGP=0

Você pode então usar qualquer ferramenta comum de monitoramento de log para fazer algo útil com essas informações. Se a sua implementação de syslog suportar, você poderá até direcioná-los para um arquivo de log separado, atendendo efetivamente ao seu requisito de gravar os dados de conexão em um arquivo com carimbo de data e hora para o segundo, sem software adicional.

Observe que o LOGalvo é um alvo sem terminação, o que significa que quaisquer regras que o sigam ainda serão avaliadas e o pacote não será rejeitado ou aceito pela própria regra LOG. Isso torna o LOGalvo útil também para depurar regras de firewall.

Para evitar inundar seu log, considere usar o limitmódulo em conjunto com este. Consulte a página man do iptables(8) para obter detalhes.

Responder3

Resolução em microssegundos

Por padrão, otcpdumputilitário reportará o tempo com resolução de microssegundos. Por exemplo:

$ sudo tcpdump -i any port 443

mostrará uma saída semelhante à seguinte:

12:08:14.028945 IP localhost.33255 > localhost.https: Flags [S], seq 1828376761, win 43690, opções [mss 65495,sackOK,TS val 108010971 ecr 0,nop,wscale 7], comprimento 0
12:08: 14.028959 IP localhost.https > localhost.33255: Sinalizadores [R.], seq 0, ack 1828376762, vitória 0, comprimento 0

Veja tcpdump(8) para uma lista completa de opções do tcpdump, e pcap-filter(7) para a sintaxe completa dos filtros que você pode usar.

Responder4

Você pode precisar disso também para monitorar os pacotes de entrada e saída de outras máquinas.

tcpflow -i eth0 -c port 7891

(opção -ide mencionar a rede, opção -cde imprimir os pacotes no console)

informação relacionada