Created: 2021-07-16 12:15 Updated: 2021-09-07 20:00

Introdução

Já faz um tempo que tenho tido problemas em usar o FirewallD no Debian, especialmente na versão 10.x (Buster).

Sempre sofri para fazer tudo funcionar, mas desta vez acho que encontrei uma forma mais simples e direta que, nos testes iniciais, funcionou bem.

Nota: No Debian 11 (Bullseye), o problema foi resolvido. Nesta versão (e, espero que nas próximas), o FirewallD já usa o NFTables por padrão, não sendo necessário o uso do repositório backports.

FirewallD, NetFilter, IPTables. O que são e para que servem?

As ferramentas de firewall do Linux são o IPTables (tradicional) e o NFTables (sucessor do IPTables). Muitas pessoas preferem usar diretamente o IPTables ou o NFTables para configurar suas regras de filtragem de pacotes, e isso é ótimo. Porém, ambas as ferramentas exigem conhecimento mais avançado para a configuração das regras.

O IPTables é so software tradicionalmente conhecido no mundo Linux para a configuração de firewall. No entanto, desde 2014, um novo firewall tem sido desenvolvido para o kernel do Linux: NFTables.

Segundo os desenvolvedores, o NFTables é o sucessor do IPTables, e tem como diferencial uma classificação de pacotes muito mais flexível, escalável e otimizada. Além disso, ele permite o desenvolvimento de novos recursos de forma mais simples que seu antecessor.

De uma forma bem genérica, tanto o IPTables como o NFTables utilizam os recursos do NETFilter, que oferece, essencialmente, um conjunto de hooks (ganchos) com os quais softwares como o IPTables e NFTables podem "conectar-se" ao kernel e executarem a filtragem de pacotes de rede de acordo com as regras configuradas.

Como configurar regras diretamente usando o IPTables, ou mesmo o NFTables, pode ser um pouco complexo, surgiram ferramentas de mais alto nível que possuem recursos que tornam mais fácil a configuraçãom de regras de filtragem, principalmente as usadas mais comumente. Surgiram então ferramentas como o UFW e o FirewallD. Algumas destas ferramentas, como FirewallD, permitem a escolha de qual firewall utilizar: IPTables ou NFTables.

Por quê usar FirewallD?

No meu caso, a resposta é a mais simples possível: o FirewallD é padrão nos sistemas Red Hat e derivados, como o CentOS, então achei que poderia ser interessante usá-lo um pouco.

Finalmente, mãos à obra

Nas minhas pesquisas, descobri vários relatos de que os pacotes do FirewallD e do IPTables no Debian têm problemas de relacionamento. Segundo as informações que encontrei, a melhor opção é usar as versões destes pacotes do repositório backports do Debian. Nos exemplos a seguir, descrevo como fiz para substituir estes pacotes pelas versões do backports e aproveitei para, ao invéz de usar o IPTables, instalei o NFTables.

Repositório backports

A primeira coisa a fazer é adicionar o repositório backports na lista de repositórios do APT: edite /etc/apt/sources.list e adicione a seguinte linha (caso ela ainda não exista):

deb http://deb.debian.org/debian/ buster-backports main contrib non-free

Atualize a lista de pacotes:

sudo apt update

Remova os pacotes antigos

Sempre que possível, removo os pacotes antes de instalar uma versão atualizada:

sudo apt purge firewalld iptables

Instalando e configurando o básico

A instalação é quase direta:

sudo apt -t buster-backports install nftables
sudo apt -t buster-backports install firewalld

Para configurar o FirewallD para usar o NFTables, edite o arquivo /etc/firewalld/firewalld.conf e altere o parâmetro FirewallBackend da seguinte forma:

FirewallBackend=nftables

Salve o arquivo e reinicie o sistema. Para ser sincero, não acho que seja necessário reiniciar o sistema, bastaria remover as envetuais regras de firewall existentes, porém, como troquei o firewall padrão IPTables pelo NFTables e estes softwares est6ão intimamente relacionados com o kernel, prefiro reiniciar para ver como se comportam.

De qualquer forma, se você preferir apenas remover as regras vigentes, tente os seguintes comandos (IPTables):

sudo iptables -F
sudo iptables -X
sudo iptables -nL

O último comando lista as regras existentes. Remova-as, caso necessário. Se o sistema já usar o NFTables, então os comandos para remover as regras e listar o que sobrou são os seguintes:

sudo nft flush ruleset
sudo nft list ruleset

Inicie o FirewallD

Para reiniciar o FirewallD:

sudo systemctl start firewalld.service

Verifique se tudo correu bem:

sudo systemctl status firewalld.service

E agora?

O escopo deste post era apresentar como instalar o FirewallD no Debian 10. A configuração das regras de firewall dependem do uso do servidor. De qualquer forma, ao ser iniciado, por padrão, o FirewallD adiciona as regras (no IPTables o no NFTables, como é o nosso caso) de forma que todas as portas de acesso externo sejam bloqueadas. Ou seja, por padrão, nenhum serviço existente no sistema será acessível externamente.

Para liberar um serviço, digamos o HTTP (serviço web), primeiro adicionamos o serviço no firewall de forma permanente e, depois, forçamos o FirewallD a recarregar as regras:

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

Com estes comandos, o serviço web instalado no servidor poderá ser acessível externamente.

Simples, não é mesmo? Mas o FirewallD possui muitos recursos interssantes. eu só conheço o básico, mas, se você gostar dele, vale a pena dar uma olhada na documentação existente na Internet.

Fui.