Pesquisa de site

Como instalar, configurar e usar o Firewalld no CentOS e Ubuntu


Firewalld (daemon de firewall) é uma alternativa ao serviço iptables, para gerenciar dinamicamente o firewall de um sistema com suporte para zonas de rede (ou firewall) e fornece uma interface D-Bus para gerenciar configurações. É fácil de usar e configurar, e agora é a ferramenta de gerenciamento de firewall padrão no RHEL/CentOS, no Fedora e em diversas outras distribuições Linux.

Neste artigo, discutiremos como configurar o firewall do sistema com firewalld e implementar a filtragem básica de pacotes no CentOS/RHEL 7 e no Ubuntu.

O básico sobre o Firewalld

Firewalld é composto por três camadas, que são:

  • camada principal: responsável por lidar com a configuração e os back-ends (listados abaixo).
  • Interface D-Bus: o principal meio de alterar e criar a configuração do firewall.
  • backends: para interagir com o netfilter (o módulo nativo do kernel usado para firewall). Eles incluem iptables, ip6tables, ebtables, ipset, nft, linnftables; gerente da rede; e módulos.

Ele gerencia regras de firewall implementando zonas de rede/firewall que definem o nível de confiança das conexões ou interfaces de rede. Outros recursos de firewall suportados incluem serviços, configuração direta (usada para passar diretamente a sintaxe bruta do iptables), IPSets, bem como tipos de ICMP.

Dois tipos de ambientes de configuração são suportados pelo firewalld:

  • configuração de tempo de execução que só é eficaz até que a máquina seja reinicializada ou o serviço firewalld seja reiniciado
  • configuração permanente que é salva e funciona persistentemente.

A ferramenta de linha de comando firewall-cmd é usada para gerenciar o tempo de execução e a configuração permanente. Alternativamente, você pode usar a ferramenta de configuração da interface gráfica do usuário (GUI) firewall-config para interagir com o daemon.

Além disso, o firewalld oferece uma interface bem definida para que outros serviços ou aplicativos locais solicitem alterações diretamente nas regras do firewall, caso estejam sendo executados com privilégios de root.

O arquivo de configuração global do firewalld está localizado em /etc/firewalld/firewalld.conf e os recursos do firewall são configurados no formato XML.

Compreendendo recursos importantes do Firewalld

O recurso central do firewalld são as zonas de rede/firewall. Todos os outros recursos estão limitados a uma zona. Uma zona de firewall descreve o nível de confiança para uma conexão, interface ou ligação de endereço de origem.

A configuração padrão vem com diversas zonas predefinidas classificadas de acordo com o nível de confiança padrão das zonas, de não confiável a confiável: descartar, bloquear, público, externo, dmz, trabalho, inicial, interno e confiável. Eles são definidos em arquivos armazenados no diretório /usr/lib/firewalld/zones.

Você pode configurar ou adicionar suas zonas personalizadas usando o cliente CLI ou simplesmente criar ou copiar um arquivo de zona em /etc/firewalld/zones de arquivos existentes e editá-lo.

Outro conceito importante no firewalld são os serviços. Um serviço é definido por meio de portas e protocolos; essas definições representam um determinado serviço de rede, como um servidor web ou serviço de acesso remoto. Os serviços são definidos em arquivos armazenados no diretório /usr/lib/firewalld/services/ ou /etc/firewalld/services/.

Se você conhece os conceitos básicos de iptables/ip6tables/ebtables, também pode usar a interface direta (ou configuração) para obter acesso direto ao firewall. Mas, para quem não tem conhecimento de iptables, você pode empregar a linguagem rica para criar regras de firewall mais complexas para IPv4 e IPv6.

Como instalar o pacote Firewalld no Linux

No CentOS 7, o pacote firewalld vem pré-instalado e você pode verificar usando o seguinte comando.

rpm -qa firewalld

No Ubuntu 16.04 e no 18.04, você pode instalá-lo usando o gerenciador de pacotes padrão, conforme mostrado.

