# Nftables

nftables é um subsistema do kernel Linux que fornece filtragem e classificação de pacotes de rede /datagramas/quadros. Ele está disponível desde o kernel Linux 3.13 lançado em 19 de janeiro de 2014.
nftables substitui as partes legadas do iptables do Netfilter. Entre as vantagens do nftables sobre o iptables está menos duplicação de código e extensão mais fácil para novos protocolos. nftables é configurado por meio do utilitário de espaço do usuário nft, enquanto as ferramentas legadas são configuradas por meio dos utilitários iptables, ip6tables, arptables e ebtables frameworks.
O nftables utiliza os blocos de construção da infraestrutura do Netfilter, como os ganchos existentes na pilha de rede, sistema de rastreamento de conexão, componente de enfileiramento de espaço de usuário e subsistema de registro.

## nft
### Sintaxe da linha de comando

Um comando para descartar qualquer pacote com endereço IP de destino 1.2.3.4:
Observe que a nova sintaxe difere significativamente daquela do iptables, em que a mesma regra seria escrita:
A nova sintaxe pode parecer mais detalhada, mas também é muito mais flexível. O nftables incorpora estruturas de dados avançadas como dicionários, mapas e concatenações que não existem no iptables. Fazer uso deles pode reduzir significativamente o número de cadeias e regras necessárias para expressar um determinado projeto de filtragem de pacotes.
A ferramenta iptables-translate pode ser usada para traduzir muitas regras iptables existentes para regras nftables equivalentes. Debian 10 (Buster), entre outras distribuições Linux, usa nftables junto com iptables-translate como o backend de filtragem de pacotes padrão.

## História

O projeto foi apresentado publicamente pela primeira vez no Netfilter Workshop 2008 por Patrick McHardy da Netfilter Core Team. A primeira versão prévia da implementação do kernel e do espaço do usuário foi dada em março de 2009. Embora a ferramenta tenha sido chamada de "a maior mudança no firewall do Linux desde a introdução do iptables em 2001", ela recebeu pouca atenção da imprensa. O notável hacker Fyodor Vaskovich (Gordon Lyon) disse que está "ansioso por seu lançamento geral no kernel Linux mainstream".
O projeto ficou em fase alfa, e o site oficial foi removido em 2009. Em março de 2010, e-mails do autor nas listas de discussão do projeto mostraram que o projeto ainda estava ativo e se aproximando de uma versão beta, mas esta nunca foi enviada oficialmente. Em outubro de 2012, Pablo Neira Ayuso propôs uma camada de compatibilidade para o iptables e anunciou uma possível inclusão do projeto no kernel principal.
Em 16 de outubro de 2013, Pablo Neira Ayuso enviou uma solicitação de pull do núcleo nftables para a árvore principal do kernel Linux. Ele foi incorporado à linha principal do kernel em 19 de janeiro de 2014, com o lançamento do kernel Linux versão 3.13.

## Visão geral

O mecanismo do kernel nftables adiciona uma máquina virtual simples ao kernel do Linux, que é capaz de executar bytecode para inspecionar um pacote de rede e tomar decisões sobre como esse pacote deve ser tratado. As operações implementadas por esta máquina virtual são intencionalmente tornadas básicas. Ele pode obter dados do próprio pacote, dar uma olhada nos metadados associados (interface de entrada, por exemplo) e gerenciar dados de rastreamento de conexão. Operadores aritméticos, bit a bit e de comparação podem ser usados para tomar decisões com base nesses dados. A máquina virtual também é capaz de manipular conjuntos de dados (normalmente, endereços IP), permitindo que várias operações de comparação sejam substituídas por uma única pesquisa de conjunto.
A organização descrita acima é contrária ao código de firewall do iptables, que tem reconhecimento de protocolo embutido tão profundamente na lógica que o código teve que ser replicado quatro vezes — para IPv4, IPv6, ARP e Ethernet bridging — como o firewall os mecanismos são muito específicos do protocolo para serem usados de maneira genérica.
As principais vantagens do nftables sobre o iptables são a simplificação da ABI do kernel Linux, redução da duplicação de código, relatório de erros aprimorado e execução mais eficiente, armazenamento e alterações incrementais das regras de filtragem. Tradicionais comandos como iptables, ip6tables, arptables, e ebtables( Para IPV4, IPV6, ARP e Ethernet Bridgining respectivamente), foram substituídos pelo nft através de um comando único, provendo configurações do firewall em alto nível dentro dentro do kernel do Linux.
O nftables também oferece uma API de espaço de usuário aprimorada que permite substituições atômicas de uma ou mais regras de firewall em uma única transação Netlink. Isso acelera as alterações de configuração do firewall para configurações com grandes conjuntos de regras; também pode ajudar a evitar condições de corrida enquanto as mudanças de regra estão sendo executadas. nftables também inclui recursos de compatibilidade para facilitar a transição de firewalls anteriores, utilitários de linha de comando para converter regras no formato iptables, e versões compatíveis com sintaxe de comandos iptables que usam o backend nftables.