Foi publicado o lançamento do filtragem de pacotes nftables 1.0.2, que unifica as interfaces de filtragem de pacotes para IPv4, IPv6, ARP e pontes de rede (destinado a substituir iptables, ip6table, arptables e ebtables). As alterações necessárias para o funcionamento do nftables 1.0.2 estão incluídas no núcleo do Linux 5.17-rc.
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:
- Foi adicionado o modo de otimização de regras, ativado por meio da nova opção "-o" ("--optimize"), que pode ser combinada com a opção "--check" para verificar e otimizar alterações em um arquivo de conjunto de regras sem carregá-lo efetivamente. A otimização permite agrupar regras semelhantes, por exemplo, as regras: meta iifname eth1 ip saddr 1.1.1.1 ip daddr 2.2.2.3 accept meta iifname eth1 ip saddr 1.1.1.2 ip daddr 2.2.2.5 accept ip saddr 1.1.1.1 ip daddr 2.2.2.2 accept ip saddr 2.2.2.2 ip daddr 3.3.3.3 drop
serão combinadas em meta iifname . ip saddr . ip daddr { eth1 . 1.1.1.1 . 2.2.2.3, eth1 . 1.1.1.2 . 2.2.2.5 } accept ip saddr . ip daddr vmap { 1.1.1.1 . 2.2.2.2 : accept, 2.2.2.2 . 3.3.3.3 : drop }
Exemplo de uso: # nft -c -o -f ruleset.test Mesclando: ruleset.nft:16:3-37: ip daddr 192.168.0.1 counter accept ruleset.nft:17:3-37: ip daddr 192.168.0.2 counter accept ruleset.nft:18:3-37: ip daddr 192.168.0.3 counter accept em: ip daddr { 192.168.0.1, 192.168.0.2, 192.168.0.3 } counter packets 0 bytes 0 accept
- Nas listas de conjuntos, foi implementada a possibilidade de especificar opções ip e tcp, bem como chunks sctp: set s5 { typeof ip option ra value elements = { 1, 1024 } } set s7 { typeof sctp chunk init num-inbound-streams elements = { 1, 4 } } chain c5 { ip option ra value @s5 accept } chain c7 { sctp chunk init num-inbound-streams @s7 accept }
- Adicionada suporte para opções TCP fastopen, md5sig e mptcp.
- Adicionada suporte para uso em mapeamentos do subtipo mp-tcp: tcp option mptcp subtype 1
- Melhorado o código de filtragem, operando do lado do núcleo.
- Para flowtable, foi implementado suporte total ao formato JSON.
- Foi disponibilizada a opção de usar a ação "reject" em operações de mapeamento de quadros Ethernet. ether saddr aa:bb:cc:dd:ee:ff ip daddr 192.168.0.1 reject
Fonte: opennet.ru
