filtro de pacotes nftables versão 0.9.9

Foi publicado o lançamento do filtro de pacotes nftables 0.9.9, unificando interfaces de filtragem de pacotes para IPv4, IPv6, ARP e pontes de rede (visando substituir iptables, ip6table, arptables e ebtables). Ao mesmo tempo, foi publicado o lançamento da biblioteca complementar libnftnl 1.2.0, que fornece uma API de baixo nível para interagir com o subsistema nf_tables. As alterações necessárias para que a versão 0.9.9 do nftables funcione estão incluídas no kernel Linux 5.13-rc1.

O pacote nftables inclui componentes de filtro de pacotes que são executados no espaço do usuário, enquanto o trabalho no nível do kernel é fornecido pelo subsistema nf_tables, que faz parte do kernel Linux desde a versão 3.13. O nível do kernel fornece apenas uma interface genérica independente de protocolo que fornece funções básicas para extrair dados de pacotes, realizar operações de dados e controlar o fluxo.

As regras de filtragem e manipuladores específicos do protocolo são compilados em bytecode no espaço do usuário, após o qual esse bytecode é carregado no kernel usando a interface Netlink e executado no kernel em uma máquina virtual especial que lembra BPF (Berkeley Packet Filters). Essa abordagem permite reduzir significativamente o tamanho do código de filtragem em execução no nível do kernel e mover todas as funções de análise de regras e lógica para trabalhar com protocolos para o espaço do usuário.

Principais inovações:

  • A capacidade de mover o processamento da tabela de fluxo para o lado do adaptador de rede foi implementada, habilitada usando o sinalizador 'offload'. Flowtable é um mecanismo de otimização do caminho de redirecionamento de pacotes, no qual a passagem completa de todas as cadeias de processamento de regras é aplicada apenas ao primeiro pacote, e todos os demais pacotes do fluxo são encaminhados diretamente. tabela ip global { flowtable f { filtro de prioridade de entrada de gancho + 1 dispositivos = { lan3, lan0, wan } sinaliza descarregamento } encadeamento de cadeia { tipo filtro filtro de prioridade de encaminhamento de gancho; política aceita; protocolo ip { tcp, udp } flow add @f } chain post { tipo nat hook postrouting prioridade filtro; política aceita; oifname "wan" mascarada } }
  • Adicionado suporte para anexar um sinalizador de proprietário a uma tabela para garantir o uso exclusivo da tabela por um processo. Quando um processo termina, a tabela associada a ele é automaticamente excluída. As informações sobre o processo são exibidas no dump de regras na forma de um comentário: table ip x { # progname nft flags proprietário chain y { type filter hook input prioridade filter; política aceita; contador pacotes 1 bytes 309 } }
  • Adicionado suporte para a especificação IEEE 802.1ad (empilhamento de VLAN ou QinQ), que define um meio para substituir várias tags VLAN em um único quadro Ethernet. Por exemplo, para verificar o tipo de quadro Ethernet externo 8021ad e vlan id=342, você pode usar a construção ... ether type 802.1ad vlan id 342 para verificar o tipo externo de quadro Ethernet 8021ad/vlan id=1, aninhado 802.1 q/vlan id=2 e mais encapsulamento de pacote IP: ... tipo ether 8021ad vlan id 1 tipo vlan 8021q vlan id 2 tipo vlan contador de ip
  • Adicionado suporte para gerenciamento de recursos usando a hierarquia unificada cgroups v2. A principal diferença entre cgroups v2 e v1 é o uso de uma hierarquia comum de cgroups para todos os tipos de recursos, em vez de hierarquias separadas para alocar recursos de CPU, para regular o consumo de memória e para E/S. Por exemplo, para verificar se o ancestral de um soquete no primeiro nível cgroupv2 corresponde à máscara “system.slice”, você pode usar a construção: ... soquete cgroupv2 nível 1 “system.slice”
  • Adicionada a capacidade de verificar componentes de pacotes SCTP (a funcionalidade necessária para isso aparecerá no kernel Linux 5.14). Por exemplo, para verificar se um pacote contém um pedaço com tipo 'dados' e campo 'tipo': ... dados do pedaço sctp existem ... tipo de dados do pedaço sctp 0
  • A execução da operação de carregamento de regras foi acelerada aproximadamente duas vezes usando o sinalizador “-f”. A produção da lista de regras também foi acelerada.
  • É fornecido um formato compacto para verificar se os bits de sinalização estão definidos. Por exemplo, para verificar se os bits de status snat e dnat não estão definidos, você pode especificar: ... ct status ! snat,dnat para verificar se o bit syn está definido na máscara de bits syn,ack: ... tcp sinaliza syn / syn,ack para verificar se os bits fin e rst não estão definidos na máscara de bits syn,ack,fin,rst: ... sinalizadores tcp!= fin,rst / syn,ack,fin,rst
  • Permita a palavra-chave "veredicto" nas definições de set/map typeof: add map xm { typeof iifname . protocolo IP th dport: veredicto;}

Fonte: opennet.ru

Adicionar um comentário