Poupe 15% em todos os serviços de alojamento

Teste as suas habilidades e obtenha Desconto em qualquer plano

Utilizar o código: Skills Começar a trabalhar
Secções
Linux Segurança

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 necessidade de reiniciar o serviço completo 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 manter uma postura de segurança forte e adaptável.

O Que É Firewalld e Por Que Deve Usá-lo?

Firewalld é um daemon de gerenciamento de firewall dinâmico 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 mudança de regra exigia a limpeza e recarga de todo o conjunto de regras — Firewalld aplica alterações dinamicamente em tempo de execução sem interromper conexões ativas.

Principais Vantagens 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 o firewall ou descartar conexões existentes
  • Abstração de serviço — 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íficos
  • Integração D-Bus — permite que outros aplicativos e serviços interajam com o 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 — irá modificar as regras da 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 mesmo num servidor remoto é um erro comum e evitável.

Passo 1: Instalando Firewalld

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

No CentOS / RHEL / Rocky Linux / AlmaLinux

sudo yum install firewalld -y

Ou, em versões mais recentes usando DNF:

sudo dnf install firewalld -y

No Fedora

sudo dnf install firewalld -y

No 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 usuários Ubuntu/Debian: Se ufw está ativo no seu sistema, desative-o antes de ativar Firewalld para evitar conflitos:

> “`bash

> sudo ufw disable

> “`

Passo 2: Iniciar e Ativar o Firewalld

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

sudo systemctl start firewalld
sudo systemctl enable firewalld

Verifique se o serviço está funcionando corretamente:

sudo systemctl status firewalld

Deverá ver um resultado 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), o Firewalld está operacional e pronto para ser configurado.

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 conexão de rede ou interface. Cada zona contém seu próprio conjunto de regras que determinam qual tráfego é permitido ou negado.

Zonas Firewalld Integradas

ZonaNível de ConfiançaCaso de Uso Típico
dropMais BaixoTodas as conexões de entrada são descartadas sem resposta
blockMuito BaixoConexões de entrada são rejeitadas com uma mensagem ICMP
publicBaixoZona padrão para redes públicas não confiáveis
externalBaixoPara interfaces voltadas para o exterior com mascaramento NAT
dmzMédioServidores acessíveis de fora mas isolados internamente
workMédio-AltoRedes de trabalho com confiança moderada
homeAltoRedes domésticas onde outros hosts são confiáveis
internalAltoRedes internas, semelhante a doméstico
trustedMais AltoTodas as conexões são aceitas

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 Ativas Atualmente e Suas Interfaces

sudo firewall-cmd --get-active-zones

Exemplo de saída:

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 voltados para a internet, public é a zona padrão apropriada. Aplica um nível de confiança conservador e permite apenas o tráfego explicitamente permitido:

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

Verifique a alteração:

sudo firewall-cmd --get-default-zone

Resultado esperado:

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

Resultado esperado:

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

Resultado esperado:

work

Passo 5: Gerenciar Serviços com Firewalld

Firewalld inclui uma biblioteca de definições de serviço predefinidas que mapeiam nomes de serviço para suas portas e protocolos correspondentes. Isso torna muito mais fácil gerenciar 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) — sempre certifique-se 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 flag --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

Exemplo de saída:

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: Gerenciar Portas Diretamente

Nos casos em que um serviço não possui uma definição predefinida do Firewalld, você 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

Step 7: Advanced Configuration with Rich Rules

