Versión de filtro de paquetes nftables 1.0.6

Publicouse a versión de filtro de paquetes nftables 1.0.6, que unifica interfaces de filtrado de paquetes para IPv4, IPv6, ARP e pontes de rede (destinadas a substituír iptables, ip6table, arptables e ebtables). O paquete nftables inclúe compoñentes de filtro de paquetes que se executan no espazo do usuario, mentres que o nivel do núcleo é proporcionado polo subsistema nf_tables, que forma parte do núcleo de Linux desde a versión 3.13. A nivel do núcleo, só se proporciona unha interface xenérica independente do protocolo que proporciona funcións básicas para extraer datos de paquetes, realizar operacións sobre datos e controlar o fluxo.

As propias regras de filtrado e os controladores específicos do protocolo compílanse nun bytecode de espazo de usuario, despois de que este bytecode cárgase no núcleo mediante a interface Netlink e execútase no núcleo nunha máquina virtual especial que se asemella a BPF (Berkeley Packet Filters). Este enfoque fai posible reducir significativamente o tamaño do código de filtrado que se executa a nivel do núcleo e mover todas as funcións das regras de análise e a lóxica de traballar con protocolos ao espazo do usuario.

Principais cambios:

  • No optimizador de regras chamado ao especificar a opción "-o/--optimize", configurouse o empaquetado automático de regras combinándoas e converténdoas en listas de mapas e de conxuntos. Por exemplo, as regras son # cat ruleset.nft table ip x { chain y { type filter hook input priority filter; caída da política; meta iifname eth1 ip saddr 1.1.1.1 ip daddr 2.2.2.3 aceptar meta iifname eth1 ip saddr 1.1.1.2 ip daddr 2.2.2.4 aceptar meta iifname eth1 ip saddr 1.1.1.2 ip meta daddr 2.2.3.0/24 eth1 ip daddr 1.1.1.2/2.2.4.0 eth .2.2.4.10 ip daddr 2-1.1.1.3 aceptar meta iifname eth2.2.2.5 ip saddr 4 ip daddr 17 aceptar } } despois de "nft -o -c -f ruleset.nft" converterase ao seguinte: conxunto de regras. nft:74:1-1.1.1.1: meta iifname eth2.2.2.3 ip saddr 5 ip daddr 17 aceptar ruleset.nft:74:1-1.1.1.2: meta iifname eth2.2.2.4 ip saddr 6 ip daddr 17 aceptar ruleset.nft: 77:1-1.1.1.2: meta iifname eth2.2.3.0 ip saddr 24 ip daddr 7/17 aceptar ruleset.nft:83:1-1.1.1.2: meta iifname eth2.2.4.0 ip saddr 2.2.4.10 ip daddr 8-17 aceptar ruleset.nft:74:2-1.1.1.3: meta iifname eth2.2.2.5 ip saddr 1 ip daddr 1.1.1.1 aceptar en: iifname . ip saddr. ip daddr { eth2.2.2.3 . 1. 1.1.1.2, eth2.2.2.4. 1. 1.1.1.2, eth2.2.3.0. 24. 1/1.1.1.2, eth2.2.4.0. 2.2.4.10. 2-1.1.1.3, eth2.2.2.5. XNUMX. XNUMX } aceptar
  • O optimizador tamén pode condensar regras que xa usan setlists simples nunha forma máis compacta, como: # cat ruleset.nft table ip filter { chain input { type filter hook input filter priority; caída da política; iifname "lo" aceptar o estado de CT establecido, relacionado aceptar comentarios "no tráfico que orixinamos, confiamos en" iifname "enp0s31f6" ip saddr {209.115.181.102, 216.197.228.230} ip daddr 10.0.0.149 UDP Sport 123-32768 iifname "enp65535s0f31" ip saddr { 6, 64.59.144.17 } ip daddr 64.59.150.133 udp sport 10.0.0.149 udp dport 53-32768 aceptar } } } despois de executar "nf" as regras -et. : ruleset.nft:65535:6-22: iifname "enp149s0f31" ip saddr { 6, 209.115.181.102 } ip daddr 216.197.228.230 udp sport 10.0.0.149 udp sport 123 udp-dport: 32768 udp: 65535 udp-dport: 7 reglas: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 aceptar en: iifname . ip saddr. ip daddr. deporte udp. udp dport {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 } aceptar
  • Resolveuse un problema coa xeración de código de bytes para combinar intervalos que usan tipos con diferentes endianidades, como IPv4 (endian de rede) e metamarca (endian do sistema). table ip x { map w { typeof ip saddr . meta mark: o veredicto marca os elementos do contador de intervalos = {127.0.0.1-127.0.0.4. 0x123434-0xb00122 : aceptar, 192.168.0.10-192.168.1.20 . 0x0000aa00-0x0000aaff : aceptar, } } cadea k { tipo de filtro filtro de prioridade de entrada de gancho; caída da política; ip saddr. meta mark vmap @w } }
  • As asignacións de protocolos raras melloradas ao usar expresións en bruto, por exemplo: meta l4proto 91 @th,400,16 0x0 accept
  • Solucionáronse problemas coa habilitación das regras a intervalos: inserir regra xy tcp sport { 3478-3497, 16384-16387 } counter accept
  • A API JSON mellorouse para admitir expresións en listas de conxuntos e mapas.
  • Nas extensións da biblioteca nftables python, permítese cargar conxuntos de regras para procesar en modo de verificación ("-c") e engadiuse soporte para a definición de variables externas.
  • Permítese engadir comentarios nos elementos das listas de conxuntos.
  • Permítese especificar un valor cero en byte ratelimit.

Fonte: opennet.ru

Engadir un comentario