Como configurar e gerenciar firewalld no CentOS: guia prático e seguro

Como configurar e gerenciar firewalld no CentOS: guia prático e seguro
Como configurar e gerenciar firewalld no CentOS: guia prático e seguro

O no é um gerenciador de dinâmico que organiza regras por zonas, permite testar alterações em runtime e depois torná-las permanentes com segurança. Use firewall-cmd, mantenha sessão SSH reserva e verifique o backend (/iptables) para evitar conflitos e perda de acesso.

firewalld no CentOS é a forma moderna e dinâmica de controlar o tráfego do servidor — mas como evitar um bloqueio acidental e zonas, serviços e portas corretamente? Neste guia prático você vai entender os conceitos essenciais e receber passos testados para aplicar mudanças com segurança.

O que é o firewalld e por que usar no CentOS

firewalld é um gerenciador de firewall dinâmico e moderno usado no CentOS.

Ele organiza regras em zonas, o que facilita o controle do tráfego.

Zonas permitem separar redes e aplicar políticas diferentes por interface de forma simples.

As mudanças podem ser temporárias (runtime) ou permanentes, com reload seguro posterior.

Alterações runtime aplicam-se de imediato e não exigem reinício do serviço.

Isso permite testar regras sem risco de interromper conexões essenciais do servidor.

Use firewall-cmd no terminal para adicionar portas, serviços e regras rápidas.

Para quem prefere interface gráfica, existe o firewall-config em algumas distribuições.

Uma boa prática é manter uma sessão SSH de emergência antes de testar mudanças remotas.

Abra apenas as portas necessárias, como 80 e 443 para servidores web.

Seja cuidadoso ao misturar firewalld com iptables para evitar conflitos inesperados.

No CentOS mais recente, firewalld costuma operar bem com backend nftables quando disponível.

Dica prática: use zonas, teste no runtime e salve apenas quando tiver validado tudo.

Instalando e ativando o firewalld para iniciar no boot

firewalld é fácil de instalar no CentOS usando o gerenciador de pacotes.

Em CentOS 7 e 8 você pode usar yum ou dnf para instalar.

Execute no terminal:

sudo yum install -y firewalld

Depois habilite e inicie o serviço para rodar agora e no boot.

Use o comando:

sudo systemctl enable --now firewalld

Confirme o estado com:

sudo systemctl status firewalld

ou

firewall-cmd --state

Mantenha sempre uma sessão SSH ativa antes de testar regras remotamente.

No servidor com interface gráfica, instale firewall-config para gestão visual.

Se preferir separar ações, use

sudo systemctl enable firewalld

e depois

sudo systemctl start firewalld

.

Para atualizar o pacote, rode:

sudo dnf update firewalld

Verifique que o serviço iniciou após reiniciar o sistema para garantir o boot.

firewalld vs iptables: diferenças e quando evitar misturar

firewalld e iptables protegem suas conexões, mas funcionam bem diferente.

O firewalld usa zonas para aplicar regras por nível de confiança.

Zonas tornam simples permitir serviços para redes conhecidas.

O iptables usa tabelas e cadeias, aplicando regras numa ordem fixa.

Isso dá controle fino, mas exige cuidado com a sequência das regras.

Outra diferença é o backend: firewalld pode usar nftables como base.

Já iptables pode rodar em modo legado sobre o netfilter clássico.

Misturar os dois pode gerar regras conflitantes ou regras apagadas ao reiniciar.

Regras diretas com iptables podem ser sobrescritas pelo firewalld a qualquer momento.

Isso complica o diagnóstico quando o tráfego não passa como esperado.

Evite misturar em servidores de produção ou em ambientes críticos.

Se precisar usar iptables direto, documente tudo e teste em ambiente isolado.

Checar o backend ajuda a decidir: use comandos para ver qual está ativo.

Prefira administrar com firewall-cmd se já usa firewalld no sistema.

Para ver regras do firewalld, execute

firewall-cmd --list-all

Para inspecionar o iptables, use

sudo iptables -L -n

Se for migrar, faça a migração em janela de manutenção e mantenha sessão SSH reserva.

Entendendo zonas: níveis de confiança e aplicações práticas

firewalld organiza regras em zonas para definir níveis de confiança na rede.

As zonas aplicam políticas diferentes conforme a interface ou a origem do tráfego.

Uma zona com mais confiança permite mais serviços e portas abertas por padrão.

Já zonas restritas bloqueiam conexões não autorizadas sem aviso prévio.

