Saber quais portas estão abertas e quais conexões estão ativas é essencial para segurança e troubleshooting. Vamos explorar as ferramentas que todo administrador Linux precisa dominar.
ss -tlnp (portas TCP em LISTEN)
O ss (socket statistics) é a ferramenta moderna para inspecionar sockets. Para listar todas as portas TCP em escuta:
sudo ss -tlnp
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=1234,fd=3))
LISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=5678,fd=6))
LISTEN 0 128 127.0.0.1:5432 0.0.0.0:* users:(("postgres",pid=9012,fd=5))
LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=1234,fd=4))
As flags significam:
- -t - apenas TCP
- -l - apenas sockets em LISTEN (escuta)
- -n - numérico (não resolve nomes)
- -p - mostra o processo (requer root)
Dica: Observe o endereço local:
0.0.0.0:80 aceita conexões de qualquer IP, enquanto 127.0.0.1:5432 aceita apenas conexões locais. Isso é importante para segurança.ss -tunap (todas as conexões)
Para ver todas as conexões ativas (TCP e UDP), incluindo as estabelecidas:
sudo ss -tunap
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
udp UNCONN 0 0 127.0.0.53%lo:53 0.0.0.0:* users:(("systemd-resolve",pid=456,fd=12))
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=1234,fd=3))
tcp ESTAB 0 0 192.168.1.100:22 192.168.1.10:54321 users:(("sshd",pid=4567,fd=4))
tcp ESTAB 0 0 192.168.1.100:45678 93.184.216.34:443 users:(("curl",pid=7890,fd=5))
Flags adicionais: -u inclui UDP e -a mostra todos os estados.
Filtrando conexões com ss
# Conexões estabelecidas na porta 22
ss -tnp state established '( dport = :22 or sport = :22 )'
# Quantas conexões por estado
ss -s
Total: 187
TCP: 12 (estab 3, closed 2, orphaned 0, timewait 2)
Transport Total IP IPv6
RAW 1 0 1
UDP 4 3 1
TCP 10 8 2
INET 15 11 4
netstat (legacy)
O netstat faz parte do pacote net-tools. Ainda funciona, mas ss é mais rápido e completo:
sudo netstat -tlnp
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1234/sshd
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 5678/nginx
tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN 9012/postgres
lsof -i
O lsof lista arquivos abertos, incluindo sockets de rede:
# Todas as conexões de rede
sudo lsof -i
# Apenas porta 80
sudo lsof -i :80
# Apenas TCP em LISTEN
sudo lsof -i TCP -s TCP:LISTEN
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 5678 root 6u IPv4 23456 0t0 TCP *:http (LISTEN)
nginx 5679 www 7u IPv4 23457 0t0 TCP *:http (LISTEN)
sshd 1234 root 3u IPv4 12345 0t0 TCP *:ssh (LISTEN)
Entendendo os estados
Os principais estados de uma conexão TCP:
- LISTEN - o serviço está aguardando conexões naquela porta.
- ESTABLISHED - conexão ativa entre dois hosts, dados podem fluir.
- TIME_WAIT - conexão encerrada, aguardando tempo para garantir que pacotes finais cheguem.
- CLOSE_WAIT - o lado remoto fechou, aplicação local ainda não fechou. Muitas conexões neste estado podem indicar bug na aplicação.
- SYN_SENT - tentando conectar (handshake em andamento).
Dica: Um acúmulo de conexões
CLOSE_WAIT é sinal de que a aplicação não está fechando sockets corretamente. Investigue o processo com ss -tnp state close-wait.