15%

Poupe 15% em todos os serviços

Teste as suas habilidades e obtenha Desconto em qualquer plano

Utilizar o código:

Skills
Começar a trabalhar
01.11.2024

Como Configurar um Firewall com Firewalld no Linux (Guia Completo)

Proteger o seu servidor Linux contra acesso não autorizado e tráfego malicioso não é opcional — é uma responsabilidade fundamental para qualquer administrador de sistemas. Quer esteja a executar um projeto pessoal, uma aplicação comercial ou um servidor web de produção, uma firewall adequadamente configurada é a sua primeira e mais crítica linha de defesa. Firewalld é uma das ferramentas de gestão de firewall mais poderosas e flexíveis disponíveis no Linux, oferecendo gestão dinâmica de regras, controlo de tráfego baseado em zonas e suporte a regras avançadas — tudo sem exigir um reinício completo do serviço quando as alterações são aplicadas.

Este guia abrangente orienta-o através de tudo o que precisa de saber: instalar Firewalld, compreender zonas, gerir serviços e portas, escrever regras avançadas e monitorizar a sua firewall em tempo real. Se está a alojar num VPS ou Servidor Dedicado da AlexHost, este guia ajudá-lo-á a proteger o seu ambiente e a manter uma postura de segurança forte e adaptável.

O que é Firewalld e por que deveria usá-lo?

Firewalld é um daemon de gestão de firewall dinâmica disponível na maioria das principais distribuições Linux, incluindo CentOS, RHEL, Fedora, Rocky Linux, AlmaLinux e cada vez mais em Debian e Ubuntu também. Ao contrário da abordagem mais antiga iptables — onde cada alteração de regra exigia limpar e recarregar todo o conjunto de regras — Firewalld aplica alterações dinamicamente em tempo de execução sem interromper as ligações ativas.

Vantagens principais do Firewalld

  • Arquitetura baseada em zonas — atribua diferentes níveis de confiança a diferentes interfaces de rede ou intervalos de IP
  • Atualizações de regras dinâmicas — aplique alterações sem reiniciar a firewall ou descartar ligações existentes
  • Abstração de serviços — gerencie o tráfego pelo nome do serviço (por exemplo, http, ssh) em vez de números de porta brutos
  • Regras avançadas — escreva regras complexas e condicionais direcionadas a IPs, protocolos e ações específicas
  • Integração D-Bus — permite que outras aplicações e serviços interajam com a firewall programaticamente
  • Suporte IPv4 e IPv6 — gerencie ambas as famílias de protocolos a partir de uma única interface

Pré-requisitos

Antes de prosseguir, certifique-se de que tem:

  • Um servidor Linux a executar CentOS 7/8/9, RHEL, Fedora, Rocky Linux, AlmaLinux, Debian ou Ubuntu
  • Acesso root ou sudo ao servidor
  • Uma compreensão básica dos comandos do terminal Linux
  • Uma sessão SSH ativa (mantenha-a aberta durante todo o processo — estará a modificar regras de firewall)

> Aviso crítico: Certifique-se sempre de que SSH (porta 22 por padrão) é explicitamente permitido nas suas regras de firewall antes de ativar Firewalld. Bloquear-se a si próprio num servidor remoto é um erro comum e evitável.

Passo 1: Instalar Firewalld

Firewalld está incluído nos repositórios padrão da maioria das principais distribuições Linux. Use o gestor de pacotes apropriado para o seu sistema.

Em CentOS / RHEL / Rocky Linux / AlmaLinux

sudo yum install firewalld -y

Ou, em versões mais recentes usando DNF:

sudo dnf install firewalld -y

Em Fedora

sudo dnf install firewalld -y

Em Debian / Ubuntu

Embora Firewalld seja mais comumente associado a sistemas baseados em RHEL, é totalmente suportado em distribuições baseadas em Debian:

sudo apt update
sudo apt install firewalld -y

> Nota para utilizadores Ubuntu/Debian: Se ufw está atualmente ativo no seu sistema, desative-o antes de ativar Firewalld para evitar conflitos:

> “`bash

> sudo ufw disable

> “`

Passo 2: Iniciar e ativar Firewalld

Após a instalação, inicie o serviço Firewalld e configure-o para ser iniciado automaticamente no arranque do sistema:

sudo systemctl start firewalld
sudo systemctl enable firewalld

Verifique se o serviço está a funcionar corretamente:

sudo systemctl status firewalld

Deverá ver uma saída semelhante a:

● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled)
   Active: active (running) since ...

Se o estado mostrar active (running), Firewalld está operacional e pronto para configurar.

Passo 3: Compreender as zonas do Firewalld