Zonas comuns

  • public: uso geral, restrito e ideal para servidores públicos.
  • home: redes domésticas com confiança moderada e serviços de compartilhamento.
  • work: redes empresariais com mais serviços permitidos que public.
  • internal: rede interna da empresa, para serviços backend e banco de dados.
  • trusted: abre quase tudo, só use em redes muito seguras.
  • drop: descarta pacotes sem resposta; útil para portas sensíveis.
  • block: rejeita conexões com resposta, para controle explícito de acesso.

Atribuir uma interface à zona muda automaticamente as regras aplicadas a ela.

Use

firewall-cmd --zone=home --change-interface=eth0

para testar rapidamente a mudança.

Lembre que mudanças runtime não são permanentes por padrão.

Para salvar, use

firewall-cmd --runtime-to-permanent

ou adicione a flag –permanent ao comando.

Permita serviços por zona, não por interface, quando quiser controle mais claro.

Exemplo: servidores web ficam em public com portas 80 e 443 liberadas.

Banco de dados deve ficar em internal ou trusted, não em public.

Evite dar confiança excessiva a zonas sem monitoramento e logs ativos.

Teste sempre em runtime antes de persistir mudanças no sistema.

Mantenha uma sessão SSH reserva ao alterar zonas remotamente no servidor.

Zonas pré-definidas: do drop ao trusted (casos de uso)

firewalld oferece zonas pré-definidas que facilitam aplicar políticas por interface com segurança.

A zona drop descarta pacotes sem responder, útil contra scanners e ataques automáticos.

Use drop para portas sensíveis ou serviços que não devem responder externamente.

A zona block rejeita conexões e informa que o acesso foi negado ao remetente.

public é a zona padrão para servidores expostos com regras moderadas por padrão.

home e work permitem mais serviços, boas para redes familiares e empresariais internas.

internal isola recursos internos, ideal para bancos de dados e serviços backend críticos.

trusted abre quase tudo; use-a só em redes muito seguras e monitoradas.

  • Web server: configure a zona public e abra só as portas 80 e 443.
  • Database: coloque em internal ou trusted e bloqueie acessos externos não autorizados.
  • IoT: use drop ou block para dispositivos inseguros sem serviços públicos expostos.
  • Admin: mantenha SSH numa zona separada e use trusted apenas em rede segura.

Altere rapidamente a zona de uma interface para testar comportamento em runtime.

sudo firewall-cmd --zone=home --change-interface=eth0

Teste todas as regras no runtime antes de torná-las permanentes no sistema.

sudo firewall-cmd --runtime-to-permanent

Verifique o estado atual da zona com list-all para confirmar as configurações aplicadas.

firewall-cmd --zone=public --list-all

Planeje as zonas conforme risco e exposição dos serviços, e documente cada mudança.

Mantenha sempre uma sessão SSH de emergência quando alterar zonas remotamente no servidor.

Runtime vs permanente: testar antes de salvar mudanças

firewalld oferece dois modos: runtime e permanente, que controlam como regras são salvas.

O modo runtime aplica mudanças na hora, mas elas somem após reiniciar o serviço.

O modo permanente grava regras nos arquivos do sistema e persiste após reinicializações.

É comum testar em runtime primeiro para evitar travar conexões críticas do servidor.

Use runtime para validar portas e serviços antes de torná-los permanentes no sistema.

sudo firewall-cmd --add-port=2222/tcp

Esse comando abre a porta apenas no runtime, sem gravar a alteração.

sudo firewall-cmd --permanent --add-port=2222/tcp

Para salvar mudanças testadas, converta runtime para permanente com runtime-to-permanent.

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

Outra abordagem é usar –permanent direto e depois usar –reload para aplicar.

Sempre mantenha uma sessão SSH reserva antes de testar regras remotamente no servidor.

Cheque o estado com firewall-cmd --state e liste regras com --list-all.

Testar antes de salvar reduz riscos e facilita correções sem emergência.

Como checar a zona padrão e interfaces ativas

Para checar a zona padrão use o comando abaixo no terminal.

firewall-cmd --get-default-zone

Ele retorna o nome da zona usada por padrão no sistema.

Para ver as zonas ativas e as interfaces vinculadas, rode este comando.

firewall-cmd --get-active-zones

O resultado lista cada zona e as interfaces atribuídas a ela.

Para listar as interfaces de uma zona específica, use:

firewall-cmd --zone=public --list-interfaces

Se quiser checar as interfaces permanentes, adicione a flag --permanent ao comando.

firewall-cmd --permanent --zone=public --list-interfaces

Para mudar a zona de uma interface temporariamente, execute:

sudo firewall-cmd --zone=home --change-interface=eth0

