filtro de pacotes nftables versão 1.0.6

Foi publicado o lançamento do filtro de pacotes nftables 1.0.6, unificando interfaces de filtragem de pacotes para IPv4, IPv6, ARP e pontes de rede (visando substituir iptables, ip6table, arptables e ebtables). 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.

Grandes mudanças:

  • O otimizador de regras, chamado quando a opção “-o/—optimize” é especificada, possui empacotamento automático de regras combinando-as e convertendo-as em mapas e set lists. Por exemplo, regras # cat regraset.nft tabela ip x { cadeia y { tipo filtro gancho filtro de prioridade de entrada; queda da política; meta iifname eth1 ip saddr 1.1.1.1 ip daddr 2.2.2.3 aceitar meta iifname eth1 ip saddr 1.1.1.2 ip daddr 2.2.2.4 aceitar meta iifname eth1 ip saddr 1.1.1.2 ip daddr 2.2.3.0/24 aceitar meta iifname eth1 ip saddr 1.1.1.2 .2.2.4.0 ip daddr 2.2.4.10-2 aceitar meta iifname eth1.1.1.3 ip saddr 2.2.2.5 ip daddr 4 aceitar } } após a execução de "nft -o -c -f regraset.nft" será convertido para o seguinte: conjunto de regras .nft:17:74-1: meta iifname eth1.1.1.1 ip saddr 2.2.2.3 ip daddr 5 aceitar conjunto de regras.nft:17:74-1: meta iifname eth1.1.1.2 ip saddr 2.2.2.4 ip daddr 6 aceitar conjunto de regras.nft : 17: 77-1: meta iifname eth1.1.1.2 ip saddr 2.2.3.0 ip daddr 24/7 aceitar conjunto de regras.nft: 17: 83-1: meta iifname eth1.1.1.2 ip saddr 2.2.4.0 ip daddr 2.2.4.10-8 aceite o conjunto de regras.nft:17:74-2: meta iifname eth1.1.1.3 ip saddr 2.2.2.5 ip daddr 1 aceite em: iifname . ip saddr. ip paidr { eth1.1.1.1 . 2.2.2.3. 1, eth1.1.1.2. 2.2.2.4. 1, eth1.1.1.2. 2.2.3.0. 24/1, eth1.1.1.2 . 2.2.4.0. 2.2.4.10-2, eth1.1.1.3. 2.2.2.5. XNUMX } aceitar
  • O otimizador também pode converter regras que já usam listas de conjuntos simples em um formato mais compacto, por exemplo as regras: # cat regraset.nft table ip filter { chain input { type filter hook input prioridade filter; queda da política; iifname “lo” aceitar estado ct estabelecido, relacionado aceitar comentário “No tráfego que originamos, confiamos” iifname “enp0s31f6” ip saddr { 209.115.181.102, 216.197.228.230 } ip daddr 10.0.0.149 udp sport 123 udp dport 32768-65535 aceitar iifname "enp0s31f6" ip saddr { 64.59.144.17, 64.59.150.133 } ip daddr 10.0.0.149 udp sport 53 udp dport 32768-65535 aceitar } } após a execução de "nft -o -c -f regraset.nft" será empacotado da seguinte forma : regraset.nft:6:22-149: iifname "enp0s31f6" ip saddr {209.115.181.102, 216.197.228.230} ip daddr 10.0.0.149 udp sport 123 udp dport 32768-65535 aceitar regraset.nft:7:22- 143: iifname "enp0s31f6" ip saddr { 64.59.144.17, 64.59.150.133 } ip daddr 10.0.0.149 udp sport 53 udp dport 32768-65535 aceite em: iifname . ip saddr. ip pai. esporte udp. udp porta { enp0s31f6 . 209.115.181.102. 10.0.0.149. 123. 32768-65535, enp0s31f6. 216.197.228.230. 10.0.0.149. 123. 32768-65535, enp0s31f6. 64.59.144.17. 10.0.0.149. 53. 32768-65535, enp0s31f6. 64.59.150.133. 10.0.0.149. 53. 32768-65535 } aceitar
  • Resolvido problema com geração de bytecode para mesclar intervalos que usam tipos com ordem de bytes diferente, como IPv4 (ordem de bytes da rede) e metamarca (ordem de bytes do sistema). tabela ip x { mapa w { tipo de ip saddr. meta marca: sinalizadores de veredicto elementos do contador de intervalo = {127.0.0.1-127.0.0.4. 0x123434-0xb00122: aceitar, 192.168.0.10-192.168.1.20. 0x0000aa00-0x0000aaff: aceitar, } } cadeia k {tipo filtro gancho filtro de prioridade de entrada; queda da política; ip saddr. metamarca vmap @w } }
  • Comparação aprimorada de protocolos raros ao usar expressões brutas, por exemplo: meta l4proto 91 @th,400,16 0x0 accept
  • Problemas com habilitação de regras em intervalos foram resolvidos: inserir regra xy tcp sport {3478-3497, 16384-16387} contador aceitar
  • A API JSON foi aprimorada para incluir suporte para expressões em listas de conjuntos e mapas.
  • Extensões à biblioteca python nftables permitem o carregamento de conjuntos de regras para processamento em modo de validação ("-c") e adicionam suporte para definição externa de variáveis.
  • Adicionar comentários é permitido em elementos do set list.
  • Byte ratelimit permite especificar um valor zero.

Fonte: opennet.ru

Adicionar um comentário