Lanzamiento del filtro de paquetes nftables 0.9.5

publicado liberación del filtro de paquetes nftables 0.9.5, 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.5 están incluidos en el kernel Linux 5.7.

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:

  • Se ha agregado a los conjuntos soporte para contadores de paquetes y tráfico asociados con elementos de conjuntos. Los contadores se habilitan utilizando la palabra clave "contador":

    IP de la tabla x {
    establecer y {
    tipo de dirección IP
    mostrador
    elementos = {192.168.10.35, 192.168.10.101, 192.168.10.135}
    }

    cadena z {
    filtro de prioridad de salida de gancho de filtro de tipo; aceptar política;
    ip papá @y
    }
    }

  • Para establecer los valores iniciales de los contadores, por ejemplo, para restaurar los contadores anteriores después de un reinicio, puede usar el comando "nft -f":

    # conjunto de reglas de gato.nft
    IP de la tabla x {
    establecer y {
    tipo de dirección IP
    mostrador
    elementos = { 192.168.10.35 paquetes de contador 1 bytes 84, 192.168.10.101 \
    contador p 192.168.10.135 contador de paquetes 0 bytes 0 }
    }

    cadena z {
    filtro de prioridad de salida de gancho de filtro de tipo; aceptar política;
    ip papá @y
    }
    }
    # nft -f conjunto de reglas.nft
    #conjunto de reglas de lista nft
    IP de la tabla x {
    establecer y {
    tipo de dirección IP
    mostrador
    elementos = { 192.168.10.35 paquetes de contador 1 bytes 84, 192.168.10.101 \
    contador p 192.168.10.135 contador de paquetes 0 bytes 0 }
    }

    cadena z {
    filtro de prioridad de salida de gancho de filtro de tipo; aceptar política;
    ip papá @y
    }
    }

  • También se ha agregado soporte de contador a la tabla de flujo:

    tabla ip foo {
    barra de tabla de flujo {
    prioridad de ingreso de gancho -100
    dispositivos = { eth0, eth1 }
    mostrador
    }

    cadena adelante {
    tipo filtro gancho filtro de prioridad directa;
    flujo agregar @bar contador
    }
    }

    Puede ver la lista de contadores usando el comando "conntrack -L":

    tcp 6 src=192.168.10.2 dst=10.0.1.2 sport=47278 dport=5201 paquetes=9 bytes=608 \
    src=10.0.1.2 dst=10.0.1.1 sport=5201 dport=47278 paquetes=8 bytes=428 [DESCARGA] marca=0 \
    secctx=null use=2 tcp 6 src=192.168.10.2 dst=10.0.1.2 sport=47280 dport=5201 \
    paquetes=1005763 bytes=44075714753 src=10.0.1.2 dst=10.0.1.1 sport=5201 dport=47280 \
    paquetes = 967505 bytes = 50310268 [DESCARGAR] marca = 0 secctx = uso nulo = 2

  • En conjuntos para concatenación (concatenación, ciertos paquetes de direcciones y puertos que simplifican la comparación), es posible utilizar la directiva "typeof", que determina el tipo de datos de los elementos para las partes constituyentes de los elementos del conjunto:

    tabla ip foo {
    establecer lista blanca {
    tipo de ip saddr. puerto tcp
    elementos = {192.168.10.35. 80, 192.168.10.101. 80}
    }

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

  • La directiva typeof ahora también se aplica a uniones en listas de mapas:

    tabla ip foo {
    mapa addr2mark {
    tipo de ip saddr. puerto tcp: metamarca
    elementos = {192.168.10.35. 80: 0x00000001,
    192.168.10.135. 80: 0x00000002}
    }

    barra de cadena {
    tipo filtro gancho filtro de prioridad de preenrutamiento; caída de la política;
    meta marca establecer ip daddr. mapa de puerto tcp @ addr2mark aceptar
    }
    }

  • Se agregó soporte para uniones de rangos en conjuntos anónimos (sin nombre):

    # nft agregar regla filtro inet entrada ip daddr. puerto tcp\
    {10.0.0.0/8. 10-23, 192.168.1.1-192.168.3.8. 80-443 } aceptar

  • Se proporciona la capacidad de descartar paquetes con indicadores 802.1q (VLAN) al procesar puentes de red:

    # nft agregar regla puente foo bar ether tipo vlan rechazar con reinicio tcp

  • Se agregó soporte para hacer coincidir por identificador de sesión TCP (ID de conntrack). Para determinar el ID de conntrack, puede utilizar la opción “--output id”:

    # conntrack -L —identificación de salida
    udp 17 18 src=192.168.2.118 dst=192.168.2.1 deporte=36424 dport=53 paquetes=2 \
    bytes=122 src=192.168.2.1 dst=192.168.2.118 deporte=53 dport=36424 paquetes=2 bytes=320 \
    [ASEGURADO] marca = 0 uso = 1 id = 2779986232

    # nft agregar regla foo bar ct id 2779986232 contador

Fuente: opennet.ru

Añadir un comentario