sudo apt install firewalld

Como gerenciar o serviço Firewalld no Linux

Firewalld é um serviço regular do systemd que pode ser gerenciado através do comando systemctl.

 
sudo systemctl start firewalld	#start the service for the mean time
sudo systemctl enable firewalld	#enable the service to auto-start at boot time
sudo systemctl status firewalld	#view service status

Após iniciar o serviço firewalld, você também pode verificar se o daemon está rodando ou não, usando a ferramenta firewall-cmd (caso não esteja ativo, este comando irá gerar “not correndo ").

sudo firewall-cmd --state

Se você salvar alguma alteração permanentemente, poderá recarregar o firewalld. Isso recarregará as regras do firewall e manterá as informações de estado. A configuração permanente atual se tornará a nova configuração de tempo de execução.

sudo firewall-cmd --reload

Como trabalhar com zonas de firewall no Firewalld

Para obter uma lista de todas as zonas e serviços de firewall disponíveis, execute estes comandos.

sudo firewall-cmd --get-zones
sudo firewall-cmd --get-services

A zona padrão é a zona usada para todos os recursos de firewall que não estão explicitamente limitados a outra zona. Você pode obter a zona padrão definida para conexões e interfaces de rede executando.

sudo firewall-cmd --get-default-zone

Para definir a zona padrão, por exemplo, para externa, use o seguinte comando. Observe que adicionar a opção --permanent define a configuração permanentemente (ou permite a consulta de informações do ambiente de configuração permanente).

sudo firewall-cmd --set-default-zone=external
OR
sudo firewall-cmd --set-default-zone=external --permanent
sudo firewall-cmd --reload 

A seguir, vamos ver como adicionar uma interface a uma zona. Este exemplo mostra como adicionar seu adaptador de rede sem fio (wlp1s0) à zona inicial, que é usada em áreas residenciais.

sudo firewall-cmd --zone=home --add-interface=wlp1s0

Uma interface só pode ser adicionada a uma única zona. Para movê-lo para outra zona, use a opção --change-interface conforme mostrado, ou remova-o da zona anterior usando a opção –remove-interface e adicione-o para a nova zona.

Supondo que você queira se conectar a uma rede WI-FI pública, você deve mover sua interface sem fio de volta para a zona pública, assim:

sudo firewall-cmd --zone=public --add-interface=wlp1s0
sudo firewall-cmd --zone=public --change-interface=wlp1s0

Você pode usar muitas zonas ao mesmo tempo. Para obter uma lista de todas as zonas ativas com recursos habilitados, como interfaces, serviços, portas, protocolos, execute:

sudo firewall-cmd --get-active-zones

Em relação ao ponto anterior, se quiser encontrar mais informações sobre uma determinada zona, ou seja, tudo o que foi adicionado ou habilitado nela, use um destes comandos:

sudo firewall-cmd --zone=home --list-all
OR
sudo firewall-cmd --info-zone public

Outra opção útil é --get-target, que mostra o destino de uma zona permanente. Um destino é: padrão, ACCEPT, DROP, REJECT. Você pode verificar o alvo de várias zonas:

sudo firewall-cmd --permanent --zone=public --get-target  
sudo firewall-cmd --permanent --zone=block --get-target  
sudo firewall-cmd --permanent --zone=dmz --get-target  
sudo firewall-cmd --permanent --zone=external --get-target
sudo firewall-cmd --permanent --zone=drop --get-target

Como abrir e bloquear portas no Firewalld

Para abrir uma porta (ou combinação porta/protocolo) no firewall, basta adicioná-la em uma zona com a opção --add-port. Se você não especificar explicitamente a zona, ela será habilitada na zona padrão.

O exemplo a seguir mostra como adicionar as portas 80 e 443 para permitir tráfego de entrada da web por meio de HTTP e HTTPS protocolos, respectivamente:

sudo firewall-cmd --zone=public --permanent --add-port=80/tcp --add-port=443/tcp

Em seguida, recarregue o firewalld e verifique os recursos habilitados na zona pública mais uma vez, você poderá ver as portas recém-adicionadas.

sudo firewall-cmd --reload
sudo firewall-cmd --info-zone public

Bloquear ou fechar uma porta no firewall é igualmente fácil, basta removê-la de uma zona com a opção --remove-port. Por exemplo, fechar as portas 80 e 443 na zona pública.

sudo firewall-cmd --zone=public --permanent --remove-port=80/tcp --remove-port=443/tcp

Em vez de usar porta ou combinação de porta/protocolo, você pode usar o nome do serviço ao qual uma porta está atribuída, conforme explicado na próxima seção.

Como abrir e bloquear serviços no Firewalld

Para abrir um serviço no firewall, habilite-o usando a opção --add-service. Se a zona for omitida, a zona padrão será usada.

O comando a seguir habilitará permanentemente o serviço http na zona pública.

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

A opção --remove-service pode ser usada para desabilitar um serviço.

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

Como ativar e desativar o mascaramento de IP usando Firewalld

IP Masquerading (também conhecido como IPMASQ ou MASQ) é um NAT (Network Address Translation forte>) na rede Linux que permite que seus hosts em uma rede, com endereços IP privados, se comuniquem com a Internet usando o endereço IP público atribuído ao seu servidor Linux (gateway IPMASQ).

É um mapeamento um-para-muitos. O tráfego dos seus hosts invisíveis aparecerá para outros computadores na Internet como se viesse do seu servidor Linux.

Você pode ativar o mascaramento de IP em uma zona desejada, por exemplo, a zona pública. Mas antes de fazer isso, primeiro verifique se o mascaramento está ativo ou não (um “não” significa que está desativado e um “sim” significa o contrário).

sudo firewall-cmd --zone=public --query-masquerade
sudo firewall-cmd --zone=public --add-masquerade

Um caso de uso típico de mascaramento é realizar o encaminhamento de porta. Supondo que você queira fazer SSH de uma máquina remota para um host em sua rede interna com o IP 10.20.1.3, no qual o daemon sshd está escutando na porta 5000.

Você pode encaminhar todas as conexões da porta 22 no seu servidor Linux para a porta pretendida no seu host de destino emitindo:

sudo firewall-cmd --zone=public --add-forward-port=port=22=proto=tcp:toport=5000:toaddr=10.20.1.3

Para desativar o mascaramento em uma zona, use a opção --remove-masquerade.

sudo firewall-cmd --zone=public --remove-masquerade

Como ativar e desativar mensagem IMCP no Firewalld

Mensagens ICMP (Internet Control Message Protocol) são solicitações de informações ou respostas a solicitações de informações ou em condições de erro.

Você pode ativar ou desativar mensagens ICMP no firewall, mas antes disso liste primeiro todos os tipos de ICMP suportados.

sudo firewall-cmd --get-icmptypes

Para adicionar ou remover um tipo de bloco desejado.

sudo firewall-cmd --zone=home --add-icmp-block=echo-reply
OR
sudo firewall-cmd --zone=home --remove-icmp-block=echo-reply

Você pode visualizar todos os tipos de icmp adicionados em uma zona usando a opção --list-icmp-blocks.

sudo firewall-cmd --zone=home --list-icmp-blocks

Como usar a interface direta para passar comandos brutos do iptables

O firewall-cmd também fornece opções diretas (--direct) para você obter acesso mais direto ao firewall. Isso é útil para quem tem conhecimento básico de iptables.

Importante: você só deve usar as opções diretas como último recurso quando não for possível usar as opções normais de firewall-cmd explicadas acima.

Aqui está um exemplo de como passar a regra bruta do iptables, usando a opção --add-rules. Você pode remover facilmente essas regras substituindo --add-rule por --remove-rule:

sudo firewall-cmd --direct --add-rule ipv4 filter IN_public_allow 0 -m tcp -p tcp --dport 80 -j ACCEPT

Para obter mais informações sobre iptables, consulte este guia: Como configurar um firewall Iptables para permitir acesso remoto a serviços no Linux.

Se você não está familiarizado com a sintaxe do iptables, você pode optar pela “linguagem rica” do firewalld para criar regras de firewall mais complexas de uma maneira fácil de entender, conforme explicado a seguir.

Como usar linguagem rica no Firewalld

A linguagem rica (também conhecida como regras ricas) é usada para adicionar regras de firewall mais complexas para IPv4 e IPv6 sem o conhecimento da sintaxe do iptables.

Ele estende os recursos de zona (serviço, porta, bloco icmp, mascaramento e porta de encaminhamento) que abordamos. Ele oferece suporte a endereços de origem e destino, registro em log, ações e limites para registros e ações.

O --add-rich-rule é usado para adicionar regras ricas. Este exemplo mostra como permitir novas conexões IPv4 e IPv6 para serviço http e registrar 1 por minuto usando auditoria:

sudo firewall-cmd --add-rich-rule='rule service name="http" audit limit value="1/m" accept'

Para remover a regra adicionada, substitua a opção --add-rich-rule por --remove-rich-rule.

sudo firewall-cmd --remove-rich-rule='rule service name="http" audit limit value="1/m" accept'

Este recurso também permite bloquear ou permitir tráfego de um endereço IP específico. O exemplo a seguir mostra como rejeitar conexões do IP 10.20.1.20.

sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.0.254" reject'

Como ativar e desativar o modo de pânico no Firewalld

O modo pânico é um modo especial no firewalld onde todos os pacotes de entrada e saída são descartados e as conexões ativas expirarão quando ativadas.
Você pode ativar esse modo em situações de emergência em que exista uma ameaça ao seu ambiente de rede.

Para consultar o modo de pânico, use a opção --query-panic.

sudo firewall-cmd --query-panic

Para ativar o modo de pânico, use a opção --panic-on. Você pode testar se está funcionando usando o comando ping conforme mostrado. Como o pacote foi descartado, o nome www.google.com não pode ser resolvido, daí o erro exibido.

sudo firewall-cmd --panic-on
ping -c 2 www.google.com

Para desativar o modo de pânico, use a opção --panic-off.

sudo firewall-cmd --panic-off

Como bloquear o Firewalld

Lembre-se de que mencionamos no básico sobre o firewalld que aplicativos ou serviços locais são capazes de alterar a configuração do firewall se estiverem sendo executados com privilégios de root. Você pode controlar quais aplicativos podem solicitar alterações no firewall, especificando-os em uma lista de permissões de bloqueio.

Este recurso está desativado por padrão, você pode ativá-lo ou desativá-lo com a opção --lockdown-on ou --lockdown de forma receptiva.

sudo firewall-cmd --lockdown-on
OR
sudo firewall-cmd --lockdown-off

Observe que é recomendado ativar ou desativar esse recurso editando o arquivo de configuração principal, porque o firewall-cmd pode não existir na lista de permissões de bloqueio quando você ativa o bloqueio.

sudo vim /etc/firewalld/firewalld.conf

Encontre o parâmetro Lockdown e altere seu valor de no (significa desativado) para sim (significa ativado).

Lockdown=yes

Para tornar esta configuração permanente, recarregue o firewalld.

sudo firewall-cmd --reload
Resumo

Firewalld é um substituto fácil de usar para o serviço iptables, que usa iptables como backend. Neste artigo, mostramos como instalar o pacote firewalld, explicamos os recursos importantes do firewalld e discutimos como configurá-los nos ambientes de tempo de execução e de configuração permanente.

Se você tiver alguma dúvida ou comentário, sinta-se à vontade para entrar em contato conosco através do formulário de comentários abaixo. Você pode consultar a página de manual do firewalld (man firewalld) ou a documentação do firewalld no site do projeto, para obter mais informações.