Se quiser aplicar a mudança para sempre, repita com --permanent e recarregue.

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

Mantenha sempre uma sessão SSH de emergência antes de alterar zonas remotamente.

Verifique o estado do serviço com firewall-cmd --state e systemctl status firewalld.

Use firewall-cmd --list-all para ver todas as regras aplicadas na zona.

Explorando a configuração padrão do public e home

firewalld organiza zonas e define regras padrão para diferentes ambientes de rede.

A zona public serve para servidores expostos e aceita poucas exceções por padrão.

No public, serviços como HTTP e HTTPS são tipicamente liberados com cuidado.

A zona home assume mais confiança e permite serviços locais de compartilhamento.

No home você costuma ver descoberta de dispositivos e compartilhamento de arquivos locais.

Ambas as zonas trazem regras pré-configuradas que cobrem casos de uso frequentes.

Para ver as regras aplicadas, rode firewall-cmd --zone=public --list-all no terminal do sistema.

Use --permanent para checar as regras salvas no disco, não apenas temporárias.

Teste em runtime para validar antes de tornar mudanças permanentes no servidor.

Mantenha sempre uma conexão SSH reserva ao alterar zonas remotamente no servidor.

Exemplo prático: deixe o servidor web em public e dispositivos locais em home.

Documente cada alteração e verifique acesso aos serviços após qualquer mudança.

Atribuindo interfaces a zonas: mudar temporariamente e permanentemente

firewalld permite atribuir interfaces a zonas temporária e permanentemente no sistema.

Para mudar imediatamente sem gravar, use este comando no terminal do servidor.

sudo firewall-cmd --zone=home --change-interface=eth0

Essa alteração vale só até reiniciar o serviço ou o sistema operacional.

Para tornar a alteração permanente, adicione a flag --permanent ao comando.

sudo firewall-cmd --permanent --zone=home --change-interface=eth0

Depois recarregue as regras para aplicar as mudanças salvas no arquivo do firewall.

sudo firewall-cmd --reload

Você pode converter o estado runtime para permanente com um comando simples.

sudo firewall-cmd --runtime-to-permanent

Verifique a zona ativa e interfaces antes e depois de qualquer mudança com estes comandos.

firewall-cmd --get-active-zones firewall-cmd --zone=home --list-interfaces

Mantenha sempre uma sessão SSH de emergência aberta durante alterações remotas no servidor.

Testar em runtime ajuda a evitar bloqueios e confirma que os serviços continuam acessíveis.

Alterando a zona padrão do sistema com segurança

firewalld permite alterar a zona padrão com comandos simples e seguros.

Antes de mudar, confira a zona atual com este comando no terminal.

firewall-cmd --get-default-zone

Teste a nova zona em runtime antes de gravar alterações permanentes.

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

Verifique o resultado e as regras aplicadas com list-all para a zona nova.

firewall-cmd --zone=home --list-all

Se tudo estiver OK, torne a mudança permanente com a flag –permanent.

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

Outra opção é usar runtime-to-permanent após validar no runtime.

sudo firewall-cmd --runtime-to-permanent

Mantenha sempre uma sessão SSH alternativa antes de aplicar mudanças remotas.

Confirme que o SSH está permitido na nova zona para evitar bloqueios.

firewall-cmd --zone=home --list-services

Faça backup das configurações em /etc/firewalld antes de alterar zonas críticas.

sudo cp -r /etc/firewalld /root/firewalld-backup-$(date +%F)

Documente a mudança e monitore logs após aplicar a nova zona padrão.

Se algo der errado, restaure o backup ou use console de emergência para recuperar o acesso.

Permitindo serviços com –add-service e verificações

firewalld permite liberar serviços usando comandos simples no terminal do servidor remoto.

Use o comando --add-service para liberar um serviço no runtime primeiro rapidamente.

Exemplo: para HTTP e HTTPS em runtime, execute estes comandos no terminal agora.

sudo firewall-cmd --add-service=http sudo firewall-cmd --add-service=https

Depois de testar bem, torne as mudanças permanentes com a flag --permanent.

sudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --permanent --add-service=https sudo firewall-cmd --reload

Verifique os serviços liberados na zona com --list-services para confirmar as regras.

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

Use --zone=public --list-all para ver serviços, portas e outras configurações da zona.

Tenha cuidado com SSH e mantenha sempre uma sessão reserva antes de testar remotamente.

Se precisar de um serviço personalizado, crie um arquivo XML no diretório de serviços.

Depois de criar o serviço, carregue-o com --add-service ou recarregue o firewalld.

