Lanzamiento del filtro de paquetes nftables 0.9.4

Publicado lanzamiento del filtro de paquetes nftables 0.9.4, que se está desarrollando como un reemplazo para iptables, ip6tables, arptables y ebtables a través de la unificación de interfaces de filtrado de paquetes para IPv4, IPv6, ARP y puentes de red. El paquete nftables incluye componentes de filtrado de paquetes que operan en espacio de usuario, mientras que a nivel de núcleo la funcionalidad es proporcionada por el subsistema nf_tables, que forma parte del núcleo de Linux desde la versión 3.13. Los cambios necesarios para la operatividad de la versión nftables 0.9.4 están incluidos en la futura rama del núcleo. Linux 5.6.

A nivel del núcleo, se proporciona solo una interfaz general, que no depende de un protocolo específico y ofrece funciones básicas para extraer datos de paquetes, realizar operaciones sobre los datos y gestionar el flujo. Las reglas de filtrado específicas y los controladores para protocolos se compilan en bytecode en el espacio de usuario, y luego este bytecode se carga en el núcleo a través de la interfaz Netlink y se ejecuta en el núcleo en una máquina virtual especial similar a BPF (Berkeley Packet Filters). Este enfoque permite reducir significativamente el tamaño del código de filtrado que opera a nivel del núcleo y trasladar todas las funciones de análisis de reglas y lógica de trabajo con protocolos al espacio de usuario.

Novedades principales:

  • Soporte de rangos en concatenaciones, definiendo vínculos específicos de direcciones y puertos que facilitan la coincidencia. Por ejemplo, para un conjunto 'whitelist', cuyos elementos son concatenaciones, la indicación de la bandera 'interval' señalará que el conjunto puede incluir rangos en la concatenación (para la concatenación 'ipv4_addr . ipv4_addr . inet_service' anteriormente se podían enumerar coincidencias exactas como '192.168.10.35 . 192.68.11.123 . 80', pero ahora se pueden indicar grupos de direcciones '192.168.10.35-192.168.10.40 . 192.68.11.123-192.168.11.125 . 80'):

    table ip foo {
    set whitelist {
    type ipv4_addr . ipv4_addr . inet_service
    flags interval
    elements = { 192.168.10.35-192.168.10.40 . 192.68.11.123-192.168.11.125 . 80 }
    }

    chain bar {
    type filter hook prerouting priority filter; policy drop;
    ip saddr . ip daddr . tcp dport @whitelist accept
    }
    }

  • En conjuntos y listas de mapas se ha implementado la posibilidad de utilizar la directiva 'typeof', que define el formato del elemento al momento de la coincidencia.
    Por ejemplo:

    table ip foo {
    set whitelist {
    typeof ip saddr
    elements = { 192.168.10.35, 192.168.10.101, 192.168.10.135 }
    }

    chain bar {
    type filter hook prerouting priority filter; policy drop;
    ip daddr @whitelist accept
    }
    }

    table ip foo {
    map addr2mark {
    typeof ip saddr : meta mark
    elements = { 192.168.10.35 : 0x00000001, 192.168.10.135 : 0x00000002 }
    }
    }

  • Se ha añadido la posibilidad de utilizar concatenaciones en las vinculaciones NAT, lo que permite especificar dirección y puerto al definir las transformaciones NAT basadas en listas de mapas o conjuntos nombrados:

    nft add rule ip nat pre dnat ip addr . port to ip saddr map { 1.1.1.1 : 2.2.2.2 . 30 }

    nft add map ip nat destinations { type ipv4_addr . inet_service : ipv4_addr . inet_service \\; }
    nft add rule ip nat pre dnat ip addr . port to ip saddr . tcp dport map @destinations

  • Soporte para aceleración por hardware, trasladando algunas operaciones de filtrado a la tarjeta de red. La aceleración se activa mediante la herramienta ethtool ('ethtool -K eth0 hw-tc-offload on'), tras lo cual se habilita en nftables para la cadena principal mediante la bandera 'offload'. Con el uso del núcleo de Linux 5.6, se admite aceleración por hardware para la coincidencia de campos de encabezado y la verificación de la interfaz de entrada, en combinación con recepción, descarte, duplicación (dup) y redirección (fwd) de paquetes. En el siguiente ejemplo, las operaciones de descarte de paquetes que provienen de la dirección 192.168.30.20 se realizan a nivel de la tarjeta de red, sin transferir paquetes al núcleo:

    # cat file.nft
    table netdev x {
    chain y {
    tipo de filtro gancho dispositivo de ingreso eth0 prioridad 10; banderas de descarga apagadas;
    ip saddr 192.168.30.20 eliminar
    }
    }
    # nft -f file.nft

  • Se mejoró la información sobre el lugar del error en las reglas.

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

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

    # nft delete table twst
    Error: No existe tal archivo o directorio; ¿quisiste decir tabla 'test' en la familia ip?
    eliminar tabla twst
    ^^^^

    En el primer ejemplo se muestra que la tabla 'y' no está presente en el sistema, en el segundo, que falta el manejador '7', y en el tercero, que se muestra una sugerencia sobre un posible error tipográfico al escribir el nombre de la tabla.

  • Se agregó soporte para verificar la interfaz esclava mediante la especificación 'meta sdif' o 'meta sdifname':

    … meta sdifname vrf1 …

  • Se agregó soporte para la operación de desplazamiento a la derecha o a la izquierda. Por ejemplo, para desplazar una etiqueta de paquete existente a la izquierda en 1 bit y establecer el bit inferior en 1:

    … meta mark set meta mark lshift 1 o 0x1 …

  • Se implementó la opción '-V' para mostrar información detallada sobre la versión.

    # nft -V
    nftables v0.9.4 (Jive at Five)
    cli: readline
    json: sí
    minigmp: no
    libxtables: sí

  • Las opciones de la línea de comandos ahora deben especificarse antes de los comandos. Por ejemplo, se debe usar 'nft -a list ruleset', mientras que ejecutar 'nft list ruleset -a' dará un error.

    Fuente: opennet.ru

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster