Foi lançado o filtro de pacotes nftables 1.0.1, unificando as interfaces de filtragem de pacotes para IPv4, IPv6, ARP e pontes de rede (destinado a substituir iptables, ip6tables, arptables e ebtables). As mudanças necessárias para o funcionamento do lançamento do nftables 1.0.1 estão incluídas no núcleo Linux 5.16-rc1.
O pacote nftables inclui componentes do filtro de pacotes que operam no espaço do usuário, enquanto a funcionalidade no nível do núcleo é assegurada pelo subsistema nf_tables, que faz parte do núcleo do Linux a partir da versão 3.13. No nível do núcleo, é fornecida apenas uma interface geral, independente de protocolo específico, que oferece funções básicas para a extração de dados de pacotes, execução de operações sobre dados e controle de fluxo.
As regras de filtragem e os manipuladores específicos de protocolos são compilados em bytecode no espaço do usuário, após o que esse bytecode é carregado no núcleo por meio da interface Netlink e executado no núcleo em uma máquina virtual, semelhante ao BPF (Berkeley Packet Filters). Essa abordagem permite reduzir significativamente o tamanho do código de filtragem que opera no nível do núcleo e deslocar todas as funções de análise de regras e lógica de operação com protocolos para o espaço do usuário.
Principais novidades:
- Reduzido o consumo de memória ao carregar grandes listas set e map.
- Aumentada a velocidade de reinicialização das listas set e map.
- Aumentada a velocidade de saída de tabelas e cadeias favoritas em grandes conjuntos de regras. Por exemplo, o tempo de execução do comando "nft list ruleset" para exibir um conjunto de regras com 100 mil linhas é de 3,049 segundos, enquanto a saída apenas das tabelas nat e filter ("nft list table nat", "nft list table filter") é reduzida para 1,969 e 0,697 segundos.
- Aumentada a velocidade de execução de consultas com a opção "--terse" ao processar regras com grandes listas set e map.
- Foi fornecida a possibilidade de filtrar tráfego da cadeia "egress", processada no mesmo nível que o manipulador egress na cadeia netdev (gancho egress), ou seja, na fase em que o driver recebe o pacote do stack de rede do núcleo. table netdev filter { chain egress { type filter hook egress devices = { eth0, eth1 } priority 0; meta priority set ip saddr map { 192.168.10.2 : abcd:2, 192.168.10.3 : abcd:3 } } }
- Permitido o mapeamento e a modificação de bytes no cabeçalho e no conteúdo do pacote em um deslocamento especificado. # nft add rule x y @ih,32,32 0x14000000 counter # nft add rule x y @ih,32,32 set 0x14000000 counter
Fonte: opennet.ru
