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
sudoao 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 -yOu, em versões mais recentes usando DNF:
sudo dnf install firewalld -yNo 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 firewalldVerifique se o serviço está funcionando corretamente:
sudo systemctl status firewalldDeverá 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
| Zona | Nível de Confiança | Caso de Uso Típico |
|---|---|---|
drop | Mais Baixo | Todas as conexões de entrada são descartadas sem resposta |
block | Muito Baixo | Conexões de entrada são rejeitadas com uma mensagem ICMP |
public | Baixo | Zona padrão para redes públicas não confiáveis |
external | Baixo | Para interfaces voltadas para o exterior com mascaramento NAT |
dmz | Médio | Servidores acessíveis de fora mas isolados internamente |
work | Médio-Alto | Redes de trabalho com confiança moderada |
home | Alto | Redes domésticas onde outros hosts são confiáveis |
internal | Alto | Redes internas, semelhante a doméstico |
trusted | Mais Alto | Todas 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-zonesExemplo 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=publicVerifique a alteração:
sudo firewall-cmd --get-default-zoneResultado esperado:
publicExemplo 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=homeVerifique:
sudo firewall-cmd --get-default-zoneResultado esperado:
homeExemplo 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=workVerifique:
sudo firewall-cmd --get-default-zoneResultado esperado:
workPasso 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-servicesPermitir 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 --permanentPara permitir tráfego HTTPS (porta 443/TCP):
sudo firewall-cmd --zone=public --add-service=https --permanentPara 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 --permanentAplicar 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 --reloadVerificar Serviços numa Zona
sudo firewall-cmd --zone=public --list-servicesExemplo de saída:
dhcpv6-client http https sshRemover um Serviço de uma Zona
Para remover HTTPS da zona public:
sudo firewall-cmd --zone=public --remove-service=https --permanent
sudo firewall-cmd --reloadPasso 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 --reloadPara abrir uma porta UDP (por exemplo, porta 53 para DNS):
sudo firewall-cmd --zone=public --add-port=53/udp --permanent
sudo firewall-cmd --reloadPara abrir um intervalo de portas (por exemplo, 6000–6100 TCP):
sudo firewall-cmd --zone=public --add-port=6000-6100/tcp --permanent
sudo firewall-cmd --reloadFechar uma Porta Específica
Para fechar a porta 8080:
sudo firewall-cmd --zone=public --remove-port=8080/tcp --permanent
sudo firewall-cmd --reloadListar Todas as Portas Abertas numa Zona
sudo firewall-cmd --zone=public --list-portsStep 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 --reloadExemplo 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 --reloadExemplo 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 --reloadExemplo 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 --reloadExemplo 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 --reloadListar Todas as Rich Rules numa Zona
sudo firewall-cmd --zone=public --list-rich-rulesRemover 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 --reloadPasso 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-allExemplo 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" acceptVer Configuração para Todas as Zonas
sudo firewall-cmd --list-all-zonesVer Configuração para uma Zona Específica
sudo firewall-cmd --zone=dmz --list-allVerificar se um Serviço Específico É Permitido
sudo firewall-cmd --zone=public --query-service=httpVerificar se uma Porta Específica Está Aberta
sudo firewall-cmd --zone=public --query-port=8080/tcpPasso 9: Regras de Runtime vs. Permanentes — Compreender a Diferença
Firewalld opera com duas camadas de configuração distintas:
| Camada | Flag | Persistência | Caso de Uso |
|---|---|---|---|
| Runtime | *(sem flag)* | Perdida ao recarregar/reiniciar | Testar regras temporariamente |
| Permanente | --permanent | Sobrevive ao recarregar e reiniciar | Configurações de produção |
Fluxo de Trabalho de Melhor Prática
- Teste a regra em runtime primeiro (sem
--permanent) para verificar se funciona conforme esperado - Adicione a regra permanentemente após confirmação
- 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 --reloadAlternativamente, aplique uma regra permanente e recarregue imediatamente num único fluxo de trabalho:
sudo firewall-cmd --zone=public --add-service=http --permanent && sudo firewall-cmd --reloadPasso 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 --reloadAlterar a Zona de uma Interface
sudo firewall-cmd --zone=public --change-interface=eth0 --permanent
sudo firewall-cmd --reloadRemover uma Interface de uma Zona
sudo firewall-cmd --zone=internal --remove-interface=eth1 --permanent
sudo firewall-cmd --reloadPasso 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 --reloadEncaminhar 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 --reloadEncaminhar 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 --reloadConfiguraçõ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 --reloadConfiguraçã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 --reloadResoluçã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 firewalldProblema 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 --reloadO 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 --reloadProblema 4: Verificando Logs do Firewalld
sudo journalctl -u firewalld -fOu verifique o log do sistema para mensagens relacionadas ao firewall:
sudo grep -i firewall /var/log/messagesFolha de Referência Rápida do Firewalld
| Tarefa | Comando |
|---|---|
| Verificar status | sudo systemctl status firewalld |
| Iniciar Firewalld | sudo systemctl start firewalld |
| Parar Firewalld | sudo systemctl stop firewalld |
| Ativar no arranque | sudo systemctl enable firewalld |
| Obter zona padrão | sudo firewall-cmd --get-default-zone |
| Listar todas as zonas | sudo firewall-cmd --get-zones |
| Listar zonas ativas | sudo firewall-cmd --get-active-zones |
| Definir zona padrão | sudo firewall-cmd --set-default-zone=public |
| Adicionar um serviço | sudo firewall-cmd --zone=public --add-service=http --permanent |
| Remover um serviço | sudo firewall-cmd --zone=public --remove-service=http --permanent |
| Abrir uma porta | sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent |
| Fechar uma porta | sudo firewall-cmd --zone=public --remove-port=8080/tcp --permanent |
| Listar serviços | sudo firewall-cmd --zone=public --list-services |
| Listar portas | sudo firewall-cmd --zone=public --list-ports |
| Listar todas as regras | sudo firewall-cmd --list-all |
| Adicionar regra avançada | sudo firewall-cmd --zone=public --add-rich-rule='...' --permanent |
| Guardar regras em tempo de execução | sudo firewall-cmd --runtime-to-permanent |
| Recarregar Firewalld | sudo firewall-cmd --reload |
| Modo pânico (bloquear tudo) | sudo firewall-cmd --panic-on |
| Desativar modo pânico | sudo 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:
- Sempre permita SSH antes de ativar o firewall para evitar se trancar
- Use a flag
--permanentpara todas as regras de produção e sempre siga com--reload - 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
- Revise suas regras de firewall regularmente — sua postura de segurança deve evoluir conforme sua infraestrutura muda
- 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.
em todos os serviços de alojamento