Básico de netstat e ss: Monitorando Portas e Conexões
O Que Você Vai Aprender
- A diferença entre
netstatesse quando usar cada um - Como ver instantaneamente qual porta está em escuta e qual processo é o dono
- Como interpretar os estados TCP (
LISTEN/ESTAB/TIME-WAITe outros)
Resumo Rápido
- Verifique listeners com
ss -tlnp(o sucessor donetstat -tlnp) - Conexões estabelecidas:
ss -tnp; resumo geral:ss -s netstat: command not foundnão é uma falha -- basta usarss
Premissas (ambiente alvo)
- SO: Ubuntu / família RHEL ou qualquer Linux comum
iproute2(o comandoss) está instalado por padrão- Exibir a coluna de processo (
-p) requersudoou privilégios de administrador
Qual é a Diferença Entre netstat e ss?
netstat vem com o pacote legado net-tools e agora está obsoleto. ss (socket statistics) é fornecido pelo sucessor iproute2 e recupera as mesmas informações muito mais rápido. Use ss em sistemas modernos.
| Item | netstat (net-tools) |
ss (iproute2) |
|---|---|---|
| Status | Obsoleto, sem manutenção | Atual, recomendado |
| Instalado por padrão | Frequentemente ausente em SO modernos | Padrão |
| Velocidade com muitas conexões | Lento (varre /proc por linha) |
Rápido (API do kernel) |
| Filtragem de estado | Não suportado | Filtro com state |
netstat: command not found não é um erro -- net-tools simplesmente não está instalado. Você pode instalar com sudo apt install net-tools, mas usar ss primeiro é a abordagem correta.
Como Verificar Portas em Escuta?
ss -tlnp lista qual processo está escutando em qual porta. Quando um serviço está ativo mas inacessível, este é o primeiro lugar para verificar se algo está escutando.
$ sudo ss -tlnp
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 4096 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=812,fd=3))
LISTEN 0 511 127.0.0.1:3000 0.0.0.0:* users:(("node",pid=1340,fd=18))
O que observar:
LISTEN... escutando nessa porta0.0.0.0:22... escutando na porta 22 em todas as interfaces (acessível externamente)127.0.0.1:3000... apenas loopback. Não acessível de fora (veja abaixo)Process... nome do processo e PID (exibido com-p+sudo)
Adicione -u para incluir UDP.
$ sudo ss -tulnp
O Que Significa a Opção -tulpn?
Cada letra do ss tem um significado independente. -tulpn combina "mostrar listeners TCP e UDP, sem resolução de nomes, com o processo dono" em uma única combinação comum.
| Opção | Significado |
|---|---|
-t |
Sockets TCP |
-u |
Sockets UDP |
-l |
Apenas estado LISTEN (escutando) |
-n |
Sem resolução de nomes (numérico, rápido) |
-p |
Mostrar processo dono (requer sudo) |
-a |
Todos os estados (LISTEN + estabelecido, etc.) |
A ordem não importa -- ss -tlnp e ss -plnt são idênticos. Sem -n, o DNS reverso torna as coisas lentas, então sempre adicione quando estiver investigando.
Como Visualizar Conexões Estabelecidas?
ss -tnp lista as conexões TCP ESTAB (estabelecidas) atuais. Use para ver "quem está conectado a este servidor" ou "minha aplicação está alcancando a API externa."
$ sudo ss -tnp
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
ESTAB 0 0 192.168.1.20:22 203.0.113.5:51324 users:(("sshd",pid=2210,fd=4))
ESTAB 0 0 192.168.1.20:48210 10.0.0.8:5432 users:(("node",pid=1340,fd=22))
Local Address:Port... o lado local da conexãoPeer Address:Port... o lado remoto (o par)- Linha 1 ... alguém está logado via SSH (22) a partir de
203.0.113.5 - Linha 2 ... a aplicação node está conectada ao PostgreSQL (5432)
Para entender rapidamente a contagem de conexões, ss -s (resumo) é útil.
$ ss -s
Como Filtrar por Porta ou Processo?
ss aceita expressões de filtro diretamente. Em vez de redirecionar para grep, filtrar no lado do kernel com sport (porta de origem) / dport (porta de destino) / state é mais rápido e preciso.
Verificar se uma porta específica está escutando:
$ sudo ss -tlnp 'sport = :80' $ sudo ss -tlnp sport = :443
Extrair apenas um estado específico:
$ ss -tn state established $ ss -tn state time-wait
Inspecionar conexões para um destino específico:
$ ss -tn dst 10.0.0.8
Uma aplicação escutando apenas em 127.0.0.1:3000 é acessível somente de dentro do servidor. Para expor, altere a configuração de bind da aplicação para escutar em 0.0.0.0:3000 (ou um IP específico). Se o ss ainda mostrar 127.0.0.1 em Local Address, nenhuma alteração de firewall permitirá a conexão.
Como Interpretar os Estados de Conexão?
Os estados TCP representam o ciclo de vida da conexão. Os quatro que mais aparecem em incidentes são LISTEN, ESTAB, TIME-WAIT e CLOSE-WAIT. Saber o que significam aponta para a causa.
| Estado | Significado | O que indica |
|---|---|---|
LISTEN |
Escutando | O serviço está ativo |
ESTAB |
Conexão estabelecida | Comunicando normalmente |
TIME-WAIT |
Cooldown pós-fechamento | Normalmente normal mesmo em volume (muitas conexões curtas) |
CLOSE-WAIT |
Par fechou, local não fechou | Crescimento grande sugere vazamento de socket na aplicação |
SYN-SENT |
Requisição enviada, aguardando resposta | Muitos destes sugerem par inacessível / bloqueio de FW |
CLOSE-WAIT crescendo continuamente é sinal de bug na aplicação (sockets não sendo fechados). Verifique contagens e processos com ss -tn state close-wait. Um grande número de TIME-WAIT geralmente é normal -- não se apresse em ajustar net.ipv4.tcp_tw_reuse e similares.
Tabela de Migração netstat para ss
Mesmo que a memória muscular do netstat permaneça, aprender os equivalentes do ss torna a transição fácil. Mantenha a tabela abaixo à mão.
| O que você quer | Antigo (netstat) | Novo (ss) |
|---|---|---|
| Listeners TCP | netstat -tlnp |
ss -tlnp |
| Listeners TCP/UDP | netstat -tulnp |
ss -tulnp |
| Todas as conexões | netstat -an |
ss -an |
| Conexões estabelecidas | netstat -tnp |
ss -tnp |
| Resumo de conexões | netstat -s |
ss -s |
| Tabela de rotas | netstat -rn |
ip route |
# Copie e cole: one-liner de visao geral de estado sudo ss -tulnp && ss -s
Combinar com grep como ss -tlnp | grep ':80 ' também funciona, mas ss -tlnp 'sport = :80' filtra no lado do kernel -- mais rápido e com menos falsos positivos.