Created: 2021-07-16 12:15 | Updated: 2021-09-07 20:00 |
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.
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.
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.
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.
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
Sempre que possível, removo os pacotes antes de instalar uma versão atualizada:
sudo apt purge firewalld iptables
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
Para reiniciar o FirewallD:
sudo systemctl start firewalld.service
Verifique se tudo correu bem:
sudo systemctl status firewalld.service
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.