Lanzamiento del filtro de paquetes nftables 0.9.4

publicado liberación del filtro de paquetes nftables 0.9.4, desarrollándose como un reemplazo de iptables, ip6table, arptables y ebtables al unificar interfaces de filtrado de paquetes para IPv4, IPv6, ARP y puentes de red. El paquete nftables incluye componentes de filtrado de paquetes que se ejecutan en el espacio del usuario, mientras que el trabajo a nivel del kernel lo proporciona el subsistema nf_tables, que ha sido parte del kernel de Linux desde la versión 3.13. Los cambios necesarios para que funcione la versión nftables 0.9.4 se incluyen en la futura rama del kernel. Linux 5.6.

El nivel del kernel proporciona solo una interfaz genérica independiente del protocolo que proporciona funciones básicas para extraer datos de paquetes, realizar operaciones de datos y control de flujo. Las reglas de filtrado y los controladores específicos del protocolo se compilan en un código de bytes en el espacio del usuario, después de lo cual este código de bytes se carga en el kernel usando la interfaz Netlink y se ejecuta en el kernel en una máquina virtual especial que recuerda a BPF (Berkeley Packet Filters). Este enfoque le permite reducir significativamente el tamaño del código de filtrado que se ejecuta a nivel del kernel y mover todas las funciones de reglas de análisis y lógica para trabajar con protocolos al espacio del usuario.

Principales novedades:

  • Soporte para rangos en conexiones (concatenación, ciertos paquetes de direcciones y puertos que simplifican la comparación). Por ejemplo, para un conjunto "lista blanca" cuyos elementos son un archivo adjunto, especificar el indicador "intervalo" indicará que el conjunto puede incluir rangos en el archivo adjunto (para el archivo adjunto "ipv4_addr. ipv4_addr. inet_service" antes era posible enumerar datos exactos coincidencias del formato "192.168.10.35", y ahora puede especificar grupos de direcciones "192.68.11.123-80-192.168.10.35"):

    tabla ip foo {
    establecer lista blanca {
    escriba ipv4_addr. ipv4_addr. servicio_inet
    intervalo de banderas
    elementos = {192.168.10.35-192.168.10.40. 192.68.11.123-192.168.11.125. 80}
    }

    barra de cadena {
    tipo filtro gancho filtro de prioridad de preenrutamiento; caída de la política;
    dirección ip. ip papá puerto tcp @lista blanca aceptar
    }
    }

  • En conjuntos y listas de mapas, es posible utilizar la directiva "typeof", que determina el formato del elemento al hacer coincidir.
    Por ejemplo:

    tabla ip foo {
    establecer lista blanca {
    tipo de dirección IP
    elementos = {192.168.10.35, 192.168.10.101, 192.168.10.135}
    }

    barra de cadena {
    tipo filtro gancho filtro de prioridad de preenrutamiento; caída de la política;
    ip daddr @whitelist aceptar
    }
    }

    tabla ip foo {
    mapa addr2mark {
    tipo de ip saddr: meta marca
    elementos = {192.168.10.35: 0x00000001, 192.168.10.135: 0x00000002}
    }
    }

  • Se agregó la capacidad de usar uniones en enlaces NAT, lo que le permite especificar una dirección y un puerto al definir transformaciones NAT basadas en listas de mapas o conjuntos con nombres:

    nft agregar regla ip nat pre dnat dirección ip. puerto al mapa ip saddr { 1.1.1.1 : 2.2.2.2 . treinta }

    nft agregar destinos ip nat del mapa {escriba ipv4_addr. inet_service: ipv4_addr. servicio_inet \\; }
    nft agregar regla ip nat pre dnat dirección ip. puerto a ip saddr. mapa de puerto tcp @destinos

  • Soporte para aceleración de hardware con algunas operaciones de filtrado realizadas por la tarjeta de red. La aceleración se habilita a través de la utilidad ethtool (“ethtool -K eth0 hw-tc-offload on”), después de lo cual se activa en nftables para la cadena principal usando el indicador “offload”. Cuando se utiliza el kernel de Linux 5.6, se admite la aceleración de hardware para la coincidencia de campos de encabezado y la inspección de la interfaz entrante en combinación con la recepción, el descarte, la duplicación (dup) y el reenvío (fwd) de paquetes. En el siguiente ejemplo, las operaciones de descartar paquetes provenientes de la dirección 192.168.30.20 se realizan en el nivel de la tarjeta de red, sin pasar los paquetes al kernel:

    # archivo gato.nft
    tabla netdev x {
    cadena y {
    tipo filtro gancho dispositivo de ingreso eth0 prioridad 10; descarga de banderas;
    ip saddr 192.168.30.20 caída
    }
    }
    # nft -f archivo.nft

  • Información mejorada sobre la ubicación de un error en las reglas.

    # nft eliminar regla ip yz manejar 7
    Error: No se pudo procesar la regla: No existe tal archivo o directorio
    eliminar regla ip yz handle 7
    ^

    # nft eliminar regla ip xx identificador 7
    Error: No se pudo procesar la regla: No existe tal archivo o directorio
    eliminar regla ip xx identificador 7
    ^

    # nft eliminar tabla de giro
    Error: No existe tal archivo o directorio; ¿Quiso decir la tabla 'prueba' en la ip familiar?
    eliminar giro de tabla
    ^^^^

    El primer ejemplo muestra que la tabla "y" no está en el sistema, el segundo que falta el controlador "7" y el tercero que se muestra un mensaje de error tipográfico al escribir el nombre de la tabla.

  • Se agregó soporte para verificar la interfaz esclava especificando “meta sdif” o “meta sdifname”:

    ... meta sdifname vrf1 ...

  • Se agregó soporte para operaciones de desplazamiento hacia la derecha o hacia la izquierda. Por ejemplo, para desplazar la etiqueta de un paquete existente 1 bit a la izquierda y establecer el bit menor en 1:

    … meta marca establece meta marca lshift 1 o 0x1 …

  • Se implementó la opción "-V" para mostrar información de la versión extendida.

    #nft-V
    nftables v0.9.4 (Jive a las cinco)
    cli: línea de lectura
    json: sí
    minimpmp: no
    libxtables: sí

  • Las opciones de la línea de comando ahora deben especificarse antes de los comandos. Por ejemplo, debe especificar "nft -a list conjunto de reglas" y ejecutar "nft list conjunto de reglas -a" generará un error.

    Fuente: opennet.ru

Añadir un comentario