Versión de filtro de paquetes nftables 0.9.9

Publicouse o lanzamento do filtro de paquetes nftables 0.9.9, que unifica interfaces de filtrado de paquetes para IPv4, IPv6, ARP e pontes de rede (destinados a substituír iptables, ip6table, arptables e ebtables). Ao mesmo tempo, publicouse o lanzamento da biblioteca complementaria libnftnl 1.2.0, que proporciona unha API de baixo nivel para interactuar co subsistema nf_tables. Os cambios necesarios para que funcione a versión nftables 0.9.9 están incluídos no núcleo de Linux 5.13-rc1.

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:

  • Implementouse a capacidade de mover o procesamento da táboa de fluxo ao lado do adaptador de rede, habilitada mediante a marca de descarga. Flowtable é un mecanismo para optimizar a ruta de redirección de paquetes, no cal o paso completo de todas as cadeas de procesamento de regras aplícase só ao primeiro paquete e todos os demais paquetes do fluxo envíanse directamente. table ip global { flowtable f { filtro de prioridade de entrada de gancho + 1 dispositivos = { lan3, lan0, wan } flags offload } chain forward { tipo de filtro hook forward filtro de prioridade; política aceptar; protocolo ip { tcp, udp } flow add @f } chain post { type nat hook postrouting priority filter; política aceptar; oifname "wan" mascarada } }
  • Engadiuse compatibilidade para engadir unha marca de propietario a unha táboa para garantir o uso exclusivo da táboa por parte dun proceso. Cando un proceso finaliza, a táboa asociada a el elimínase automaticamente. A información sobre o proceso móstrase no volcado de regras en forma de comentario: table ip x { # progname nft flags owner chain y { type filter hook input priority filter; política aceptar; contador de paquetes 1 bytes 309 } }
  • Engadido soporte para a especificación IEEE 802.1ad (VLAN stacking ou QinQ), que define un medio para substituír varias etiquetas VLAN nunha única trama Ethernet. Por exemplo, para comprobar o tipo de trama Ethernet externa 8021ad e vlan id=342, pode usar a construción ... ether type 802.1ad vlan id 342 para comprobar o tipo externo de trama Ethernet 8021ad/vlan id=1, anidada 802.1 q/vlan id=2 e máis encapsulación de paquetes IP: ... tipo de éter 8021ad vlan id 1 vlan type 8021q vlan id 2 vlan type contador de ip
  • Engadido soporte para xestionar recursos mediante a xerarquía unificada cgroups v2. A diferenza fundamental entre cgroups v2 e v1 é o uso dunha xerarquía común de cgroups para todos os tipos de recursos, en lugar de xerarquías separadas para asignar recursos da CPU, para regular o consumo de memoria e para E/S. Por exemplo, para comprobar se o devanceiro dun socket no primeiro nivel cgroupv2 coincide coa máscara "system.slice", pode usar a construción: ... socket cgroupv2 nivel 1 "system.slice"
  • Engadida a posibilidade de comprobar os compoñentes dos paquetes SCTP (a funcionalidade necesaria para iso aparecerá no núcleo Linux 5.14). Por exemplo, para comprobar se un paquete contén un fragmento co tipo 'data' e campo 'type': ... sctp chunk data exists ... sctp chunk data type 0
  • A execución da operación de carga de regras acelerouse aproximadamente dúas veces usando a marca "-f". Tamén se acelerou a saída da lista de regras.
  • Proporciona un formulario compacto para comprobar se os bits de bandeira están definidos. Por exemplo, para comprobar que os bits de estado snat e dnat non están definidos, pode especificar: ... ct status ! snat,dnat para comprobar que o bit syn está definido na máscara de bits syn,ack: ... tcp marca syn / syn,ack para comprobar que os bits fin e os primeiros non están configurados na máscara de bits syn,ack,fin,rst: ... tcp flags ! = fin,rst / syn,ack,fin,rst
  • Permitir a palabra clave "veredicto" nas definicións do tipo de conxunto/mapa: add map xm { typeof iifname . protocolo ip th dport: veredicto ;}

Fonte: opennet.ru

Engadir un comentario