Está gostando da série de publicações sobre as principais soluções de firewall do Linux? Bacana! Agora, retomando os assuntos recentemente abordados, como Uncomplicated Firewall e Firewalld, desta vez abordarei em mais detalhes o excelente nftables.
Diferentemente das aplicações que destrinchamos nos posts anteriores, o nftables não “pertence” a uma linha de sistemas operacionais. Pelo contrário: trata-se de um firewall compatível e adequado a qualquer plataforma da família Linux — o que chamamos “universal”.
Seguindo a linha dos conteúdos relacionados, aqui você aprenderá:
- o que é nftables;
- a como instalá-lo no Linux;
- a configurá-lo (a partir de exemplos práticos); e
- a fazer a migração do iptables.
Pronto para a lição de hoje? Prepare o seu laboratório Linux e vamos ao conteúdo!
O que é o nftables?
Reiterando o que foi dito em outra ocasião, o nftables é um framework baseado no iptables e que foi desenvolvido como uma verdadeira otimização deste. Na prática o que isso significa?
Primeiramente que estamos falando de um firewall universal, isto é, pode ser utilizado em qualquer distribuição do Linux. Inclusive, se a versão do kernel é mais recente, por padrão, ele já dispõe dos módulos do nftables — que são os mesmos do iptables.
Tratando-se de uma versão aprimorada e menos complexa do clássico iptables, não há dúvidas quanto a este ser um firewall de altíssimo nível e, evidentemente, uma excelente alternativa para blindar uma rede de computadores. Ela fornece todos os recursos avançados, porém otimizados para ambientes modernos.
Quais são as diferenças mais significativas entre as duas ferramentas? Esse “remake” apresenta elementos novos? Como o assunto merece spoilers, vamos a uma breve exploração de alguns aspectos do iptables que foram aperfeiçoados.
Contrastes entre nftables e iptables
Com apenas cinco anos desde o seu lançamento no kenel Linux, o nftables foi desenvolvido para ser uma evolução “natural” do iptables. Logo, muitos dos recursos do iptables estão presentes nessa solução, mas com importantes avanços em relação à sintaxe.
Falando em sintaxe, a ideia dos desenvolvedores do nftables em criar os comandos baseados no tcpdump trouxe a este firewall um diferencial e tanto, visto que simplificou bastante as instruções — agora mais intuitivas e fáceis de aprender.
Ao compararmos com o antecessor, o nftables se destaca ao trabalhar com linhas de comando enxutas, as quais não levam a repetições recorrentes. Fora isso, o nftables permite a aplicação de scripts para tornar os comandos ainda mais precisos.
No que mais o nftables se difere além da sintaxe? Respsota: a facilidade para identificar a raiz do problema. Isso se deve ao modo de exibição das configurações em árvores multidimensionais, um tipo estrutura de dados (apresentados em XML ou JSON, nesse caso) que facilita a análise e a interpretação.
Bom, as vantagens do nftables não acabam por aqui. Eu ainda poderia falar sobre as opções de ações, regras e protocolos combinados, bem como a possibilidade de adicionar somente as tabelas das quais necessita.
Portanto, ainda que esteja começando a pegar o jeito com o iptables, convém adaptar-se às novidades do seu sucessor. Entendido? Então vamos aprender a instalar o nftables no Linux.
Como instalar o nftables no Linux?
Neste tópico, aprenderemos a fazer a instalação do nftables usando como exemplo o procedimento no Debian. Assim sendo, as instruções são válidas para quem utiliza, também, distros como Ubuntu, Mint, Elementary etc.
Por onde começar? A primeira etapa é garantir que todas as dependências do nftables estejam instaladas (a lista se encontra neste link). Para deixar o processo mais ágil a fácil, digite:
sudo apt update
sudo apt install automake bison debhelper dh-autoreconf dh-systemd docbook2x flex libgmp-dev libmnl-dev libnftnl-dev libreadline-dev libxtables-dev libtool asciidoc
sudo apt install nftables
Agora, faremos o download de um item opcional, porém muito útil para esta e futuras instalações: o comando git (desenvolvido pelo pessoal do GitHub). Digite:
sudo apt install git
Concluída a instalação do git, prossiga com a seguinte sequência de comandos:
sudo git clone git://git.netfilter.org/nftables
cd nftables
sudo sh autogen.sh
sudo ./configure
Confirme a instalação digitando apenas o comando nft. Se o terminal retornar a mensagem “nft: no command specified” é porque o nftables está funcionando corretamente.
Legal, deu certo! Mas e se eu quiser desinstalar o firewall? Basta digitar sudo apt remove nftables ou sudo apt remove –auto-remove nftables para removê-lo com as dependências.
O que fazer para migrar do iptables para o nftables?
Imaginemos a seguinte situação. O usuário pretende instalar o nftables, porém ele dedicou muito tempo e esforços para aprender a configurar o iptables e, por meio dele, conseguiu estabelecer um conjunto de regras do qual não deseja abrir mão.
Outro cenário: você é contratado para auxiliar na administração dos sistemas de uma empresa. Logo de início, a sua missão é implementar o nftables nos servidores sem que as regras sejam modificadas. Como resolver essa questão?
Felizmente, a tarefa não é tão complicada quanto parece. Em ambos os casos, pode-se utilizar a opção translate para traduzir um comando — ou mesmo um conjunto de comandos — do iptables para a sintaxe nftables.
Vamos a uma demonstração retirada do site oficial, começando pela tradução de comandos individuais:
sudo iptables-translate -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT
nft add rule ip filter INPUT tcp dport 22 ct state new counter accept
sudo ip6tables-translate -A FORWARD -i eth0 -o eth3 -p udp -m multiport --dports 111,222 -j ACCEPT
nft add rule ip6 filter FORWARD ifname eth0 oifname eth3 meta l4proto udp udp dport { 111,222} counter accept
Agora, um exemplo de como traduzir um conjunto de comandos:
iptables-save > save.txt
cat save.txt
#Generated by iptables-save v.1.6.0 on Tue Apr 30 11:25:30 2019 *filter :INPUT ACCEPT [5166:1752111] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [5058:628693] -A FORWARD -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT COMMIT # Completed on Tue Apr 30 11:26:08 2019 Em outras palavras, não há segredo. Se você está acostumado com o iptables, a adaptação ao nftables tende a ser tranquila quando usa-se o tradutor, pois o próprio firewall atua como um guia.
Três exemplos de uso do nftables
A essa altura o nftables já está rodando em sua máquina, certo? Então, completando a aula apresentada no presente artigo, vejamos alguns exemplos de utilização e configuração do nftables.
Adicionar regra a uma rede
Começando por um exemplo que elucida a simplicidade da sintaxe do nftables, vejamos, abaixo, como adicionar uma regra para abrir a porta correspondente ao Secure Shell.
sudo nft add rule inet filter input tcp dport 22 ct state new accept
Deletar regras
Supondo que um conjunto de regras tenha de vigorar temporariamente ou, simplesmente, não tenha surtido o efeito esperado, é possível removê-lo facilmente. Exemplos:
nft delete rule filter output
Mas e se a ideia é deletar uma única regra? Utilize a opção -a para adquirir o handle number a ser usado como referência à regra. Exemplo:
nft list table filter -a table filter { chain output { ip filter output ip daddr 1.2.3.4 countet drop # handle 7
Agora que temos o handle number (7), digite:
nft delete rule filter output handle 7
Configurar registros log
Trabalhar com registros por meio de arquivos log é essencial para o bom monitoramento de rede. Para fazer isso no nftables, baseie-se no exemplo a seguir.
nft add rule filtes input tcp dport 22 ct state new log prefix \"registro SSH''\ group 2 accept
Acima, simulamos um ajuste no firewall para que as atividades do servidor SSH (OpenSSH, por exemplo) sejam registradas.
Concluindo, acredito que os poucos exemplos tenham sido suficientes para elucidá-lo do potencial que tem o nftables, estou certo? Se a sua intenção é aprofundar-se no assunto, considere o domínio desse firewall um requisito para uma carreira de sucesso na área de Segurança da Informação.
Não sabe o melhor caminho para se especializar em Linux? Então sinta-se convidado a conhecer agora mesmo a página Profissionais Linux!