Sempre teste em runtime antes de salvar regras permanentes para evitar bloqueios inesperados.

Documente as alterações e verifique logs se o tráfego não responder como esperado.

Abrindo portas e ranges com –add-port (tcp/udp)

firewalld permite abrir portas específicas para controlar o tráfego de rede.

Use --add-port para liberar portas no modo runtime de forma imediata.

Exemplo para abrir a porta 8080 TCP temporariamente no servidor.

sudo firewall-cmd --add-port=8080/tcp

Para salvar a regra use a flag --permanent e recarregue o serviço.

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

Você também pode liberar um range de portas como 1000-2000 para TCP.

sudo firewall-cmd --add-port=1000-2000/tcp --permanent

Para UDP, troque tcp por udp no parâmetro do comando.

Verifique as portas abertas com o comando --list-ports na zona desejada.

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

Cuidado ao abrir portas remotas; mantenha uma sessão SSH reserva sempre ativa.

Abra só as portas necessárias e documente cada mudança no servidor.

Testar em runtime evita bloqueios e permite reversão rápida se necessário.

Criando serviços personalizados via arquivos .xml

Criar serviços personalizados no firewalld permite definir portas e protocolos sem confusão.

Os arquivos ficam em /etc/firewalld/services e precisam ter extensão .xml, nome e sintaxe corretos.

Um exemplo simples mostra como declarar o serviço e a porta necessária.

<?xml version="1.0" encoding="utf-8"?> <service>   <short>Meu Serviço</short>   <description>Serviço exemplo que abre a porta 1234/tcp</description>   <port protocol="tcp" port="1234"/> </service>

No XML, use <short> para o nome curto e <port> para porta e protocolo.

Salve o arquivo com nome descritivo, por exemplo meu-servico.xml no diretório apropriado.

Recarregue o firewalld para que o serviço novo seja reconhecido pelo daemon.

sudo firewall-cmd --reload

Adicione o serviço com firewall-cmd –add-service=meu-servico para testar em runtime rapidamente, sem gravar.

sudo firewall-cmd --add-service=meu-servico

Se tudo funcionar, torne permanente usando –permanent e recarregue o serviço do firewall.

sudo firewall-cmd --permanent --add-service=meu-servico sudo firewall-cmd --reload

Documente o novo serviço e verifique logs se o tráfego não estiver passando como esperado.

Criar serviços personalizados ajuda a manter regras claras e fáceis de auditar no sistema.

Valide o XML com ferramentas como xmllint se quiser confirmar a sintaxe do arquivo.

Criando zonas customizadas e aplicando políticas específicas

Você pode criar zonas customizadas no firewalld para políticas específicas de rede.

Uma zona customizada isola serviços e regras sem afetar as zonas padrão.

Crie a zona temporária com o comando abaixo para testar antes de salvar.

sudo firewall-cmd --new-zone=dmz

Depois defina regras no runtime, por exemplo liberar portas ou serviços específicos.

sudo firewall-cmd --zone=dmz --add-service=http

Para portas, use o formato porta/protocolo, como 3306/tcp para MySQL.

sudo firewall-cmd --zone=dmz --add-port=3306/tcp

Teste tudo em runtime e confirme que os serviços respondem como esperado.

Quando validar as regras, torne-as permanentes com a flag –permanent e recarregue.

sudo firewall-cmd --permanent --new-zone=dmz sudo firewall-cmd --permanent --zone=dmz --add-service=http sudo firewall-cmd --reload

Você pode editar o arquivo XML em /etc/firewalld/zones/dmz.xml para ajustes finos.

Documente as políticas, registre quem alterou e quando para auditoria futura.

Mantenha sempre uma sessão SSH reserva antes de aplicar mudanças remotas no servidor.

Use logs e monitoramento para garantir que as regras funcionam como esperado depois.

Erro comum: regras permanentes sem reload e como corrigir

Um erro comum é usar –permanent e esquecer de recarregar o serviço.

As regras ficam gravadas no disco, mas não entram em vigor imediatamente.

Para aplicar as mudanças, execute no terminal:

sudo firewall-cmd --reload

Se testou em runtime e quer salvar o estado atual, use este comando.

sudo firewall-cmd --runtime-to-permanent

Ao adicionar regra permanentemente, faça assim e depois recarregue o firewall.

sudo firewall-cmd --permanent --add-port=1234/tcp sudo firewall-cmd --reload

Verifique regras permanentes com o comando abaixo para confirmar a configuração salva.

sudo firewall-cmd --permanent --list-all

Cheque as regras ativas separadamente com firewall-cmd --list-all no runtime.

