Resolva problemas de rede com TCPDUMP

Com exemplos práticos do dia a dia e diversos exemplos, explicamos como o TCPDUMP pode ajudar a resolver problemas de rede!


| Se você apoia nosso site, desative o AdBlock quando visitá-lo, inclusive em Mobile!
Os anúncios são poucos e não invasivos. Se quiser contribuir com nosso trabalho, clique em qualquer banner de sua preferência, exceto dos Parceiros. 
Mais detalhes clicando aqui.


1. O que é tcpdump?

A ferramenta tcpdump foi desenvolvida no final dos anos 1980 e tem sido uma importante solução de problemas de rede desde então, por executar em todos os sistemas baseados em UNIX, UNIX legítimos e também foi portado para Windows.

No nível mais básico, tcpdump é uma ferramenta de captura de pacotes usada para solucionar problemas de conectividade de rede.

Algo que se compare a ele, a quem estiver se perguntando, é o Wireshark. No entanto, é muito mais leve e é apenas em linha de comando – nenhuma GUI disponível até então.

2. Instalação

Normalmente vem com a maioria dos sistemas operacionais Linux modernos, então provavelmente você já deve o tem. Você pode verificar se possui o pacote executando which tcpdump.

O resultado deverá ser semelhante a esse:
/usr/sbin/tcpdump

Se não estiver instalado, não se preocupe – a instalação é simples. Execute o seguinte comando conforme seu sistema:

$ sudo yum/dnf/apt install -y tcpdump

3. Uso Básico

Agora que temos a ferramenta pronta para uso, vamos dar uma olhada nas funções mais básicas. Para começar a capturar pacotes em uma interface, precisamos ver as interfaces de rede disponíveis para captura. Para fazer isso, usamos:

$ sudo tcpdump -D

Aqui um exemplo do meu notebook com Ubuntu 20.04 LTS:

Este comando é extremamente útil em ambientes corporativos onde interfaces específicas são usadas para mover determinados tipos de dados. Examinaremos essa situação um pouco mais de perto nas últimas partes deste artigo. Agora, vamos capturar alguns pacotes para que possamos ver a saída e as informações que estamos reunindo aqui.

Para uma captura básica, use o seguinte:
$ sudo tcpdump -i any

Aqui, usamos o -i para indicar a interface, any para escutar todas as interfaces, indefinidamente até que o comando seja parado com CTRL C.

A outra opção que você pode usar é o -c para limitar o número de pacotes capturados. Esse limite é, honestamente, uma das melhores maneiras de usar o comando, na minha opinião, porque na maior parte do tempo você está tentando descobrir problemas de conectividade.

$ tcpdump -i any -c 3

Por padrão, o tcpdump resolve endereços IP e números de porta em nomes (acima). Em grandes ambientes onde os esquemas de nomenclatura são um pouco complicados, você pode desabilitar essa resolução para obter endereços IP e números de porta sem tradução. Use -nn para desabilitar a resolução de nomes e portas (note que são 2x a letra N)

$ sudo tcpdump -i any -c3 -nn

4. Mais filtros úteis

Para filtrar por endereço IP:

$ sudo tcpdump host x.x.x.x

Para filtrar por interface:

$ sudo tcpdump eth0

Para filtrar por fonte:

$ sudo tcpdump src x.x.x.x

Para filtrar por destino:

$ sudo tcpdump dst x.x.x.x

Para filtrar por protocolo:

$ sudo tcpdump icmp

Há um grande número de opções e filtros para aprimorar suas capturas apenas para o tráfego mais útil. Se precisar de mais informações, verifique a página do manual.

5. Exemplo Prático

Um cliente geralmente tem uma interface de replicação designada configurada para enviar tráfego de seu servidor de produção para um servidor de destino de replicação. Vamos examinar o que aparece em um nível básico e usar tcpdump para verificar o tráfego de nossa interface de origem até o destino.

5.1 Condições de pré-requisito

Servidor de origem – 172.25.1.5
Servidor de destino – 172.25.1.4
Interface de replicação – enp0s8

Em teoria, quando iniciamos um trabalho de replicação de dados, devemos ver o fluxo de tráfego de 172.25.1.5 para 172.25.1.4.

Iniciemos um rápido trabalho de “replicação” (ping) em segundo plano no servidor de origem. Em seguida, executamos tcpdump nos servidores de origem e destino para ver se estamos recebendo o tráfego.

$ tcpdump -i enp0s8 -nn

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on enp0s8, link-type EN10MB (Ethernet), capture size 262144 bytes
23:17:55.347648 ARP, Request who-has 172.25.1.4 tell 172.25.1.5, length 28
23:17:56.378194 ARP, Request who-has 172.25.1.4 tell 172.25.1.5, length 28
23:17:57.398294 ARP, Request who-has 172.25.1.4 tell 172.25.1.5, length 28
23:17:58.422946 ARP, Request who-has 172.25.1.4 tell 172.25.1.5, length 28
23:17:59.448412 ARP, Request who-has 172.25.1.4 tell 172.25.1.5, length 28
^C
5 packets captured
5 packets received by filter
0 packets dropped by kernel

Você pode ver que o tráfego acima é apenas uma solicitação – não estamos obtendo uma resposta do destino. Em um cenário real, isso indicaria um problema no destino, pois podemos ver claramente o tráfego sendo enviado pela interface de origem apenas.

Depois de ligar a interface de destino novamente …

Aqui estão as capturas de tráfego da origem e do destino depois que o problema foi identificado e resolvido.

ORIGEM:

$ sudo tcpdump -i enp0s8 -c3 -nn

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on enp0s8, link-type EN10MB (Ethernet), capture size 262144 bytes
23:22:04.694919 IP 172.25.1.5 > 172.25.1.4: ICMP echo request, id 7168, seq 911, length 64
23:22:04.695346 IP 172.25.1.4 > 172.25.1.5: ICMP echo reply, id 7168, seq 911, length 64
23:22:05.724968 IP 172.25.1.5 > 172.25.1.4: ICMP echo request, id 7168, seq 912, length 64
3 packets captured
3 packets received by filter
0 packets dropped by kernel

DESTINO:

$ sudo tcpdump -i enp0s8 -c3 -nn

dropped privs to tcpdump
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on enp0s8, link-type EN10MB (Ethernet), capture size 262144 bytes
23:22:13.916519 IP 172.25.1.5 > 172.25.1.4: ICMP echo request, id 7168, seq 920, length 64
23:22:13.916569 IP 172.25.1.4 > 172.25.1.5: ICMP echo reply, id 7168, seq 920, length 64
23:22:14.935720 IP 172.25.1.5 > 172.25.1.4: ICMP echo request, id 7168, seq 921, length 64
3 packets captured
4 packets received by filter
0 packets dropped by kernel

Uma análise mais detalhada da saída mostra que o tráfego é enviado do servidor de origem para o servidor de destino com êxito.

6. Conclusão

Aprendemos o quê e o por quê de tcpdump hoje ser uma boa ferramenta de análise de redes. Até demos uma olhada em um caso de uso do mundo real.

Obviamente, existem outras considerações em um ambiente ao vivo. Tudo, desde interfaces inativas (como neste exemplo) até senhas incorretas durante a transmissão, podem causar falhas de rede.

Apenas a experiência de campo lhe ensina essas lições, mas pelo menos agora você sabe como começar a identificar um problema.

#UrbanCompassPony

Fonte:
RedHat

Deixe um comentário