Basico de netstat e ss: Monitorando Portas e Conexoes

Basico de netstat e ss: Monitorando Portas e Conexoes

O Que Voce Vai Aprender

  • A diferenca entre netstat e ss e quando usar cada um
  • Como ver instantaneamente qual porta esta em escuta e qual processo e o dono
  • Como interpretar os estados TCP (LISTEN / ESTAB / TIME-WAIT e outros)

Resumo Rapido

  • Verifique listeners com ss -tlnp (o sucessor do netstat -tlnp)
  • Conexoes estabelecidas: ss -tnp; resumo geral: ss -s
  • netstat: command not found nao e uma falha -- basta usar ss

Premissas (ambiente alvo)

  • SO: Ubuntu / familia RHEL ou qualquer Linux comum
  • iproute2 (o comando ss) esta instalado por padrao
  • Exibir a coluna de processo (-p) requer sudo ou privilegios de administrador

Qual e a Diferenca Entre netstat e ss?

netstat vem com o pacote legado net-tools e agora esta obsoleto. ss (socket statistics) e fornecido pelo sucessor iproute2 e recupera as mesmas informacoes muito mais rapido. Use ss em sistemas modernos.

Item netstat (net-tools) ss (iproute2)
Status Obsoleto, sem manutencao Atual, recomendado
Instalado por padrao Frequentemente ausente em SO modernos Padrao
Velocidade com muitas conexoes Lento (varre /proc por linha) Rapido (API do kernel)
Filtragem de estado Nao suportado Filtro com state

netstat: command not found nao e um erro -- net-tools simplesmente nao esta instalado. Voce pode instalar com sudo apt install net-tools, mas usar ss primeiro e a abordagem correta.

Como Verificar Portas em Escuta?

ss -tlnp lista qual processo esta escutando em qual porta. Quando um servico esta ativo mas inacessivel, este e o primeiro lugar para verificar se algo esta 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 (acessivel externamente)
  • 127.0.0.1:3000 ... apenas loopback. Nao acessivel 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 Opcao -tulpn?

Cada letra do ss tem um significado independente. -tulpn combina "mostrar listeners TCP e UDP, sem resolucao de nomes, com o processo dono" em uma unica combinacao comum.

Opcao Significado
-t Sockets TCP
-u Sockets UDP
-l Apenas estado LISTEN (escutando)
-n Sem resolucao de nomes (numerico, rapido)
-p Mostrar processo dono (requer sudo)
-a Todos os estados (LISTEN + estabelecido, etc.)

A ordem nao importa -- ss -tlnp e ss -plnt sao identicos. Sem -n, o DNS reverso torna as coisas lentas, entao sempre adicione quando estiver investigando.

Como Visualizar Conexoes Estabelecidas?

ss -tnp lista as conexoes TCP ESTAB (estabelecidas) atuais. Use para ver "quem esta conectado a este servidor" ou "minha aplicacao esta 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 conexao
  • Peer Address:Port ... o lado remoto (o par)
  • Linha 1 ... alguem esta logado via SSH (22) a partir de 203.0.113.5
  • Linha 2 ... a aplicacao node esta conectada ao PostgreSQL (5432)

Para entender rapidamente a contagem de conexoes, ss -s (resumo) e util.

$ ss -s

Como Filtrar por Porta ou Processo?

ss aceita expressoes de filtro diretamente. Em vez de redirecionar para grep, filtrar no lado do kernel com sport (porta de origem) / dport (porta de destino) / state e mais rapido e preciso.

Verificar se uma porta especifica esta escutando:

$ sudo ss -tlnp 'sport = :80'
$ sudo ss -tlnp sport = :443

Extrair apenas um estado especifico:

$ ss -tn state established
$ ss -tn state time-wait

Inspecionar conexoes para um destino especifico:

$ ss -tn dst 10.0.0.8

Uma aplicacao escutando apenas em 127.0.0.1:3000 e acessivel somente de dentro do servidor. Para expor, altere a configuracao de bind da aplicacao para escutar em 0.0.0.0:3000 (ou um IP especifico). Se o ss ainda mostrar 127.0.0.1 em Local Address, nenhuma alteracao de firewall permitira a conexao.

Como Interpretar os Estados de Conexao?

Os estados TCP representam o ciclo de vida da conexao. Os quatro que mais aparecem em incidentes sao LISTEN, ESTAB, TIME-WAIT e CLOSE-WAIT. Saber o que significam aponta para a causa.

Estado Significado O que indica
LISTEN Escutando O servico esta ativo
ESTAB Conexao estabelecida Comunicando normalmente
TIME-WAIT Cooldown pos-fechamento Normalmente normal mesmo em volume (muitas conexoes curtas)
CLOSE-WAIT Par fechou, local nao fechou Crescimento grande sugere vazamento de socket na aplicacao
SYN-SENT Requisicao enviada, aguardando resposta Muitos destes sugerem par inacessivel / bloqueio de FW

CLOSE-WAIT crescendo continuamente e sinal de bug na aplicacao (sockets nao sendo fechados). Verifique contagens e processos com ss -tn state close-wait. Um grande numero de TIME-WAIT geralmente e normal -- nao se apresse em ajustar net.ipv4.tcp_tw_reuse e similares.

Tabela de Migracao netstat para ss

Mesmo que a memoria muscular do netstat permaneca, aprender os equivalentes do ss torna a transicao facil. Mantenha a tabela abaixo a mao.

O que voce quer Antigo (netstat) Novo (ss)
Listeners TCP netstat -tlnp ss -tlnp
Listeners TCP/UDP netstat -tulnp ss -tulnp
Todas as conexoes netstat -an ss -an
Conexoes estabelecidas netstat -tnp ss -tnp
Resumo de conexoes 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 ' tambem funciona, mas ss -tlnp 'sport = :80' filtra no lado do kernel -- mais rapido e com menos falsos positivos.

Proximas Leituras