Mantenha sempre uma sessão SSH reserva antes de testar mudanças remotas no servidor.

Se perder acesso, restaure backup dos arquivos em /etc/firewalld ou use console físico.

Documente cada alteração e registre quem aplicou e quando no servidor.

Testar em runtime antes de salvar reduz riscos e facilita reverter se necessário.

Evitar travar SSH: perguntas, teste e manter sessão de backup

firewalld pode bloquear o acesso SSH se regras forem aplicadas sem cuidado.

Antes de mudar regras, pergunte: tenho sessão local ou acesso de console?

Mantenha sempre uma sessão SSH reserva antes de testar alterações remotamente.

Abra uma segunda conexão SSH em outra janela ou em outro host confiável.

Use comandos em runtime para testar mudanças sem gravar no sistema.

Por exemplo, rode este comando em runtime para abrir uma porta temporária.

sudo firewall-cmd --add-port=2222/tcp

Testes devem confirmar que a nova porta aceita conexões SSH antes de salvar.

Se a conexão funcionar, salve as regras permanentemente ou converta o estado runtime.

sudo firewall-cmd --permanent --add-port=2222/tcp sudo firewall-cmd --reload

Verifique se o SSH está permitido na zona atual antes de qualquer alteração.

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

Tenha comandos de rollback prontos para usar em emergência, como remover porta.

sudo firewall-cmd --remove-port=2222/tcp sudo firewall-cmd --reload

Use console físico ou acesso de out-of-band se perder a conexão SSH principal.

Documente cada teste, mantenha logs e anote quem aplicou as mudanças.

Diagnóstico final: nftables, conflitos com iptables e checklist de verificação

Para diagnosticar conflitos, verifique primeiro qual backend o firewalld está usando no sistema.

Rode no terminal:

firewall-cmd --state

e depois verifique o backend com

firewall-cmd --info-backend

.

Se o backend for nftables, inspecione o conjunto de regras com o comando nft.

sudo nft list ruleset

Se usar iptables, liste as regras com um comando simples para inspeção.

sudo iptables -L -n

Verifique se existem shims como iptables-nft que traduzem regras entre os backends.

Conflitos aparecem quando regras são aplicadas por ambas as ferramentas ao mesmo tempo.

Isso pode causar bloqueios inesperados ou regras que somem após reinício do sistema.

Checklist rápido: verifique firewalld ativo, backend, regras nft, regras iptables e serviços.

Faça backup antes de alterar qualquer arquivo em /etc/firewalld ou regras atuais.

Se decidir migrar para nftables, converta regras iptables e remova duplicações com cuidado.

Use comandos de teste em runtime antes de salvar mudanças permanentemente no sistema.

Ao corrigir, limpe regras antigas, reinicie o firewalld e valide o tráfego com testes.

Monitore logs em /var/log/messages ou com journalctl para identificar erros do firewall.

Se não tiver certeza, mantenha um plano de rollback e peça ajuda de um colega experiente.

Resumo e recomendações finais

firewalld facilita o gerenciamento de firewall no CentOS com zonas e comandos simples.

Teste sempre em runtime antes de salvar mudanças permanentes no sistema.

Mantenha uma sessão SSH reserva, documente alterações e faça backups regulares.

Verifique conflitos entre nftables e iptables, e prefira um único backend quando possível.

Com boas práticas, é possível proteger serviços sem interromper o acesso remoto.

FAQ – Perguntas frequentes sobre firewalld no CentOS

O que é o firewalld e por que devo usar?

O firewalld é um gerenciador de firewall dinâmico que usa zonas. Ele facilita aplicar políticas por interface e testar mudanças sem reiniciar o serviço.

Qual a diferença entre firewalld e iptables?

firewalld usa zonas e abstrações; iptables trabalha com tabelas e cadeias. Misturar os dois pode causar conflitos e regras inesperadas.

Como evito travar o SSH ao aplicar regras?

Mantenha uma sessão SSH reserva, teste em runtime e só salve quando confirmar que o acesso continua funcionando.

Como salvo mudanças de runtime para permanente?

Use –permanent ao adicionar regras e rode sudo firewall-cmd –reload. Ou converta com sudo firewall-cmd –runtime-to-permanent.

Como criar um serviço personalizado no firewalld?

Crie um arquivo XML em /etc/firewalld/services com a porta e protocolo, recarregue o firewalld e adicione o serviço.

Como checar a zona padrão e interfaces ativas?

Use firewall-cmd –get-default-zone para a zona padrão e firewall-cmd –get-active-zones para ver interfaces e zonas ativas.