Versión de filtro de paquetes nftables 1.0.0

Publicouse o lanzamento do filtro de paquetes nftables 1.0.0, que unifica interfaces de filtrado de paquetes para IPv4, IPv6, ARP e pontes de rede (destinados a substituír iptables, ip6table, arptables e ebtables). Os cambios necesarios para que funcione a versión nftables 1.0.0 están incluídos no núcleo de Linux 5.13. Un cambio significativo no número de versión non está asociado a ningún cambio fundamental, senón que é só unha consecuencia da continuación consistente da numeración en notación decimal (a versión anterior era 0.9.9).

O paquete nftables inclúe compoñentes de filtro de paquetes que se executan no espazo do usuario, mentres que o traballo a nivel do núcleo é proporcionado polo subsistema nf_tables, que forma parte do núcleo de Linux desde a versión 3.13. O nivel do núcleo ofrece só unha interface xenérica independente do protocolo que proporciona funcións básicas para extraer datos de paquetes, realizar operacións de 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 novidades:

  • Engadiuse o soporte para o elemento de máscara "*" ás listas de conxuntos, que se activa para todos os paquetes que non entren noutros elementos definidos no conxunto. táboa x { lista de bloqueo de mapas { tipo ipv4_addr : elementos de intervalo de bandeiras de veredicto = { 192.168.0.0/16 : aceptar, 10.0.0.0/8 : aceptar, * : soltar } } chain y { prioridade de preenrutamento de gancho de filtro de tipo 0; política aceptar; ip saddr vmap @blocklist } }
  • É posible definir variables desde a liña de comandos usando a opción "--define". # cat test.nft table netdev x { chain y { type filter hook ingress devices = $dev prioridad 0; caída da política; } } # nft —define dev="{ eth0, eth1 }" -f test.nft
  • Nas listas de mapas, permítese o uso de expresións constantes (con estado): table inet filter { map portmap { type inet_service : veredicto elementos do contador = { 22 contadores de paquetes 0 bytes 0 : salto ssh_input, * contador de paquetes 0 bytes 0 : drop } } chain ssh_input { } chain wan_input { tcp dport vmap @portmap } chain prerouting { tipo filtro hook prerouting prioridade raw; política aceptar; iif vmap { "lo": salto wan_input } } }
  • Engadiuse o comando "list hooks" para mostrar unha lista de controladores para unha familia de paquetes determinada: # nft list hooks ip device eth0 family ip { hook ingress { +0000000010 chain netdev xy [nf_tables] +0000000300 chain inet mw [nf_tables] } hook input { -0000000100 chain ip ab [nf_tables] +0000000300 chain inet mz [nf_tables] } enganche cara a adiante { -0000000225 selinux_ipv4_forward 0000000000 chain ip ac [nf_tables] saída {0000000225_4} hooklin 0000000225 selinux } enganchar postroute { +4 XNUMX selinux_ipvXNUMX_postroute } }
  • Os bloques de filas permiten combinar expresións jhash, symhash e numgen para distribuír paquetes nas filas do espazo do usuario. … cola para symhash mod 65536 … marcas de cola ignorar para numgen inc mod 65536 … cola para jhash oif . meta mark mod 32 "queue" tamén se pode combinar con listas de mapas para seleccionar unha cola no espazo do usuario baseada en claves arbitrarias. ... as bandeiras da cola ignoran o mapa de nome oif { "eth0" : 0, "ppp0" : 2, "eth1" : 2 }
  • É posible expandir variables que inclúen unha lista de conxuntos en varios mapas. define interfaces = { eth0, eth1 } table ip x { chain y { type filter hook priority input 0; política aceptar; iifname vmap { lo : aceptar, $ interfaces : soltar } } } # nft -f x.nft # nft list rulesset table ip x { chain y { type filter hook priority input 0; política aceptar; iifname vmap { "lo": aceptar, "eth0": soltar, "eth1": soltar } } }
  • Permítese combinar vmaps (mapa de veredictos) a intervalos: # nft add rule xy tcp dport . ip saddr vmap {1025-65535. 192.168.10.2 : aceptar }
  • Sintaxe simplificada para mapeamentos NAT. Permítese especificar intervalos de enderezos: ... snat to ip saddr map { 10.141.11.4 : 192.168.2.2-192.168.2.4 } ou enderezos IP e portos explícitos: ... dnat to ip saddr map { 10.141.11.4 : 192.168.2.3. . 80 } ou combinacións de intervalos de IP e portos: ... dnat to ip saddr . tcp dport map { 192.168.1.2 . 80: 10.141.10.2-10.141.10.5. 8888-8999 }

Fonte: opennet.ru

Engadir un comentario