O modelo baseado em zonas é a pedra angular da arquitetura do Firewalld. Uma zona define um nível de confiança para uma ligação de rede ou interface. Cada zona contém o seu próprio conjunto de regras que determinam que tráfego é permitido ou negado.

Zonas Firewalld incorporadas

ZonaNível de confiançaCaso de uso típico
dropMais baixoTodas as ligações de entrada são descartadas sem resposta
blockMuito baixoAs ligações de entrada são rejeitadas com uma mensagem ICMP
publicBaixoZona padrão para redes públicas não confiáveis
externalBaixoPara interfaces viradas para o exterior com mascaramento NAT
dmzMédioServidores acessíveis do exterior mas isolados internamente
workMédio-AltoRedes de trabalho com confiança moderada
homeAltoRedes domésticas onde outros anfitriões são confiáveis
internalAltoRedes internas, semelhantes a casa
trustedMais altoTodas as ligações são aceites

Verificar a zona padrão atual

sudo firewall-cmd --get-default-zone

Listar todas as zonas disponíveis

sudo firewall-cmd --get-zones

Ver zonas atualmente ativas e suas interfaces

sudo firewall-cmd --get-active-zones

Saída de exemplo:

public
  interfaces: eth0

Passo 4: Alterar a zona padrão

Exemplo 1 — Definir a zona padrão para public (Recomendado para VPS/Servidores Dedicados)

Para a maioria dos servidores virados para a Internet, public é a zona padrão apropriada. Aplica um nível de confiança conservador e apenas permite tráfego explicitamente permitido:

sudo firewall-cmd --set-default-zone=public

Verifique a alteração:

sudo firewall-cmd --get-default-zone

Saída esperada:

public

Exemplo 2 — Definir a zona padrão para home

Se o seu servidor funciona numa rede privada confiável (como um laboratório doméstico ou ambiente de desenvolvimento interno), a zona home permite comunicação mais permissiva entre anfitriões confiáveis:

sudo firewall-cmd --set-default-zone=home

Verifique:

sudo firewall-cmd --get-default-zone

Saída esperada:

home

Exemplo 3 — Definir a zona padrão para work

Para servidores numa rede corporativa ou de trabalho onde confiança moderada é apropriada:

sudo firewall-cmd --set-default-zone=work

Verifique:

sudo firewall-cmd --get-default-zone

Saída esperada:

work

Passo 5: Gerir serviços com Firewalld

Firewalld inclui uma biblioteca de definições de serviço predefinidas que mapeiam nomes de serviço para as suas portas e protocolos correspondentes. Isto torna muito mais fácil gerir regras por intenção em vez de números de porta brutos.

Listar todos os serviços predefinidos

sudo firewall-cmd --get-services

Permitir um serviço numa zona

Para permitir tráfego HTTP (porta 80/TCP) na zona public permanentemente:

sudo firewall-cmd --zone=public --add-service=http --permanent

Para permitir tráfego HTTPS (porta 443/TCP):

sudo firewall-cmd --zone=public --add-service=https --permanent

Para permitir SSH (porta 22/TCP) — certifique-se sempre de que isto é permitido antes de fazer outras alterações:

sudo firewall-cmd --zone=public --add-service=ssh --permanent

Aplicar alterações recarregando Firewalld

A bandeira --permanent escreve a regra na configuração persistente mas não a aplica imediatamente à firewall em execução. Sempre recarregue após fazer alterações permanentes:

sudo firewall-cmd --reload

Verificar serviços numa zona

sudo firewall-cmd --zone=public --list-services

Saída de exemplo:

dhcpv6-client http https ssh

Remover um serviço de uma zona

Para remover HTTPS da zona public:

sudo firewall-cmd --zone=public --remove-service=https --permanent
sudo firewall-cmd --reload

Passo 6: Gerir portas diretamente

Nos casos em que um serviço não tem uma definição Firewalld predefinida, pode abrir ou fechar portas específicas diretamente.

Abrir uma porta específica

Para abrir a porta 8080 sobre TCP na zona public:

sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
sudo firewall-cmd --reload

Para abrir uma porta UDP (por exemplo, porta 53 para DNS):

sudo firewall-cmd --zone=public --add-port=53/udp --permanent
sudo firewall-cmd --reload

Para abrir um intervalo de portas (por exemplo, 6000–6100 TCP):

sudo firewall-cmd --zone=public --add-port=6000-6100/tcp --permanent
sudo firewall-cmd --reload

Fechar uma porta específica

Para fechar a porta 8080:

sudo firewall-cmd --zone=public --remove-port=8080/tcp --permanent
sudo firewall-cmd --reload

Listar todas as portas abertas numa zona

sudo firewall-cmd --zone=public --list-ports

Passo 7: Configuração avançada com regras avançadas

