Há um momento em que os logs deixam de chegar. O serviço diz que está a funcionar, a firewall diz que deixou passar, e mesmo assim alguma coisa na rede não bate certo. É nesse momento que se abre o tcpdump: o utilitário que mostra, pacote a pacote, o que está realmente a circular no cabo — sem interpretações intermédias, sem resumos, apenas os factos.
Neste artigo percorremos as opções e os filtros que realmente interessam, mostramos como o tcpdump se usa para detetar scans de portas e tráfego suspeito, e deixamos um simulador interativo para praticar sem precisar de uma rede de laboratório.
O que faz o tcpdump
O tcpdump captura pacotes diretamente da interface de rede, usando a biblioteca libpcap, e imprime uma linha de resumo por cada um: hora com precisão de microssegundos, endereços e portos de origem e destino, flags TCP, números de sequência e tamanho. Apesar do nome, não se limita ao TCP — captura UDP, ICMP, ARP e tudo o resto que passar na interface. Como precisa de pôr a placa de rede a entregar tráfego que não lhe é destinado, requer privilégios de root (ou a capability CAP_NET_RAW).
A forma geral combina opções com uma expressão de filtro BPF (Berkeley Packet Filter), que decide que pacotes são capturados:
tcpdump [opções] [expressão de filtro]
O detalhe importante: o filtro é aplicado no kernel, antes de os pacotes chegarem ao programa. Filtrar bem não é só uma questão de legibilidade — é o que torna possível capturar numa rede com tráfego intenso sem perder pacotes.
As opções que interessam
Interface e apresentação
-i eth0— escolhe a interface a escutar;-i anyapanha todas ao mesmo tempo. Sem-i, o tcpdump usa a primeira interface ativa que encontrar, que nem sempre é a pretendida.-Dlista as interfaces disponíveis.-n— desliga a resolução de nomes: IPs e portos em número. Além de ser mais rápido, evita que a própria captura gere consultas DNS — que iriam aparecer na captura. É quase sempre a primeira opção a acrescentar.-c 10— para automaticamente ao fim de 10 pacotes, em vez de esperar porCtrl+C. Indispensável em scripts e em redes movimentadas.-v,-vv— mais detalhe por pacote (TTL, checksums, campos DNS);-qfaz o contrário.-ttttacrescenta data e hora completas, útil para correlacionar com logs.
Filtros BPF: escolher o que se captura
Os filtros são a alma do comando. Combinam protocolos, endereços e portos com os operadores and, or e not:
# Só o tráfego de/para uma máquina
tcpdump -n -i eth0 host 192.0.2.7
# Todo o SSH, nos dois sentidos
tcpdump -n -i eth0 port 22
# TCP, excluindo a nossa própria sessão SSH
tcpdump -n -i eth0 tcp and not port 22
# Uma rede inteira e um intervalo de portos
tcpdump -n -i eth0 net 192.0.2.0/24 and portrange 8000-8100
tcp/udp/icmp— filtram por protocolo.host,net— endereço ou rede, em qualquer direção;srcedstrestringem ao sentido (src host,dst port).port,portrange— porto único ou intervalo, como origem ou destino.tcp[tcpflags]— filtra pelas flags TCP. Por exemplo,'tcp[tcpflags] == tcp-syn'apanha apenas os pacotes SYN puros — a matéria-prima da deteção de scans.
Ver o payload
-A— imprime o conteúdo de cada pacote em ASCII. Protocolos em claro, como HTTP ou SMTP, tornam-se legíveis linha a linha; tráfego cifrado aparece como ruído.-X— o mesmo conteúdo em hexadecimal e ASCII lado a lado, para inspecionar protocolos binários.-e— mostra os cabeçalhos Ethernet, com os endereços MAC — útil para investigar ARP spoofing ou máquinas com identidades trocadas.-s— define o snaplen, o número de bytes capturados por pacote. O valor por omissão moderno (262144) captura o pacote inteiro; valores baixos truncam o payload.
Guardar e reler capturas
Analisar em direto é útil, mas o verdadeiro fluxo de trabalho profissional é capturar primeiro e analisar depois:
# Gravar os pacotes em bruto (sem descodificar no ecrã)
tcpdump -n -i eth0 -w captura.pcap tcp and not port 22
# Reler a captura, com outro filtro se for preciso
tcpdump -n -r captura.pcap host 203.0.113.66
O -w grava os pacotes completos em formato pcap, que qualquer ferramenta de análise de tráfego consegue abrir; o -r relê o ficheiro, aceitando filtros como se fosse tráfego ao vivo. Para capturas longas, -C roda os ficheiros por tamanho, -G por tempo e -W limita o número de ficheiros — evitando o clássico disco cheio a meio da noite.
tcpdump em cibersegurança
Deteção de scans de portas. Um scan tem uma assinatura inconfundível: pacotes SYN em rajada, do mesmo endereço de origem, para portos sucessivos, cada um respondido com RST quando o porto está fechado. Um tcpdump -n tcp and not port 22 numa máquina exposta revela o padrão em segundos; com 'tcp[tcpflags] == tcp-syn' isola-se apenas a primeira metade do handshake.
DNS suspeito e exfiltração. O DNS é um canal de saída favorito dos atacantes, porque quase nunca é bloqueado. Consultas TXT em volume, subdomínios longos com aspeto hexadecimal ou aleatório e respostas NXDomain em série são sinais de tunneling ou de exfiltração de dados. Um tcpdump -n udp port 53 mostra cada consulta tal como saiu da máquina.
Tráfego em claro. Correr -A sobre tráfego HTTP interno é um exercício de sensibilização instantâneo: pedidos, cookies e formulários legíveis por quem estiver no caminho — o argumento mais convincente para impor TLS também nas redes internas.
Evidência forense. Durante um incidente, uma captura com -w preserva os pacotes em bruto, com carimbos temporais, antes de qualquer contenção alterar o cenário. O ficheiro pcap junta-se ao relatório e permite reanalisar o tráfego as vezes que forem precisas.
Uma nota que não é opcional: capturar tráfego é intercetar comunicações. Só se faz em redes próprias ou com autorização escrita de quem as administra — em formação, em auditoria ou em resposta a incidentes, o enquadramento legal vem sempre antes do comando.
Experimente no simulador interativo
O simulador abaixo recria uma interface eth0 com tráfego realista: uma sessão SSH, pedidos web, DNS, pings — e um scan de portas escondido no meio. À esquerda vê o tráfego a fluir; à direita, o terminal captura apenas o que passa no filtro escolhido. Clique nas opções para as combinar (os filtros BPF compõem-se entre si), use Demonstrar tudo para seguir a investigação guiada passo a passo, ou navegue com Anterior e Seguinte. A tabela de referência no fundo resume todas as opções.
Erros comuns e boas práticas
- Capturar a própria sessão SSH. Em administração remota, cada linha que o tcpdump imprime gera tráfego SSH… que o tcpdump captura e imprime. O ciclo enche o ecrã em segundos. Acrescente sempre
not port 22(ou o porto da sua sessão). - Esquecer o
-n. A resolução de nomes atrasa a captura e gera consultas DNS que contaminam os resultados. -wsem limites. Uma captura sem filtro nem rotação enche o disco. Combine-wcom um filtro BPF e com-C/-Wem capturas prolongadas.- Payload truncado. Se definir um snaplen baixo com
-s, o conteúdo dos pacotes vem cortado e a análise posterior fica comprometida. Na dúvida, deixe o valor por omissão. - Confundir «não capturado» com «não existe». O filtro BPF descarta no kernel: se o filtro estiver mal escrito, o tráfego existe mas nunca chega ao ecrã. Teste o filtro primeiro sem
-w. - Capturar sem autorização. Intercetar comunicações de terceiros sem enquadramento legal é crime. Redes próprias ou autorização escrita — sem exceções.
Conclusão
O tcpdump é a testemunha mais fiável do que se passa numa rede: sem agentes, sem consolas, apenas os pacotes tal como circulam. Dominar meia dúzia de filtros BPF — host, port, protocolo e os operadores and/not — chega para diagnosticar a maioria dos problemas de rede e para reconhecer um scan ou uma exfiltração em curso. Se quer levar estas competências mais longe, com formação prática em segurança de redes e resposta a incidentes, conheça o catálogo de serviços de formação e consultoria da HJFR — e espreite também o artigo sobre o useradd, outro clássico da administração de sistemas.
Este artigo faz parte da série “Comandos Linux, um a um” do blog HJFR — fique atento aos próximos comandos.
