Saudações.
Criei esse tutorial para ensinar as diferentes formas de capturar e analisar pacotes.
Capturar quadros (ethernet) e pacotes (IP) é a última fronteira para resolver qualquer problema em rede de computadores.
1 – Capturando com TCPDUMP
O TCPDUMP é a mais antiga das ferramentas para UNIX (Linux, MacOS, FreeBSD) e permite instalar filtros de analise e duplicação de pacotes em uma interface de rede.
1.1 – Instalando
Instalando:
# Instalar tcpdump
apt -y install tcpdump;
1.2 – Princípios do TCPDUMP
O filtro é opcional e a captura deve ser realizada sempre em uma interface de rede. No Linux é possível capturar de várias interfaces ao mesmo tempo (any).
Use CONTROL+C para interromper a captura.
Por padrão a captura coleta apenas os cabeçalhos, o limite é de 64 bytes para IPv4 e 96 bytes para IPv6. Você pode capturar um tamanho maior ou o pacote inteiro com o argumento -s (–snapshot-length).
A captura por padrão coloca a interface em modo promíscuo (aceita quadros e pacotes que não são destinados à interface mas que de alguma forma bateram na porta). Isso é desejável quando fazemos port-mirror no switch ou colocamos o Linux em bridge entre os nós de analise. Use “-p” para evitar o modo promíscuo.
1.3 – Captura básica
Exemplos de capturas sem filtro (pega tudo):
# Capturando pacotes na eth0:
tcpdump -i eth0;
# Capturando pacotes em todas as interfaces (somente Linux)
tcpdump -i any;
# Capturar a interface loopback (comunicacao entre softwares do mesmo servidor)
tcpdump -i lo;
# Não resolver DNS dos IPs (recomendado):
tcpdump -n -i eth0;
# Exibir dados do cabecalho ethernet (MAC):
tcpdump -ne -i eth0;
# Capturar apenas 100 pacotes e encerrar:
tcpdump -ne -c 100 -i eth0;
# Capturar apenas os primeiros 256 bytes de cada pacote
tcpdump -ne -s 256 -i eth0;
# Capturar pacotes inteiros (analise forense completa)
tcpdump -ne -s 0 -i eth0;
# Capturar dados com detalhes
tcpdump -nev -s 0 -i eth0;
# Capturar dados com detalhes e leitura humanizada
tcpdump -neva -s 0 -i eth0;
# Capturar com detalhes completos, humanizados e versao hexadecimal
tcpdump -nevas0 -x -i eth0;
# Sem modo promiscuo
tcpdump -nevas0 -p -i eth0;
1.4 – Captura com filtro
Usando filtros para capturar apenas protocolos ou propriedades dos quadros/pacotes:
# Capturar apenas TCP
tcpdump -pnevas0 -i eth0 "tcp";
# Capturar apenas UDP
tcpdump -pnevas0 -i eth0 "udp";
# Capturar apenas ICMP
tcpdump -pnevas0 -i eth0 "icmp";
# Filtro combinado, capturar udp e icmp
tcpdump -pnevas0 -i eth0 "udp or icmp";
# Capturar apenas pacotes TCP SYNC
tcpdump -pnevas0 -i eth0 'tcp[13] & 2 != 0 && tcp[13] & 16 = 0';
# Capturar data/hora microsegundo e dados de sessao BGP de alguns peerings:
tcpdump --time-stamp-precision=nano \
-pnevas0 -i eth0 \
'(host 10.10.20.5 or host 10.100.2.113) and tcp port 179';
1.5 – Salvando em arquivo
O TCPDUMP pode salvar sua captura em arquivos para que mais tarde você faça a analise. Isso é especialmente útil quando o problema é intermitente e você precisa ao final do dia comparar o horário do problema com os pacotes capturados naquele horário.
É extremamente recomendado limitar o tempo “timeout 3600 tcpdump …” ou limitar o número de pacotes “tcpdump -c 999123” para impedir o enchimento do disco.
# Salvar captura em arquivo, exemplo:
# opcional antes do comando: timeout 3600
tcpdump \
-pnevas0 \
-i eth0.95 \
-c 999123 \
'host 45.255.128.9 and udp' \
-w /tmp/radius-captura-001.pcap;
# Analisar arquivo gravado
tcpdump -ttttnnva -r /tmp/radius-captura-001.pcap;
.
.
.
.
(artigo em edição constante, volte mais tarde para ver novos capítulos)
Terminamos por hoje!
Patrick Brandão, patrickbrandao@gmail.com
“O preço da liberdade é
a vigilância eterna.“
Thomas Jefferson
