Ao trabalhar com redes no Linux, pode ser necessário abrir ou fechar uma porta de rede. O gerenciamento de portas é essencial para a segurança: quanto menos portas abertas houver em um sistema, menos vetores de ataque potenciais existirão. Além disso, se uma porta estiver fechada, um invasor não poderá obter informações sobre o serviço em execução naquela porta específica.
Este guia explica como abrir ou fechar portas e como verificar portas abertas em distribuições Linux como Ubuntu/Debian e CentOS/RHEL, utilizando firewalls como ufw, firewalld e iptables.
Vamos demonstrar esse processo em duas distribuições Linux: Ubuntu 22.04 e CentOS 9, executadas em um VPS Hostman. Todos os comandos fornecidos aqui funcionam em qualquer distribuição baseada em Debian ou RHEL.
As portas são usadas para acessar aplicações e protocolos específicos. Por exemplo, um servidor pode hospedar simultaneamente um servidor web e um banco de dados — as portas direcionam o tráfego para o serviço apropriado. Tecnicamente, uma porta de rede é um número inteiro não negativo entre 0 e 65535.
Portas reservadas (0–1023): usadas por protocolos e serviços de rede conhecidos como SSH (porta 22), FTP (porta 21), HTTP (porta 80) e HTTPS (porta 443).
Portas registradas (1024–49151): podem ser usadas por aplicações específicas para comunicação.
Em sistemas baseados em Debian (Ubuntu, Debian, Linux Mint, etc.), você pode usar o ufw (Uncomplicated Firewall).
ufw vem pré-instalado na maioria das distribuições baseadas em APT. Para verificar se está instalado:
ufw version
Se for exibida uma versão, ufw está instalado. Caso contrário, instale com:
apt update && apt -y install ufw
Por padrão, ufw está inativo, o que significa que todas as portas estão abertas. Você pode verificar seu status com:
ufw status
Para ativá-lo:
ufw enable
Será necessário confirmar com y. Observe que ativar o ufw pode interromper conexões SSH ativas. Por padrão, ufw bloqueia todo o tráfego de entrada e permite todo o tráfego de saída.
Para verificar a política padrão:
cat /etc/default/ufw
Para abrir uma porta:
ufw allow <port_number>
Exemplo — abrir a porta 22 para SSH:
ufw allow 22
Você pode abrir várias portas separando-as por vírgulas e especificando o protocolo (tcp ou udp):
ufw allow 80,443,8081,8443/tcp
ufw allow 80,443,8081,8443/udp
Em vez de números de porta, você pode usar o nome do serviço (definido em /etc/services).
Exemplo — abrir Telnet (porta 23):
ufw allow telnet
Observação: Não é possível especificar vários nomes de serviço ao mesmo tempo; caso contrário, o ufw exibirá um erro:
Para abrir um intervalo de portas:
ufw allow <start_port>:<end_port>/<protocol>
Exemplo:
ufw allow 8000:8080/tcp
Para fechar uma porta:
ufw deny <port_number>
Exemplo — fechar a porta 80:
ufw deny 80
Você também pode usar o nome do serviço. Exemplo — fechar FTP (porta 21):
ufw deny ftp
Para listar todas as portas abertas e fechadas:
ufw status
Ou para uma visão mais detalhada:
ufw status verbose
Distribuições baseadas em RHEL (CentOS 7+, RHEL 7+, Fedora 18+, OpenSUSE 15+) usam firewalld por padrão.
Verifique se o firewalld está instalado:
firewall-offline-cmd -V
Se uma versão for exibida, firewalld está instalado. Caso contrário, instale-o:
dnf install firewalld
Por padrão, firewalld está desativado. Verifique seu status:
firewall-cmd --state
Para ativá-lo:
systemctl start firewalld
Abrir a porta 8080 para TCP:
firewall-cmd --zone=public --add-port=8080/tcp --permanent
--zone=public
: especifica a zona da regra.--add-port=8080/tcp
: especifica a porta e o protocolo.--permanent
: salva a regra permanentemente.Você também pode abrir um serviço usando seu nome, por exemplo HTTP (porta 80):
firewall-cmd --zone=public --add-service=http --permanent
Aplicar as alterações:
firewall-cmd --reload
Para fechar uma porta por número:
firewall-cmd --zone=public --remove-port=8080/tcp --permanent
Ou por nome do serviço:
firewall-cmd --zone=public --remove-service=http --permanent
Sempre recarregue após as alterações:
firewall-cmd --reload
Para listar todas as portas abertas:
firewall-cmd --list-ports
Ao contrário do ufw e do firewalld, o iptables vem pré-instalado em muitas distribuições (Ubuntu, Debian, RHEL, Rocky Linux, AlmaLinux).
Para abrir a porta 8182 para conexões de entrada:
iptables -A INPUT -p tcp --dport 8182 -j ACCEPT
-A INPUT
: adiciona uma regra à cadeia INPUT.-p tcp
: especifica o protocolo.--dport 8182
: especifica a porta a ser aberta.-j ACCEPT
: permite o tráfego através da porta.Para conexões de saída:
iptables -A OUTPUT -p tcp --dport 8182 -j ACCEPT
Para abrir um intervalo de portas:
iptables -A INPUT -p tcp --match multiport --dports 1024:2000 -j ACCEPT
Para fechar uma porta:
iptables -A INPUT -p tcp --dport 8182 -j DROP
Fechar um intervalo de portas:
iptables -A INPUT -p tcp --match multiport --dports 1024:2000 -j DROP
Por padrão, as regras do iptables são válidas apenas até o próximo reinício do servidor. Para salvá-las permanentemente, instale o iptables-persistent:
Para sistemas baseados em APT:
apt update && apt -y install iptables-persistent
Para sistemas baseados em DNF:
dnf -y install iptables-persistent
Salvar as regras atuais:
iptables-save
As regras serão automaticamente recarregadas na próxima reinicialização.
Listar todas as regras e portas abertas:
iptables -L -v -n
Listar apenas regras IPv4:
iptables -S
Listar regras IPv6:
ip6tables -S
Neste guia, mostramos como abrir e fechar portas de rede no Linux e como verificar as portas atualmente abertas usando três ferramentas diferentes: ufw, firewalld e iptables. Um bom gerenciamento de portas reduz o risco de ataques de rede e ajuda a ocultar informações sobre os serviços que utilizam essas portas.