Monitorar o tráfego TCP na porta específica


49

Eu procurei bastante isso, mas não consigo encontrar um exemplo de trabalho.

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

Já exaurei o netstat, o nmap e o tcptrack, mas nenhum deles suporta o carimbo de data e hora.

Eu estava pensando que um script de shell linux poderia funcionar se eu monitorasse uma porta local específica e escrevesse texto em um arquivo quando uma conexão fosse estabelecida, concatenando 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 também não atendem às minhas necessidades, pois preciso do horário em que a conexão chega.

Se você tiver alguma sugestão ou me indicar a direção certa, seria muito apreciada.

Obrigado. :)

linux  bash 

Haha migrou do stackoverflow, mas precisa migrar para unix / linux
— Kolob Canyon

Respostas:


71

edit : Eu ainda estou recebendo votos por isso anos depois. Por favor, não escolha esta resposta, a resposta que usamosiptables aqui é muito superior em minha opinião.


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

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


Em vez de mostrar o nome do host para cada conexão, existe uma maneira de substituí-lo pelo IP?

Yep, adicione -ndepois tcpdump (man tcpdump: -n Não converter endereços (ou seja, endereços de acolhimento, números de portas, etc.) para nomes. )
— Wrikken

5
Eu diria que enviar spam para o log do kernel não é realmente superior. ;)
— Daniel B

1
Ah, mas eu gostaria, desde que se configura propriamente onde que os registros devem ir claro: P Mas hey, essa resposta é ainda aqui se isso é um disjuntor do negócio :)
— Wrikken

2
@Wrikken O problema de usar o log do kernel para isso é que, usando sua solução quando você pressiona a tecla Ctrl + C do tcpdump, tudo permanece como antes. A solução iptables significa deixar uma "surpresa" para trás se você não remover a regra manualmente. Essa surpresa pode ser traduzida em ter um disco raiz completo em pouco tempo. Desculpe, mas estou votando positivamente neste (:
— John Blackberry

31

Você pode usar o suporte ao iptables no kernel do Linux para isso. A vantagem é que ele não requer nenhum software extra para ser moderadamente útil. A desvantagem é que ele requer privilégios de root para configurar (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 do 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 o seu gosto.)

Quando a regra é acionada, uma entrada syslog será emitida pelo kernel. Por exemplo, com uma regra de entrada, a entrada do log pode se parecer com:

5 de dezembro 09:10:56 nome do host do kernel: [1023963.185332] HTTPS SYN: IN = ifX OUT = MAC = 80: 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 JANELA = 8192 RES = 0x00 SYN URGP = 0

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

Observe que o LOGdestino é um destino sem término, o que significa que qualquer regra a seguir ainda será avaliada e o pacote não será rejeitado ou aceito pela própria regra LOG. Isso torna o LOGdestino útil também para depurar regras de firewall.

Para evitar inundar seu log, considere usar o limitmódulo em conjunto com isso. Veja a página de manual do iptables (8) para detalhes.


é possível executar um script python acionando isso?
— 22818 Karl Zillner

Não se esqueça de excluir essas regras de tabelas de IP quando terminar, caso contrário, elas enviarão spam aos logs com muita intensidade, dependendo da regra. digitalocean.com/community/tutorials/…
— Mo Beigi

26

Resolução em microssegundos

Por padrão, o utilitário tcpdump relatará 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: Flags [R.], seq 0, ack 1828376762, vitória 0, comprimento 0

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


5

443 é tráfego criptografado - tão difícil de fazer cara ou coroa de tráfego nesta porta de qualquer maneira:

você pode fazer

yum install ngrep ou apt-get install ngrep

então corra

ngrep -W byline -d any port 443 -q

2

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

tcpflow -i eth0 -c port 7891

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


Este é realmente um comentário e não uma resposta à pergunta original. Para criticar ou solicitar esclarecimentos a um autor, deixe um comentário abaixo da postagem - você sempre pode comentar em suas próprias postagens e, quando tiver reputação suficiente , poderá comentar em qualquer post . Leia Por que preciso de 50 reputação para comentar? O que posso fazer em vez disso?
— DavidPostill


0

Se você precisar de uma solução permanente que sempre monitore o tráfego nas portas de interesse, sugiro usar QoS (o comando tc no linux). O tc é um pouco enigmático e não documentado, então eu uso o FireQoS para configurar QoS e netdata para monitorá-lo em tempo real.

Verifique isso para obter mais informações: https://github.com/firehol/netdata/wiki/You-should-install-QoS-on-all-your-servers


Eu diria que isso é um pouco exagerado, simplesmente para conexões de log, onde o iPTables + --log funcionará.
— Djsmiley2k - CoW

Você está certo, é um exagero se você precisar registrar as conexões. Uso essa solução não para monitorar quais clientes estão conectados, mas quanto de largura de banda o serviço usa.
— Costa Tsaousis
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.