Como usar netstat e ss para diagnosticar conexões de rede ativas
1. Introdução às ferramentas de diagnóstico de rede
O diagnóstico de conexões de rede é uma habilidade essencial para administradores de sistemas, desenvolvedores e profissionais de segurança. Duas ferramentas clássicas — netstat e ss — permitem inspecionar conexões ativas, portas abertas e processos associados.
O netstat (network statistics) existe desde os primórdios do Unix e está disponível na maioria das distribuições Linux. Já o ss (socket statistics) foi introduzido como substituto moderno, parte do pacote iproute2, sendo significativamente mais rápido em sistemas com muitas conexões.
Quando usar cada ferramenta? Em sistemas legados, netstat pode ser a única opção disponível. Em servidores modernos com alto volume de conexões (como proxies ou servidores web), ss é preferível por sua performance superior. Ambos fornecem informações semelhantes, mas com sintaxes e saídas ligeiramente diferentes.
Instalação básica:
- netstat: geralmente parte do pacote net-tools (instalar com apt install net-tools ou yum install net-tools)
- ss: já incluso no iproute2 (presente por padrão na maioria das distribuições)
2. Listando conexões ativas com netstat
O comando fundamental para visualizar conexões ativas é:
netstat -tunap
Interpretação dos parâmetros:
- -t: exibe conexões TCP
- -u: exibe conexões UDP
- -n: mostra endereços e portas em formato numérico (evita resolução DNS)
- -a: exibe todas as conexões (incluindo escuta)
- -p: mostra o PID e nome do processo associado
Exemplo prático — identificando portas abertas:
$ netstat -tunap | grep LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1234/sshd
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 5678/mysqld
tcp6 0 0 :::80 :::* LISTEN 9012/apache2
Filtros por estado de conexão:
# Apenas conexões estabelecidas
netstat -tunap | grep ESTABLISHED
# Apenas portas em escuta (servidores)
netstat -tunap | grep LISTEN
# Contagem de conexões por estado
netstat -tunap | awk '{print $6}' | sort | uniq -c | sort -rn
3. Analisando conexões com ss (substituto moderno)
O ss oferece comandos equivalentes com sintaxe familiar:
ss -tunap
Vantagens do ss:
- Leitura direta de informações do kernel via /proc/net/tcp e /proc/net/udp
- Muito mais rápido em sistemas com milhares de conexões
- Filtros mais flexíveis e expressivos
Filtros avançados:
# Conexões em estado específico
ss -tunap state established
ss -tunap state time-wait
ss -tunap state listen
# Filtrar por porta específica
ss -tunap sport = :80
ss -tunap dport = :443
# Filtrar por endereço de origem/destino
ss -tunap src 192.168.1.100
ss -tunap dst 10.0.0.0/24
# Expressões regulares para seleção complexa
ss -tunap '( sport = :22 or sport = :80 ) and state established'
4. Diagnosticando problemas comuns de rede
Detectando vazamento de sockets (TIME_WAIT e CLOSE_WAIT):
# Verificar quantidade de conexões TIME_WAIT
ss -tan state time-wait | wc -l
# Identificar processos com muitas conexões CLOSE_WAIT
ss -tanp state close-wait
Um número excessivo de conexões em TIME_WAIT pode indicar que o servidor está criando muitas conexões curtas sem reutilização adequada. Já CLOSE_WAIT sugere que o processo não está fechando conexões corretamente.
Identificando portas em conflito:
# Verificar se uma porta específica está ocupada
ss -tunap | grep :8080
# Caso o serviço não inicie por porta ocupada
netstat -tunap | grep 8080
Monitorando conexões suspeitas:
# Listar conexões para IPs externos não usuais
ss -tunap | grep -v "192.168.\|10\.\|172\.\(1[6-9]\|2[0-9]\|3[01]\)\."
# Identificar conexões com portas de origem altas (possível malware)
ss -tunap state established | awk '$4 ~ /:[0-9]{5}$/'
5. Combinando netstat/ss com outras ferramentas
Uso com grep, awk e sort para sumarizar dados:
# Top 10 IPs com mais conexões estabelecidas
ss -tan state established | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn | head -10
# Total de conexões por serviço
netstat -tunap | grep ESTABLISHED | awk '{print $7}' | cut -d/ -f2 | sort | uniq -c | sort -rn
Monitoramento contínuo com watch:
# Atualizar a cada 2 segundos
watch -n 2 'ss -tan state established | wc -l'
# Monitorar conexões para uma porta específica
watch -n 1 'ss -tan sport = :80'
Script simples para alertar sobre conexões anômalas:
#!/bin/bash
THRESHOLD=100
COUNT=$(ss -tan state established | wc -l)
if [ $COUNT -gt $THRESHOLD ]; then
echo "ALERTA: $COUNT conexões estabelecidas (limite: $THRESHOLD)"
echo "Top 10 IPs suspeitos:"
ss -tan state established | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn | head -10
fi
6. Exemplos práticos de diagnóstico em cenários reais
Verificando se um serviço web está escutando na porta correta:
# Verificar Apache na porta 80
ss -tlnp | grep ':80 '
tcp LISTEN 0 128 *:80 *:* users:(("apache2",pid=9012))
# Se não aparecer, verificar se o serviço está rodando
systemctl status apache2
Rastreando conexões de um processo específico (PID):
# Conexões do MySQL (PID 5678)
ss -tunap | grep "pid=5678"
netstat -tunap | grep "5678/"
# Ou usando o nome do processo
ss -tunap | grep "mysqld"
Comparando saídas de netstat e ss para validar resultados:
# netstat
netstat -tan | wc -l
# ss
ss -tan | wc -l
# Os números devem ser próximos. Se houver grande discrepância,
# pode indicar problemas no kernel ou versão desatualizada do netstat.
7. Boas práticas e limitações
Quando usar ss preferencialmente:
- Em servidores com mais de 1000 conexões simultâneas
- Para filtros complexos com expressões regulares
- Em sistemas modernos (kernel 4.x ou superior)
Limitações importantes:
- O netstat está obsoleto em várias distribuições (RHEL 8+, Debian 11+) e pode ser removido
- A saída do ss varia entre versões do iproute2
- Para processos em contêineres, o PID mostrado pode referir-se ao namespace do host
Alternativas modernas para casos específicos:
- lsof -i: útil para listar arquivos abertos de rede por processo
- nethogs: monitora largura de banda por processo
- iftop: monitora tráfego por conexão em tempo real
- tcpdump: captura e analisa pacotes detalhadamente
Referências
- Documentação oficial do netstat (man page) — Referência completa sobre sintaxe, opções e interpretação das colunas do netstat
- Documentação oficial do ss (man page) — Guia detalhado sobre filtros avançados, estados e expressões do ss
- Tutorial de diagnóstico de rede com ss (DigitalOcean) — Exemplos práticos de uso do ss para troubleshooting em servidores
- Comparação entre netstat e ss (Red Hat Blog) — Artigo técnico explicando diferenças de performance e quando migrar para ss
- Guia de diagnóstico de conexões de rede (Linux Journal) — Tutorial avançado com cenários reais de diagnóstico
- Documentação do iproute2 (kernel.org) — Informações sobre o pacote que contém ss, incluindo histórico e desenvolvimento
- Troubleshooting de sockets TIME_WAIT (Cloudflare Blog) — Análise aprofundada sobre gerenciamento de conexões TIME_WAIT em servidores de alta performance