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
Bashdnf 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).
Bashfirewall-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:
Bashfirewall-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
Bashfirewall-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!