filtro de pacotes nftables versão 1.0.7

Foi publicado o lançamento do filtro de pacotes nftables 1.0.7, 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:

  • Para sistemas que executam o kernel Linux 6.2+, foi adicionado suporte para mapeamentos de protocolo vxlan, geneve, gre e gretap, permitindo expressões simples para verificar cabeçalhos em pacotes encapsulados. Por exemplo, para verificar o endereço IP no cabeçalho de um pacote aninhado do VxLAN, agora você pode usar as regras (sem a necessidade de primeiro desencapsular o cabeçalho VxLAN e vincular o filtro à interface vxlan0): ... udp dport 4789 protocolo ip vxlan udp ... udp dport 4789 vxlan ip saddr 1.2.3.0/24 ... udp dport 4789 vxlan ip saddr . vxlan ip daddr { 1.2.3.4 . 4.3.2.1 }
  • Foi implementado suporte para fusão automática de restos após a exclusão parcial de um elemento do set-list, o que permite excluir um elemento ou parte de um intervalo de um intervalo existente (anteriormente, o intervalo só podia ser excluído completamente). Por exemplo, após remover o elemento 25 de um set list com faixas 24-30 e 40-50, a lista permanecerá 24, 26-30 e 40-50. As correções necessárias para que o automerging funcione serão oferecidas nas versões de manutenção das ramificações estáveis ​​do kernel 5.10+. # tabela de conjunto de regras de lista nft ip x { conjunto y { tipo de sinalizadores tcp dport intervalo de mesclagem automática de elementos = { 24-30, 40-50 } } } # nft excluir elemento ip xy { 25 } # tabela de conjunto de regras de lista nft ip x { conjunto y {typeof tcp dport flags intervalo elementos de mesclagem automática = {24, 26-30, 40-50 } } }
  • Permite o uso de contatos e intervalos ao mapear a tradução de endereços (NAT). tabela ip nat { prerouting de cadeia { tipo nat hook prerouting prioridade dstnat; política aceita; dnat para ip daddr. mapa tcp dport {10.1.1.136. 80: 1.1.2.69. 1024, 10.1.1.10-10.1.1.20. 8888-8889: 1.1.2.69. 2048-2049 } persistente } }
  • Adicionado suporte para a expressão “última”, que permite descobrir a hora do último uso de um elemento de regra ou lista de conjuntos. O recurso é suportado a partir do kernel Linux 5.14. tabela ip x {set y { tipo de ip daddr. tcp dport tamanho 65535 sinalizadores dinâmicos, tempo limite último tempo limite 1h } cadeia z { tipo filtro gancho filtro de prioridade de saída; política aceita; atualizar @y { ip daddr . tcp dport } } } #nft list set ip xy table ip x { set y { typeof ip daddr . tcp dport tamanho 65535 sinalizadores dinâmicos, tempo limite último tempo limite 1h elementos = {172.217.17.14. 443 último uso 1s591ms tempo limite 1h expira 59m58s409ms, 172.67.69.19 . 443 último uso 4s636ms tempo limite 1h expira 59m55s364ms, 142.250.201.72 . 443 último uso 4s748ms tempo limite 1h expira 59m55s252ms, 172.67.70.134 . 443 último uso 4s688ms tempo limite 1h expira 59m55s312ms, 35.241.9.150 . 443 último uso 5s204ms tempo limite 1h expira 59m54s796ms, 138.201.122.174 . 443 último uso 4s537ms tempo limite 1h expira 59m55s463ms, 34.160.144.191 . 443 último uso 5s205ms tempo limite 1h expira 59m54s795ms, 130.211.23.194 . 443 último uso 4s436ms tempo limite 1h expira 59m55s564ms } } }
  • Adicionada a capacidade de definir cotas em set lists. Por exemplo, para determinar a cota de tráfego para cada endereço IP de destino, você pode especificar: table netdev x { set y { typeof ip daddr size 65535 quota over 10000 mbytes } chain y { type filter hook egress device "eth0" prioridade filter; política aceita; ip daddr @y drop } } # nft add element inet xy { 8.8.8.8 } # ping -c 2 8.8.8.8 # nft lista tabela de conjunto de regras netdev x { set y { tipo ipv4_addr tamanho 65535 cota acima de 10000 mbytes elementos = { 8.8.8.8. 10000 cota acima de 196 mbytes usados ​​0 bytes } } cadeia y { tipo filtro gancho dispositivo de saída “ethXNUMX” filtro de prioridade; política aceita; ip daddr @y drop } }
  • O uso de constantes em set lists é permitido. Por exemplo, ao usar o endereço de destino e o ID da VLAN como chave da lista, você pode especificar diretamente o número da VLAN (daddr . 123): table netdev t { set s { typeof ether saddr . vlan id tamanho 2048 sinalizadores dinâmicos, tempo limite tempo limite 1m } cadeia c { tipo filtro gancho dispositivo de entrada eth0 prioridade 0; política aceita; tipo ether! = atualização 8021q @s { ether daddr. 123 } contador } }
  • Adicionado um novo comando "destruir" para excluir objetos incondicionalmente (ao contrário do comando excluir, ele não gera ENOENT ao tentar excluir um objeto ausente). Requer pelo menos o kernel Linux 6.3-rc para funcionar. destruir filtro ip da tabela

Fonte: opennet.ru

Adicionar um comentário