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:

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:

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.