Se ha publicado el lanzamiento del filtro de paquetes nftables 1.1.0, que unifica las interfaces de filtrado de paquetes para IPv4, IPv6, ARP y puentes de red (destinado a reemplazar iptables, ip6table, arptables y ebtables). Un cambio significativo en el número de versión no está asociado con ningún cambio fundamental, sino que es solo una consecuencia de la continuación constante de la numeración en notación decimal (la versión anterior era 1.0.9). Al mismo tiempo, se publicó el lanzamiento de la biblioteca complementaria libnftnl 1.2.7, que proporciona una API de bajo nivel para interactuar con el subsistema nf_tables.
El paquete nftables contiene los componentes de filtrado de paquetes que operan en el espacio de usuario, mientras que el trabajo a nivel del kernel lo proporciona el subsistema nf_tables, que forma parte del kernel. Linux Desde la versión 3.13, solo se proporciona una interfaz genérica independiente del protocolo a nivel del kernel, que ofrece funcionalidades básicas para extraer datos de los paquetes, realizar operaciones con datos y controlar el flujo de datos.
Las reglas de filtrado y los manejadores específicos del protocolo se compilan en código de bytes en el espacio de usuario, después de lo cual este código de bytes se carga en el núcleo usando la interfaz Netlink y se ejecuta en el núcleo en un modo especial. máquina virtual, que recuerda a BPF (Berkeley Packet Filters). Este enfoque permite una reducción significativa del tamaño del código de filtrado que se ejecuta a nivel del núcleo y traslada todo el análisis de reglas y la lógica del protocolo al espacio de usuario.
Cambios importantes:
- Se ha agregado soporte de variables a las expresiones de mapa: define dst_map = { ::1234 : 5678 } table ip6 nat { map dst_map { typeof ip6 daddr : tcp dport; elementos = $dst_map } enrutamiento previo de cadena { ip6 nexthdr tcp redirigir a ip6 daddr map @dst_map } }
- Se agregó soporte de VLAN: ip saddr 10.1.1.1 icmp tipo echo-request vlan id set 321 # carga útil tipo ether 8021ad vlan id 10 vlan tipo 8021q vlan id 100 vlan tipo ip aceptar
- Para expresiones de "registro", se habilita un nuevo preprocesador de cadena con soporte de variables: defina mensaje="prueba" prefijo de registro "mi $mensaje"
- Al calcular el valor de la expresión “meta hora”, se implementa el procesamiento del desplazamiento negativo en la zona horaria especificada a través de la variable de entorno TZ: TZ=UTC-4 nft add rule xy meta hora “22:00”
- La conversión del orden de bytes se proporciona cuando se utilizan expresiones ct y meta, así como cuando se utilizan operaciones de fusión y se especifican rangos en conjuntos de conjuntos. mapa mapv6 { tipo de ip6 dscp : meta marca; } metamark set ip6 dscp map @map1 se recibirá el código de bytes: [ carga útil 2b @ encabezado de red + 0 => reg 1 ] [ bit a bit reg 1 = ( reg 1 & 0x0000c00f ) ^ 0x00000000 ] [ byteorder reg 1 = ntoh(reg 1, 2, 2) ] [ bit a bit reg 1 = ( reg 1 > 0x00000006 ) ] [ búsqueda reg 1 set mapv6 dreg 1 ] [ meta set mark con reg 1 ]
- Se ha restaurado la compatibilidad con el comando "reemplazar regla". reemplace la regla ip t1 c1 maneja 3 'protocolo ip jhash. ip saddr mod 170 vmap {0-94: ir a wan1, 95-169: ir a wan2, 170-269}"
- Se ha restaurado la capacidad de agregar dispositivos de red a tablas de flujo existentes: crear filtro inet de tabla de flujo f1 { prioridad de ingreso de gancho 0; contador } agregar filtro inet de tabla de flujo f1 {dispositivos = {dummy1}; }
- Problemas resueltos al usar el comando "create set": define ip-block-4 = { 1.1.1.1 } create set netdev filter ip-block-4-test { type ipv4_addr flags intervalo auto-merge elements = $ip-block-4 }
- Problemas resueltos al utilizar la representación digital de las opciones tcp: opción tcp 254
- Problemas resueltos al usar expresiones meta y ct con conjuntos de mapas: meta mark set vlan id map { 1 : 0x00000001, 4095 : 0x00004095 }
- Las expresiones de carga útil y concat no permiten datos de más de 512 bytes.
- Al ejecutar el comando “nft describe”, se tienen en cuenta los valores del grupo, los archivos rt_mark y rt_realms ubicados en los directorios /etc/iproute2/ y /use/share/iproute2/. # nft describe metaexpresión meta rtclassid, ámbito de tipo de datos (reino de enrutamiento) (entero de tipo base), constantes simbólicas predefinidas de 32 bits de /etc/iproute2/rt_realms (en decimal): cosmos 0 Declaración de rechazo con metamarca de rango establecida de 0 a 100
- Se ha acelerado la operación de visualización de una lista de tablas. Se implementó soporte para la opción -t/—conciso para acelerar los comandos "tabla de lista" y "conjunto de lista".
- Se proporciona la conversión de expresiones de medidor en conjuntos de conjuntos dinámicos: agregue la regla tc tcp dport 80 metros tamaño m 128 {ip saddr timeout 2s velocidad límite 10/segundo} se convertirá a establecer m {tipo ipv4_addr tamaño 128 banderas dinámicas, tiempo de espera} tcp dport 80 actualización @m {ip saddr timeout 2s velocidad límite 10/segundo ráfaga 5 paquetes}
- En formato JSON, se agregó soporte para objetos synproxy y conjuntos de mapas con datos combinados.
- Los conjuntos especificados en formato JSON admiten el indicador de combinación automática.
- Cuando se utiliza la representación JSON, se pueden especificar varios dispositivos en el bloque "cadena".
- Cuando se utilizan las opciones -f/—nombre de archivo, el procesamiento de la ruta se garantiza en relación con el directorio del archivo actual.
- Cuando se utilizan las opciones -I/--include, las rutas ahora se enumeran desde el final de la lista de forma predeterminada.
- Las opciones -o/—optimize se han mejorado para trabajar con expresiones que contienen contadores de valores: # nft -c -o -f reglaset.nft Fusión: reglas.nft:5:17-45: ct state invalid counter drop ruleset.nft : 6:17 -59: estado ct establecido, contador relacionado aceptar en: vmap estado ct {contador no válido: descartar, contador establecido: aceptar, contador relacionado: aceptar} Fusión: conjunto de reglas.nft:7:17-43: contador tcp dport 80 aceptar conjunto de reglas nft:8:17-44: contador tcp dport 123 aceptar en: contador tcp dport { 80, 123 } aceptar fusión: conjunto de reglas.nft:9:17-64: contador ip saddr 1.1.1.1 ip daddr 2.2.2.2. aceptar el conjunto de reglas nft:10:17-62: ip saddr 1.1.1.2 ip daddr 3.3.3.3 colocar el contador en: ip saddr. ip daddr vmap { 1.1.1.1 . 2.2.2.2 contador: aceptar, 1.1.1.2. 3.3.3.3 contador: soltar}
- Se restableció la compatibilidad con los volcados de elementos establecidos creados en nftables antes de la versión 0.9.8.
Fuente: opennet.ru
