Básico de netstat e ss: Monitorando Portas e Conexões

Básico de netstat e ss: Monitorando Portas e Conexões

O Que Você Vai Aprender

  • A diferença entre netstat e ss e 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-WAIT e outros)

Resumo Rápido

  • Verifique listeners com ss -tlnp (o sucessor do netstat -tlnp)
  • Conexões estabelecidas: ss -tnp; resumo geral: ss -s
  • netstat: command not found não é uma falha -- basta usar ss

Premissas (ambiente alvo)

  • SO: Ubuntu / família RHEL ou qualquer Linux comum
  • iproute2 (o comando ss) está instalado por padrão
  • Exibir a coluna de processo (-p) requer sudo ou 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 porta
  • 0.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ão
  • Peer 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.

Próximas Leituras