Se ha publicado la versión 1.1.0 del filtro de paquetes nftables, que unifica las interfaces de filtrado de paquetes para IPv4, IPv6, ARP y puentes de red (destinada a reemplazar iptables, ip6tables, arptables y ebtables). El cambio significativo en el número de versión no está relacionado con cambios drásticos, sino que es solo el resultado de la continuación secuencial de la numeración en decimal (la versión anterior era 1.0.9). Al mismo tiempo, se ha publicado la versión 1.2.7 de la biblioteca auxiliar libnftnl, que proporciona una API de bajo nivel para interactuar con el subsistema nf_tables.
El paquete nftables incluye componentes del filtrador de paquetes que funcionan en el espacio de usuario, mientras que a nivel del núcleo, el trabajo es realizado por el subsistema nf_tables, incluido en el núcleo de Linux desde la versión 3.13. A nivel del núcleo, solo se proporciona una interfaz general, independiente del protocolo específico, que ofrece funciones básicas para extraer datos de paquetes, realizar operaciones con datos y gestionar flujos.
Las reglas de filtrado y los controladores específicos del protocolo se compilan en bytecode en el espacio de usuario, que luego se carga en el núcleo a través de la interfaz Netlink y se ejecuta en el núcleo en un espacio especial una máquina virtual, similar a BPF (Berkeley Packet Filters). Este enfoque permite reducir significativamente el tamaño del código de filtrado que opera a nivel de núcleo y trasladar todas las funciones de análisis de reglas y la lógica de trabajo con protocolos al espacio de usuario.
Principales cambios:
- Se ha añadido soporte para variables en expresiones map: define dst_map = { ::1234 : 5678 } table ip6 nat { map dst_map { typeof ip6 daddr : tcp dport; elements = $dst_map } chain prerouting { ip6 nexthdr tcp redirect to ip6 daddr map @dst_map } }
- Se ha añadido soporte para VLAN: ip saddr 10.1.1.1 icmp type echo-request vlan id set 321 # payload ether type 8021ad vlan id 10 vlan type 8021q vlan id 100 vlan type ip accept
- Para las expresiones 'log' se ha implementado un nuevo preprocesador de cadenas con soporte para variables: define message="test" log prefix "my $message"
- Al calcular el valor de la expresión 'meta hour', se ha implementado el manejo de desplazamientos negativos en la zona horaria, especificada a través de la variable de entorno TZ: TZ=UTC-4 nft add rule x y meta hour "22:00"
- Se ha asegurado la conversión del orden de los bytes al utilizar expresiones ct y meta, así como en las operaciones de fusión y especificación de rangos en conjuntos set. map mapv6 { typeof ip6 dscp : meta mark; } meta mark set ip6 dscp map @map1 se obtendrá el código de bytes: [ payload load 2b @ network header + 0 => reg 1 ] [ bitwise reg 1 = ( reg 1 & 0x0000c00f ) ^ 0x00000000 ] [ byteorder reg 1 = ntoh(reg 1, 2, 2) ] [ bitwise reg 1 = ( reg 1 > 0x00000006 ) ] [ lookup reg 1 set mapv6 dreg 1 ] [ meta set mark with reg 1 ]
- Se ha reanudado el soporte para el comando 'replace rule'. replace rule ip t1 c1 handle 3 'jhash ip protocol . ip saddr mod 170 vmap { 0-94 : goto wan1, 95-169 : goto wan2, 170-269 }'
- Se ha reanudado la posibilidad de agregar dispositivos de red a un flowtable existente: create flowtable inet filter f1 { hook ingress priority 0; counter } add flowtable inet filter f1 { devices = { dummy1 } ; }
- Se han resuelto problemas al utilizar el comando 'create set': define ip-block-4 = { 1.1.1.1 } create set netdev filter ip-block-4-test { type ipv4_addr flags interval auto-merge elements = $ip-block-4 }
- Se han resuelto problemas al utilizar la representación numérica de las opciones tcp: tcp option 254
- Se han resuelto problemas al utilizar expresiones meta y ct con conjuntos map: meta mark set vlan id map { 1 : 0x00000001, 4095 : 0x00004095 }
- En las expresiones payload y concat no se permite especificar datos de más de 512 bytes.
- Al ejecutar el comando «nft describe», se ha implementado el uso de valores de los archivos group, rt_mark y rt_realms, ubicados en los directorios /etc/iproute2/ y /use/share/iproute2/. # nft describe meta rtclassid expresión meta, datatype realm (reino de enrutamiento) (basetype entero), 32 bits constantes simbólicas predefinidas de /etc/iproute2/rt_realms (en decimal): cosmos 0 Instrucción de rechazo con rango meta mark set 0-100
- Se ha acelerado la operación de salida de la lista de tablas. Se ha implementado soporte para la opción -t/—terse para acelerar los comandos «list table» y «list set».
- Se garantiza la conversión de expresiones meter en conjuntos dinámicos set: add rule t c tcp dport 80 meter m size 128 { ip saddr timeout 2s limit rate 10/second } se convertirá en set m { type ipv4_addr size 128 flags dynamic,timeout } tcp dport 80 update @m { ip saddr timeout 2s limit rate 10/second burst 5 packets }
- Se ha añadido soporte para objetos synproxy y conjuntos de mapas con datos combinados en la representación en formato JSON.
- En los conjuntos set especificados en formato JSON, se ha implementado soporte para la bandera auto-merge.
- Al utilizar la representación en formato JSON, se permite especificar varios dispositivos en el bloque «chain».
- Al utilizar las opciones -f/—filename, se garantiza el manejo de rutas relativas al directorio del archivo actual.
- Al usar las opciones -I/—include, la iteración de rutas por defecto ahora se realiza desde el final de la lista.
- Se han ajustado las opciones -o/—optimize para funcionar con expresiones que contienen contadores de valores: # nft -c -o -f ruleset.nft Combinando: ruleset.nft:5:17-45: ct state invalid counter drop ruleset.nft :6:17-59: ct state established,related counter accept en: ct state vmap { invalid counter : drop, established counter : accept, related counter : accept } Combinando: ruleset.nft:7:17-43: tcp dport 80 counter accept ruleset.nft:8:17-44: tcp dport 123 counter accept en: tcp dport { 80, 123 } counter accept Combinando: ruleset.nft:9:17-64: ip saddr 1.1.1.1 ip daddr 2.2.2.2 counter accept ruleset.nft:10:17-62: ip saddr 1.1.1.2 ip daddr 3.3.3.3 counter drop en: ip saddr . ip daddr vmap { 1.1.1.1 . 2.2.2.2 counter : accept, 1.1.1.2 . 3.3.3.3 counter : drop }
- Se ha restaurado la compatibilidad con los volcado de elementos set, creados en nftables antes de la versión 0.9.8.
Fuente: opennet.ru
