Configurar o firewalld num VPS AlmaLinux e Rocky Linux

3 min
Alojamento VPS/VDS

O firewalld é o gestor de firewall predefinido do AlmaLinux 9 e do Rocky Linux 9. No seu VPS Linux Infrawire, permite abrir apenas os serviços necessários, limitar o SSH ao seu próprio IP e redirecionar portas, sem mexer em regras nftables em bruto.

O principal risco é cortar a sua própria sessão SSH. Este guia foi pensado em torno disso: cada alteração arriscada é testada primeiro na configuração runtime e só depois tornada permanente.

📋 Pré-requisitos

  • Um VPS com AlmaLinux 9 ou Rocky Linux 9
  • Acesso SSH root (o IP e a palavra-passe root estão na sua área de cliente)
  • Uma segunda sessão SSH aberta enquanto edita as regras

1. Instalar e iniciar o firewalld

Bash
dnf install -y firewalld systemctl enable --now firewalld firewall-cmd --state

O último comando deve mostrar running. A zona predefinida é public, que já permite SSH, Cockpit e o cliente DHCPv6 e descarta as restantes ligações de entrada.

2. Perceber zonas, serviços e portas

Uma zona é um conjunto de regras aplicado a uma interface. Um serviço é um grupo de portas com nome (ssh é 22/tcp, http é 80/tcp, https é 443/tcp).

Bash
firewall-cmd --get-default-zone firewall-cmd --get-active-zones firewall-cmd --list-all firewall-cmd --get-services | tr ' ' '\n' | head -20

Existem duas configurações. A runtime aplica-se de imediato e desaparece ao recarregar ou reiniciar. A permanente (--permanent) fica guardada em disco, mas só fica ativa após firewall-cmd --reload.

3. Abrir serviços e portas

Bash
# Serviços firewall-cmd --permanent --add-service=http firewall-cmd --permanent --add-service=https # Uma porta personalizada firewall-cmd --permanent --add-port=8080/tcp # Um intervalo de portas firewall-cmd --permanent --add-port=30000-30100/udp # Aplicar a configuração permanente firewall-cmd --reload

Para fechar algo, use a opção --remove-service ou --remove-port correspondente. Remova o serviço cockpit se não usar a consola web: firewall-cmd --permanent --remove-service=cockpit.

4. Permitir SSH apenas a partir do seu IP com uma rich rule

As rich rules exprimem condições como o endereço de origem. Nunca remova a regra SSH genérica antes de provar que a restrita funciona.

Bash
# 1. Adicionar a regra apenas em runtime (substitua pelo SEU IP público) firewall-cmd --add-rich-rule='rule family="ipv4" source address="YOUR_IP/32" service name="ssh" accept' # 2. Abra um terminal NOVO e confirme que o SSH continua a funcionar a partir de YOUR_IP # 3. Tornar permanente e depois remover o serviço SSH aberto a todos firewall-cmd --runtime-to-permanent firewall-cmd --permanent --remove-service=ssh firewall-cmd --reload

Se o seu IP mudar, perde o acesso: mantenha a consola do VPS disponível na área de cliente como via de recuperação. Para um endereço IPv6, escreva family="ipv6" e o endereço IPv6.

5. Redirecionar uma porta

Para enviar o tráfego de entrada da porta 80 para uma aplicação que escuta na 8080 do mesmo servidor:

Bash
firewall-cmd --permanent --add-forward-port=port=80:proto=tcp:toport=8080 firewall-cmd --reload

Para reencaminhar para outra máquina, acrescente toaddr=TARGET_IP à opção forward-port e ative o masquerading com firewall-cmd --permanent --add-masquerade. O kernel também tem de permitir o encaminhamento, o que o firewalld trata no caso do masquerading.

6. Verificar a configuração

Bash
firewall-cmd --list-all firewall-cmd --list-rich-rules firewall-cmd --permanent --list-all ss -tlnp

Compare as listas runtime e permanente: devem coincidir após um reload. A partir de outra máquina, teste uma porta com nc -zv VPS_IP 80. Um serviço à escuta (ss -tlnp) só é acessível se a firewall permitir a sua porta.

🛠️ Resolução de problemas

FirewallD is not running: inicie-o com systemctl enable --now firewalld e consulte journalctl -u firewalld para ver os erros.

Uma regra nova não tem efeito: usou --permanent sem recarregar. Execute firewall-cmd --reload.

INVALID_SERVICE ou INVALID_ZONE: erro de escrita no nome. Liste os nomes válidos com firewall-cmd --get-services e --get-zones.

SSH numa porta personalizada é recusado apesar de a porta estar aberta: o SELinux precisa de conhecer a porta. Execute semanage port -a -t ssh_port_t -p tcp 2222 (instale antes policycoreutils-python-utils), abra a porta no firewalld e reinicie o sshd.

Acesso perdido: use a consola do VPS na área de cliente e execute firewall-cmd --permanent --add-service=ssh e firewall-cmd --reload. Evite firewall-cmd --panic-on, que bloqueia todo o tráfego, incluindo a sua sessão.


🔒 O seu VPS expõe agora apenas o que escolher, e o SSH continua ao seu alcance!

Fique a par das últimas ofertas, descontos e promoções especiais.

Ver promoções

Utilizamos cookies

Utilizamos cookies analíticos para melhorar a sua experiência no nosso site. Nenhum dado é vendido a terceiros. Saiba mais na nossa política de privacidade.