Regras avançadas dão-lhe controlo granular e condicional sobre o tráfego — muito além do que simples regras de serviço ou porta permitem. Suportam filtragem por IP de origem, IP de destino, protocolo, porta e ação (aceitar, rejeitar, descartar, registar).

Sintaxe de regra avançada

rule [family="<ipv4|ipv6>"]
     [source address="<IP/CIDR>"]
     [destination address="<IP/CIDR>"]
     [service name="<service>"] | [port port="<port>" protocol="<tcp|udp>"]
     [log [prefix="<prefix>"] [level="<level>"] [limit value="<rate>"]]
     [accept|reject|drop]

Exemplo 1 — Permitir SSH apenas a partir de um endereço IP específico

Esta é uma das configurações de segurança mais importantes para qualquer servidor remoto. Se gere o seu servidor a partir de um endereço IP fixo, restrinja o acesso SSH apenas a esse IP:

sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="203.0.113.50" service name="ssh" accept' --permanent
sudo firewall-cmd --reload

Exemplo 2 — Bloquear todo o tráfego de um endereço IP específico

Para bloquear completamente um endereço IP que está a gerar tráfego malicioso:

sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="198.51.100.25" drop' --permanent
sudo firewall-cmd --reload

Exemplo 3 — Permitir HTTP a partir de uma sub-rede específica

Para permitir tráfego HTTP apenas a partir de uma sub-rede interna confiável (por exemplo, 192.168.1.0/24):

sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" service name="http" accept' --permanent
sudo firewall-cmd --reload

Exemplo 4 — Limitar a taxa de ligações SSH para prevenir força bruta

Registar e limitar tentativas de ligação SSH para reduzir a exposição a ataques de força bruta:

sudo firewall-cmd --zone=public --add-rich-rule='rule service name="ssh" log prefix="SSH-ATTEMPT" level="notice" limit value="3/m" accept' --permanent
sudo firewall-cmd --reload

Exemplo 5 — Permitir uma porta específica a partir de um IP específico

sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="10.0.0.5" port port="3306" protocol="tcp" accept' --permanent
sudo firewall-cmd --reload

Listar todas as regras avançadas numa zona

sudo firewall-cmd --zone=public --list-rich-rules

Remover uma regra avançada

sudo firewall-cmd --zone=public --remove-rich-rule='rule family="ipv4" source address="198.51.100.25" drop' --permanent
sudo firewall-cmd --reload

Passo 8: Monitorizar e auditar a sua firewall

Rever regularmente a configuração da sua firewall é essencial para manter uma postura de segurança forte. Firewalld fornece vários comandos para inspecionar o estado atual das suas regras.

Ver a configuração completa para a zona padrão

sudo firewall-cmd --list-all

Saída de exemplo:

public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources:
  services: dhcpv6-client http https ssh
  ports: 8080/tcp
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
    rule family="ipv4" source address="203.0.113.50" service name="ssh" accept

Ver configuração para todas as zonas

sudo firewall-cmd --list-all-zones

Ver configuração para uma zona específica

sudo firewall-cmd --zone=dmz --list-all

Verificar se um serviço específico é permitido

sudo firewall-cmd --zone=public --query-service=http

Verificar se uma porta específica está aberta

sudo firewall-cmd --zone=public --query-port=8080/tcp

Passo 9: Regras em tempo de execução vs. permanentes — compreender a diferença

Firewalld funciona com duas camadas de configuração distintas:

CamadaBandeiraPersistênciaCaso de uso
Tempo de execução*(sem bandeira)*Perdida no recarregamento/reinicializaçãoTestar regras temporariamente
Permanente--permanentSobrevive ao recarregamento e reinicializaçãoConfigurações de produção

Fluxo de trabalho de melhor prática

  1. Teste a regra em tempo de execução primeiro (sem --permanent) para verificar se funciona conforme esperado
  2. Adicione a regra permanentemente uma vez confirmada
  3. Recarregue Firewalld para sincronizar as configurações em tempo de execução e permanentes
# Step 1: Test at runtime
sudo firewall-cmd --zone=public --add-service=http

# Step 2: Verify it works as expected, then make it permanent
sudo firewall-cmd --zone=public --add-service=http --permanent

# Step 3: Reload to sync
sudo firewall-cmd --reload

Alternativamente, aplique uma regra permanente e recarregue imediatamente num fluxo de trabalho:

sudo firewall-cmd --zone=public --add-service=http --permanent && sudo firewall-cmd --reload

Passo 10: Atribuir interfaces de rede a zonas

Se o seu servidor tem múltiplas interfaces de rede (comum em Servidores Dedicados com NICs públicas e privadas), pode atribuir cada interface a uma zona diferente com diferentes níveis de confiança.

Atribuir uma interface a uma zona

sudo firewall-cmd --zone=internal --add-interface=eth1 --permanent
sudo firewall-cmd --reload