Rich rules permitem-lhe controlo granular e condicional sobre o tráfego — muito além do que as regras simples 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 Rich Rule

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 exclusivamente 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 fidedigna (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 Ataques de 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 Rich Rules numa Zona

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

Remover uma Rich Rule

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: Monitorização e Auditoria da 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

Exemplo de saída:

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 de Runtime vs. Permanentes — Compreender a Diferença

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

CamadaFlagPersistênciaCaso de Uso
Runtime*(sem flag)*Perdida ao recarregar/reiniciarTestar regras temporariamente
Permanente--permanentSobrevive ao recarregar e reiniciarConfigurações de produção

Fluxo de Trabalho de Melhor Prática

  1. Teste a regra em runtime primeiro (sem --permanent) para verificar se funciona conforme esperado
  2. Adicione a regra permanentemente após confirmação
  3. Recarregue Firewalld para sincronizar as configurações de runtime 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 único 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 tiver 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: Ativando IP Masquerading e Port Forwarding

Para servidores atuando como gateways ou executando NAT (Network Address Translation), Firewalld suporta masquerading e port forwarding nativamente.

Ativar Masquerading (NAT)

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

Encaminhar uma Porta (por exemplo, Encaminhar Porta Externa 80 para Porta Interna 8080)

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

Encaminhar Tráfego para um Host 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ática para Servidores AlexHost

Se você está executando um servidor web, servidor de banco de dados ou servidor de aplicação na infraestrutura AlexHost, aqui estão as configurações Firewalld de linha de base recomendadas:

Configuração de Servidor Web de Linha de Base

# 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 sua configuração de firewall com um Certificado SSL válido para garantir que todo o tráfego web seja criptografado de ponta a ponta. AlexHost oferece certificados SSL para todos os ambientes de hospedagem.

Configuração de Servidor de Banco de Dados de Linha de Base (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 Servidor cPanel/WHM de Linha de Base

Se você está usando um VPS com cPanel, você precisará abrir as portas exigidas pelo 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 flag --permanent e recarregou:

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

O comando --runtime-to-permanent salva todas as regras de tempo de execução atuais na configuração permanente.

Problema 3: Bloqueado Fora do SSH

Se você bloqueou acidentalmente o acesso SSH, será necessário acessar o servidor via console (disponível através do painel de controle VPS da AlexHost) e executar:

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

Problema 4: Verificando Logs do Firewalld

sudo journalctl -u firewalld -f

Ou verifique o log do sistema para mensagens relacionadas ao firewall:

sudo grep -i firewall /var/log/messages

Folha de Referência Rápida do Firewalld

TarefaComando
Verificar statussudo systemctl status firewalld
Iniciar Firewalldsudo systemctl start firewalld
Parar Firewalldsudo systemctl stop firewalld
Ativar no arranquesudo systemctl enable firewalld
Obter zona padrãosudo firewall-cmd --get-default-zone
Listar todas as zonassudo firewall-cmd --get-zones
Listar zonas ativassudo firewall-cmd --get-active-zones
Definir zona padrãosudo firewall-cmd --set-default-zone=public
Adicionar um serviçosudo firewall-cmd --zone=public --add-service=http --permanent
Remover um serviçosudo firewall-cmd --zone=public --remove-service=http --permanent
Abrir uma portasudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
Fechar uma portasudo firewall-cmd --zone=public --remove-port=8080/tcp --permanent
Listar serviçossudo firewall-cmd --zone=public --list-services
Listar portassudo firewall-cmd --zone=public --list-ports
Listar todas as regrassudo firewall-cmd --list-all
Adicionar regra avançadasudo firewall-cmd --zone=public --add-rich-rule='...' --permanent
Guardar regras em tempo de execuçãosudo firewall-cmd --runtime-to-permanent
Recarregar Firewalldsudo firewall-cmd --reload
Modo pânico (bloquear tudo)sudo firewall-cmd --panic-on
Desativar modo pânicosudo firewall-cmd --panic-off

Conclusão

Firewalld é uma ferramenta de gerenciamento de firewall excepcionalmente capaz e flexível que oferece aos administradores de sistemas Linux controle preciso e dinâmico sobre o tráfego de rede. Ao dominar zonas, serviços, regras de porta e regras avançadas, você pode construir uma arquitetura de segurança em camadas e adaptativa que proteja seu servidor contra acesso não autorizado, ataques de força bruta e ameaças em nível de rede.

Os princípios-chave a levar adiante:

  1. Sempre permita SSH antes de ativar o firewall para evitar se trancar
  2. Use a flag --permanent para todas as regras de produção e sempre siga com --reload
  3. Restrinja serviços sensíveis (SSH, bancos de dados, painéis de administração) a endereços IP específicos confiáveis usando regras avançadas
  4. Revise suas regras de firewall regularmente — sua postura de segurança deve evoluir conforme sua infraestrutura muda
  5. Teste regras em tempo de execução primeiro, depois torne-as permanentes após verificação

Quer você esteja gerenciando um único VPS ou uma frota de Servidores Dedicados, a AlexHost fornece a infraestrutura, desempenho e acesso root completo que você precisa para implementar configurações de segurança em nível empresarial. Combine sua configuração Firewalld com Certificados SSL para comunicações criptografadas e explore Painéis de Controle VPS para gerenciamento simplificado de servidores — tudo disponível na plataforma confiável e de alto desempenho da AlexHost.