Verificando Portas Abertas e em Escuta no Linux Usando netstat e ss
Monitorizar portas abertas e em escuta num sistema Linux é uma das práticas mais críticas para manter a segurança do servidor, diagnosticar problemas de rede e gerir a sua infraestrutura de forma eficaz. Ao auditar regularmente quais as portas abertas e quais os serviços ligados a elas, pode identificar proativamente tentativas de acesso não autorizado, detetar configurações incorretas e eliminar superfícies de ataque desnecessárias antes de se tornarem vulnerabilidades graves.
Quer esteja a executar uma aplicação de alto tráfego num plano de VPS Hosting ou a gerir uma frota de máquinas bare-metal, compreender a exposição de rede do seu servidor Linux é inegociável. Este guia fornece uma explicação técnica e abrangente de como utilizar tanto netstat como ss — as duas ferramentas de linha de comandos mais amplamente utilizadas para inspeção de portas em Linux — juntamente com ferramentas complementares e melhores práticas do mundo real.
Índice
- Compreender Portas e os Seus Tipos
- Verificar Portas com netstat
- Verificar Portas com ss
- Comparar netstat vs. ss
- Outras Ferramentas para Verificar Portas Abertas
- Melhores Práticas de Segurança para Gestão de Portas Abertas
- Conclusão
1. Compreender Portas e os Seus Tipos {#understanding-ports}
Antes de mergulhar nas próprias ferramentas, é importante estabelecer uma compreensão clara do que são portas, como são categorizadas e por que é importante monitorá-las.
O que é uma Porta de Rede?
Uma porta de rede é um ponto final de comunicação lógico associado a um processo ou serviço específico num anfitrião. As portas permitem que um único servidor com um endereço IP execute múltiplos serviços em rede simultaneamente — por exemplo, um servidor web na porta 80, um daemon SSH na porta 22 e uma base de dados na porta 3306.
Categorias de Portas
| Intervalo | Categoria | Descrição |
|---|---|---|
| 0–1023 | Portas Bem Conhecidas | Reservadas para serviços de sistema padrão (HTTP, SSH, FTP, etc.) |
| 1024–49151 | Portas Registadas | Utilizadas por aplicações e middleware (MySQL, PostgreSQL, etc.) |
| 49152–65535 | Portas Dinâmicas/Efémeras | Atribuídas temporariamente para ligações de cliente de saída |
Estados de Porta que Encontrará
- LISTEN — A porta está aberta e um serviço está ativamente à espera de ligações de entrada.
- ESTABLISHED — Existe uma ligação ativa entre dois pontos finais.
- TIME_WAIT — A ligação está a fechar; o sistema está à espera de garantir que a extremidade remota recebeu o reconhecimento final.
- CLOSE_WAIT — A extremidade remota fechou a ligação; a aplicação local ainda não fechou o seu lado.
Protocolos de Transporte
- TCP (Transmission Control Protocol): Orientado à ligação, fiável, com verificação de erros e entrega garantida. Utilizado por HTTP, HTTPS, SSH, FTP e a maioria dos protocolos de camada de aplicação.
- UDP (User Datagram Protocol): Sem ligação, mais rápido, mas sem garantias de entrega. Utilizado por DNS, NTP, DHCP e serviços de transmissão.
2. Verificar Portas com netstat {#netstat}
O que é netstat?
netstat (estatísticas de rede) é um utilitário de linha de comandos clássico que apresenta ligações de rede ativas, tabelas de encaminhamento, estatísticas de interface e portas em escuta. Embora tenha sido oficialmente descontinuado a favor de ss em distribuições Linux modernas, netstat permanece amplamente implementado — especialmente em sistemas legados e em ambientes onde os administradores estão profundamente familiarizados com a sua sintaxe.
Instalar netstat
netstat faz parte do pacote net-tools, que já não é instalado por padrão em muitas distribuições modernas. Instale-o da seguinte forma:
Debian / Ubuntu:
sudo apt update && sudo apt install net-tools -yCentOS / RHEL / AlmaLinux / Rocky Linux:
sudo yum install net-tools -y
# or on newer versions:
sudo dnf install net-tools -yArch Linux:
sudo pacman -S net-toolsSintaxe Básica de netstat
sudo netstat [options]Verificar Todas as Portas TCP e UDP em Escuta
sudo netstat -tulnAnálise de bandeiras:
| Bandeira | Significado |
|---|---|
-t | Apresentar ligações e portas TCP |
-u | Apresentar ligações e portas UDP |
-l | Mostrar apenas sockets em escuta (portas à espera de ligações) |
-n | Apresentar endereços IP e números de porta numéricos (ignorar resolução DNS para velocidade) |
Exemplo de resultado:
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN
tcp6 0 0 :::443 :::* LISTEN
udp 0 0 0.0.0.0:68 0.0.0.0:*Ler o resultado:
- Proto — O protocolo em uso (tcp, udp, tcp6, udp6).
- Local Address — O endereço IP e número de porta em que o serviço está em escuta.
0.0.0.0significa que o serviço está em escuta em todas as interfaces disponíveis;127.0.0.1significa que é apenas acessível localmente. - Foreign Address — O endereço do cliente remoto (mostrado como
0.0.0.0:*para portas em escuta sem ligação ativa). - State — O estado da ligação (
LISTEN,ESTABLISHED,TIME_WAIT, etc.).
Incluir Informações de Processo
Para ver qual processo é proprietário de cada porta em escuta, adicione a bandeira -p:
sudo netstat -tulnpExemplo de resultado com informações de processo:
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 1023/sshd
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 2847/nginx
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 3102/mysqld> Nota: Deve executar este comando com sudo para ver nomes de processo para todos os utilizadores, não apenas o seu.
Filtrar Resultado para Portas ou Serviços Específicos
Utilize grep para estreitar os resultados para uma porta ou serviço específico:
# Check if anything is listening on port 80
sudo netstat -tuln | grep ":80"
# Check for SSH (port 22)
sudo netstat -tuln | grep ":22"
# Check for MySQL (port 3306)
sudo netstat -tuln | grep ":3306"
# Check for HTTPS (port 443)
sudo netstat -tuln | grep ":443"Ver Todas as Ligações Ativas (Não Apenas em Escuta)
Para ver todas as ligações ativas, incluindo as estabelecidas, remova a bandeira -l:
sudo netstat -tunpApresentar Tabela de Encaminhamento
sudo netstat -rApresentar Estatísticas de Interface de Rede
sudo netstat -i3. Verificar Portas com ss {#ss}
O que é ss?
ss (estatísticas de socket) é o substituto moderno de netstat, desenvolvido como parte do pacote iproute2. Comunica diretamente com o kernel Linux através de sockets Netlink, tornando-o significativamente mais rápido e eficiente do que netstat — particularmente em sistemas com milhares de ligações simultâneas.
ss é instalado por padrão em praticamente todas as distribuições Linux modernas, incluindo Ubuntu 18.04+, CentOS 7+, Debian 9+ e seus derivados.
Sintaxe Básica de ss
ss [options] [filter]Verificar Todas as Portas TCP e UDP em Escuta
ss -tulnAs bandeiras têm o mesmo significado que em netstat:
| Bandeira | Significado |
|---|---|
-t | Mostrar sockets TCP |
-u | Mostrar sockets UDP |
-l | Mostrar apenas sockets em escuta |
-n | Mostrar endereços numéricos (sem resolução DNS) |
Exemplo de resultado:
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
tcp LISTEN 0 511 0.0.0.0:80 0.0.0.0:*
tcp LISTEN 0 128 127.0.0.1:3306 0.0.0.0:*
tcp LISTEN 0 511 [::]:443 [::]:*
udp UNCONN 0 0 0.0.0.0:68 0.0.0.0:*Incluir Informações de Processo
sudo ss -tulnpExemplo de resultado:
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=1023,fd=3))
tcp LISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=2847,fd=6))
tcp LISTEN 0 128 127.0.0.1:3306 0.0.0.0:* users:(("mysqld",pid=3102,fd=21))Filtrar por Protocolo
Mostrar apenas portas TCP em escuta:
ss -tlMostrar apenas portas UDP em escuta:
ss -ulMostrar todas as ligações TCP (incluindo estabelecidas):
ss -tFiltragem Avançada com ss
Uma das características mais poderosas de ss é a sua filtragem baseada em expressões incorporada, que permite filtrar por porta, endereço, estado e muito mais — sem depender de grep.
Filtrar por número de porta específico:
ss -tuln sport = :80
ss -tuln sport = :443
ss -tuln sport = :22Filtrar por porta de destino:
ss -tuln dport = :3306Mostrar todos os sockets em estado ESTABLISHED:
ss -t state establishedMostrar todos os sockets em estado LISTEN:
ss -t state listeningFiltrar por endereço IP de origem:
ss -tuln src 192.168.1.100Mostrar ligações para um anfitrião remoto específico:
ss -t dst 203.0.113.50Combinar múltiplos filtros:
ss -t state established '( dport = :443 or sport = :443 )'Apresentar Utilização de Memória de Socket
ss também pode mostrar utilização detalhada de memória por socket, o que é útil para diagnosticar problemas de desempenho:
ss -tmApresentar Informações de Temporizador
ss -toIsto mostra temporizadores de retransmissão e temporizadores de keepalive para ligações TCP, o que é inestimável para diagnosticar problemas de estabilidade de ligação.
4. Comparar netstat vs. ss {#comparison}
Ambas as ferramentas realizam o mesmo objetivo fundamental, mas há diferenças significativas que devem guiar a sua escolha:
| Funcionalidade | netstat | ss |
|---|---|---|
| Pacote | net-tools (frequentemente não pré-instalado) | iproute2 (pré-instalado em distribuições modernas) |
| Velocidade | Mais lento (lê de /proc/net/) | Mais rápido (utiliza interface kernel Netlink) |
| Desempenho em escala | Degrada com milhares de ligações | Lida com grandes contagens de ligações eficientemente |
| Filtragem avançada | Requer canalização para grep | Filtragem baseada em expressões incorporada |
| Detalhe de resultado | Bom | Mais detalhado (memória, temporizadores, etc.) |
| Suporte IPv6 | Adequado | Excelente |
| Estado de manutenção | Descontinuado | Ativamente mantido |
| Curva de aprendizagem | Familiar para administradores antigos | Sintaxe ligeiramente diferente mas bem documentada |
Quando Utilizar netstat
- Ao administrar sistemas Linux mais antigos (CentOS 6, Debian 7, etc.) onde
sspode não estar disponível. - Ao trabalhar com scripts ou documentação que já utilizam sintaxe
netstat. - Quando está mais confortável com o seu formato de resultado e não precisa de filtragem avançada.
Quando Utilizar ss
- Em qualquer distribuição Linux moderna (Ubuntu 18.04+, CentOS 7+, Debian 9+ e mais recentes).
- Ao gerir servidores com um alto volume de ligações simultâneas — como aqueles em execução em Servidores Dedicados sob carga pesada.
- Quando precisa de filtragem avançada, informações de temporizador ou estatísticas de memória de socket.
- Para automação e scripting onde o desempenho é importante.
5. Outras Ferramentas para Verificar Portas Abertas {#other-tools}
Para além de netstat e ss, vários outros utilitários são úteis para inspeção de portas e análise de rede em Linux.
lsof — Listar Ficheiros Abertos (Incluindo Sockets)
lsof (List Open Files) trata sockets de rede como ficheiros (consistente com a filosofia “tudo é um ficheiro” do Linux) e pode apresentar qual processo tem uma porta específica aberta.
Instalar lsof:
# Debian/Ubuntu
sudo apt install lsof -y
# CentOS/RHEL
sudo yum install lsof -yVerificar qual processo está a utilizar a porta 80:
sudo lsof -i :80Verificar qual processo está a utilizar a porta 443:
sudo lsof -i :443Listar todas as ligações de rede:
sudo lsof -iListar todos os sockets TCP em escuta:
sudo lsof -i TCP -s TCP:LISTENExemplo de resultado:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 2847 root 6u IPv4 23456 0t0 TCP *:http (LISTEN)
nginx 2848 www-data 6u IPv4 23456 0t0 TCP *:http (LISTEN)nmap — Network Mapper
nmap é uma ferramenta poderosa de varrimento de rede utilizada para auditoria de segurança, descoberta de rede e varrimento de portas. Ao contrário de ss e netstat (que inspecionam o sistema local), nmap pode varrer anfitriões locais e remotos.
Instalar nmap:
# Debian/Ubuntu
sudo apt install nmap -y
# CentOS/RHEL
sudo yum install nmap -yVarrer todas as portas TCP no localhost:
sudo nmap -sT localhostVarrer portas abertas com deteção de SO:
sudo nmap -sT -O localhostVarrer um intervalo de portas específico:
sudo nmap -p 1-1024 localhostVarrer portas UDP (requer root):
sudo nmap -sU localhostVarrer um servidor remoto:
sudo nmap -sT 203.0.113.50> Importante: Apenas varre sistemas que possui ou para os quais tem permissão explícita para varrer. O varrimento de portas não autorizado pode violar leis e termos de serviço.
fuser — Identificar Processos Utilizando Ficheiros ou Sockets
# Find which process is using port 80 (TCP)
sudo fuser 80/tcp
# Find which process is using port 53 (UDP)
sudo fuser 53/udp/proc/net/ — Interface Direta do Kernel
Para fins de scripting, pode ler informações de porta diretamente do sistema de ficheiros virtual do kernel Linux:
# View raw TCP socket table
cat /proc/net/tcp
# View raw UDP socket table
cat /proc/net/udpNote que endereços e portas em /proc/net/tcp são apresentados em hexadecimal e requerem conversão para legibilidade humana. Ferramentas como ss e netstat analisam estes dados automaticamente.
6. Melhores Práticas de Segurança para Gestão de Portas Abertas {#security}
Saber como verificar portas abertas é apenas metade da batalha. Agir sobre essa informação é o que mantém o seu servidor seguro. Aqui estão as melhores práticas acionáveis que todo administrador Linux deve seguir:
Princípio da Menor Exposição
Exponha apenas portas que são absolutamente necessárias para a sua aplicação funcionar. Cada porta aberta é um vetor de ataque potencial. Audite regularmente as suas portas em escuta e feche ou coloque firewall em qualquer coisa que não precise de ser acessível publicamente.
Vincular Serviços a Interfaces Específicas
Evite vincular serviços a 0.0.0.0 (todas as interfaces) a menos que seja necessário. Por exemplo, um servidor de base de dados MySQL deve apenas estar em escuta em 127.0.0.1 se for apenas acedido localmente:
# In /etc/mysql/mysql.conf.d/mysqld.cnf
bind-address = 127.0.0.1Utilizar uma Firewall
Utilize ufw (Ubuntu) ou firewalld / iptables (CentOS/RHEL) para restringir o acesso a portas abertas por endereço IP, sub-rede ou interface de rede:
# Allow SSH only from a specific IP (ufw)
sudo ufw allow from 203.0.113.10 to any port 22
# Deny all other access to port 22
sudo ufw deny 22Auditar Regularmente Portas em Escuta
Agende auditorias regulares de portas utilizando tarefas cron ou ferramentas de monitorização. Uma nova porta em escuta repentina pode indicar um serviço comprometido, uma configuração incorreta ou — no pior dos casos — malware:
# Quick audit command — save output and compare over time
sudo ss -tulnp > /var/log/port_audit_$(date +%F).txtProteger Serviços com SSL/TLS
Qualquer serviço exposto à internet — servidores web, servidores de correio, painéis de controlo — deve utilizar ligações encriptadas. Emparelhe as suas portas abertas com Certificados SSL válidos para proteger dados em trânsito e prevenir ataques man-in-the-middle.
Monitorizar Alterações Inesperadas
Utilize ferramentas de deteção de intrusão como AIDE, Tripwire ou auditd para o alertar quando novos processos começam a estar em escuta em portas. Integre com registo centralizado (por exemplo, ELK Stack, Graylog) para visibilidade abrangente.
Desativar Serviços Não Utilizados
Se um serviço não for necessário, pare-o e desative-o de iniciar no arranque:
# Stop and disable a service (systemd)
sudo systemctl stop <service-name>
sudo systemctl disable <service-name>Referência Rápida: Comandos Mais Úteis
| Tarefa | Comando netstat | Comando ss |
|---|---|---|
| Todas as portas TCP/UDP em escuta | sudo netstat -tuln | sudo ss -tuln |
| Todas as portas em escuta com PIDs | sudo netstat -tulnp | ###PPT_ |