Alterar a zona de uma interface

sudo firewall-cmd --zone=public --change-interface=eth0 --permanent
sudo firewall-cmd --reload

Remover uma interface de uma zona

sudo firewall-cmd --zone=internal --remove-interface=eth1 --permanent
sudo firewall-cmd --reload

Passo 11: Ativar mascaramento de IP e reencaminhamento de portas

Para servidores que atuam como gateways ou executam NAT (Network Address Translation), Firewalld suporta mascaramento e reencaminhamento de portas nativamente.

Ativar mascaramento (NAT)

sudo firewall-cmd --zone=external --add-masquerade --permanent
sudo firewall-cmd --reload

Reencaminhar uma porta (por exemplo, reencaminhar a porta externa 80 para a porta interna 8080)

sudo firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=8080 --permanent
sudo firewall-cmd --reload

Reencaminhar tráfego para um anfitrião diferente

sudo firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=80:toaddr=192.168.1.10 --permanent
sudo firewall-cmd --reload

Configurações de segurança práticas para servidores AlexHost

Se está a executar um servidor web, servidor de base de dados ou servidor de aplicação na infraestrutura AlexHost, aqui estão configurações Firewalld de base recomendadas:

Configuração de base de servidor web

# Allow SSH (restrict to your IP in production)
sudo firewall-cmd --zone=public --add-service=ssh --permanent

# Allow HTTP and HTTPS
sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --zone=public --add-service=https --permanent

# Reload to apply
sudo firewall-cmd --reload

# Verify
sudo firewall-cmd --list-all

> Dica profissional: Combine a configuração da sua firewall com um Certificado SSL válido para garantir que todo o tráfego web é encriptado de ponta a ponta. AlexHost oferece certificados SSL para todos os ambientes de alojamento.

Configuração de base de servidor de base de dados (MySQL/MariaDB)

# Allow MySQL only from a specific application server IP
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="10.0.0.5" port port="3306" protocol="tcp" accept' --permanent

# Block direct MySQL access from the public internet
sudo firewall-cmd --zone=public --remove-service=mysql --permanent 2>/dev/null

sudo firewall-cmd --reload

Configuração de base de servidor cPanel/WHM

Se está a usar um VPS com cPanel, precisará de abrir as portas exigidas por cPanel e WHM:

# Web traffic
sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --zone=public --add-service=https --permanent

# cPanel/WHM ports
sudo firewall-cmd --zone=public --add-port=2082/tcp --permanent   # cPanel HTTP
sudo firewall-cmd --zone=public --add-port=2083/tcp --permanent   # cPanel HTTPS
sudo firewall-cmd --zone=public --add-port=2086/tcp --permanent   # WHM HTTP
sudo firewall-cmd --zone=public --add-port=2087/tcp --permanent   # WHM HTTPS
sudo firewall-cmd --zone=public --add-port=2095/tcp --permanent   # Webmail HTTP
sudo firewall-cmd --zone=public --add-port=2096/tcp --permanent   # Webmail HTTPS

# Mail ports
sudo firewall-cmd --zone=public --add-service=smtp --permanent
sudo firewall-cmd --zone=public --add-service=imaps --permanent
sudo firewall-cmd --zone=public --add-service=pop3s --permanent

sudo firewall-cmd --reload

Resolução de problemas comuns do Firewalld

Problema 1: Firewalld falha ao iniciar

Verifique se há conflitos com outras ferramentas de firewall:

sudo systemctl status iptables
sudo systemctl stop iptables
sudo systemctl disable iptables
sudo systemctl start firewalld

Problema 2: Regras não persistem após reinicialização

Certifique-se de que usou a bandeira --permanent e recarregou:

sudo firewall-cmd --runtime-to-permanent
sudo firewall-cmd --reload

O comando --runtime-to-permanent guarda todas as regras em tempo de execução atual na configuração permanente.

Problema 3: Bloqueado do SSH

Se acidentalmente bloqueou o acesso SSH, precisará de aceder ao servidor via consola (disponível através do painel de controlo VPS da AlexHost) e executar:

sudo firewall-cmd --zone=public --add-service=ssh --permanent
sudo firewall-cmd --reload

Problema 4: Verificar registos do Firewalld

sudo journalctl -u firewalld -f

Ou verifique o registo do sistema para mensagens relacionadas com firewall:

sudo grep -i firewall /var/log/messages

Folha de referência rápida do Firewalld

TarefaComando
Verificar estadosudo systemctl status firewalld
Iniciar Firewalld###PPT_NOTR
15%

Poupe 15% em todos os serviços

Teste as suas habilidades e obtenha Desconto em qualquer plano

Utilizar o código:

Skills
Começar a trabalhar