Basico de netstat e ss: Monitorando Portas e Conexoes
O Que Voce Vai Aprender
- A diferenca entre
netstatesse 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-WAITe outros)
Resumo Rapido
- Verifique listeners com
ss -tlnp(o sucessor donetstat -tlnp) - Conexoes estabelecidas:
ss -tnp; resumo geral:ss -s netstat: command not foundnao e uma falha -- basta usarss
Premissas (ambiente alvo)
- SO: Ubuntu / familia RHEL ou qualquer Linux comum
iproute2(o comandoss) esta instalado por padrao- Exibir a coluna de processo (
-p) requersudoou 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 porta0.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 conexaoPeer 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.