Versión de filtro de paquetes nftables 0.9.4

publicado liberación do filtro de paquetes nftables 0.9.4, desenvolvéndose como substituto de iptables, ip6table, arptables e ebtables unificando interfaces de filtrado de paquetes para IPv4, IPv6, ARP e pontes de rede. O paquete nftables inclúe compoñentes de filtro de paquetes que se executan no espazo do usuario, mentres que o traballo a nivel do núcleo é proporcionado polo subsistema nf_tables, que forma parte do núcleo de Linux desde a versión 3.13. Os cambios necesarios para que funcione a versión de nftables 0.9.4 inclúense na futura rama do núcleo Linux 5.6.

O nivel do núcleo ofrece só unha interface xenérica independente do protocolo que proporciona funcións básicas para extraer datos de paquetes, realizar operacións de datos e controlar o fluxo. As regras de filtrado e os controladores específicos do protocolo compílanse en bytecode no espazo do usuario, despois de que este bytecode cárgase no núcleo mediante a interface Netlink e execútase no núcleo nunha máquina virtual especial que lembra a BPF (Berkeley Packet Filters). Este enfoque permítelle reducir significativamente o tamaño do código de filtrado que se executa a nivel do núcleo e mover todas as funcións de análise de regras e lóxica para traballar con protocolos ao espazo do usuario.

Principais novidades:

  • Soporte para rangos en conexións (concatenación, certos paquetes de enderezos e portos que simplifican a comparación). Por exemplo, para un conxunto "lista branca" cuxos elementos son un anexo, especificar a marca "intervalo" indicará que o conxunto pode incluír intervalos no anexo (para o anexo "ipv4_addr . ipv4_addr . inet_service" antes era posible enumerar os intervalos exactos). coincide coa forma "192.168.10.35. 192.68.11.123", e agora pode especificar grupos de enderezos "80-192.168.10.35-192.168.10.40-192.68.11.123"

    mesa ip foo {
    establecer lista branca {
    escriba ipv4_addr . ipv4_addr. servizo_inet
    intervalo de bandeiras
    elementos = { 192.168.10.35-192.168.10.40 . 192.68.11.123-192.168.11.125. 80}
    }

    barra de cadea {
    tipo filtro hook prerouting filtro de prioridade; caída da política;
    ip saddr. ip papá. tcp dport @whitelist aceptar
    }
    }

  • En conxuntos e listas de mapas, é posible utilizar a directiva "typeof", que determina o formato do elemento ao coincidir.
    Por exemplo:

    mesa ip foo {
    establecer lista branca {
    tipo de ip saddr
    elementos = { 192.168.10.35, 192.168.10.101, 192.168.10.135 }
    }

    barra de cadea {
    tipo filtro hook prerouting filtro de prioridade; caída da política;
    ip daddr @whitelist aceptar
    }
    }

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

  • Engadiuse a posibilidade de usar unións nas ligazóns NAT, o que lle permite especificar un enderezo e un porto ao definir transformacións NAT baseadas en listas de mapas ou conxuntos con nome:

    nft add rule ip nat pre dnat ip addr . porto a ip saddr mapa { 1.1.1.1 : 2.2.2.2 . trinta}

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

  • Soporte para a aceleración de hardware con algunhas operacións de filtrado realizadas pola tarxeta de rede. A aceleración está habilitada a través da utilidade ethtool ("ethtool -K eth0 hw-tc-offload on"), despois de que se activa en nftables para a cadea principal usando a bandeira "descarga". Cando se usa o núcleo Linux 5.6, a aceleración de hardware é compatible para a correspondencia de campos de cabeceira e a inspección da interface entrante en combinación coa recepción, descarte, duplicación (dup) e reenvío (fwd) de paquetes. No seguinte exemplo, as operacións de soltar paquetes procedentes do enderezo 192.168.30.20 realízanse a nivel de tarxeta de rede, sen pasar os paquetes ao núcleo:

    # ficheiro cat.nft
    táboa netdev x {
    cadea y {
    tipo filtro gancho dispositivo de entrada eth0 prioridade 10; descarga de bandeiras;
    ip saddr 192.168.30.20 soltar
    }
    }
    # nft -f ficheiro.nft

  • Mellorouse a información sobre a localización dun erro nas regras.

    # nft eliminar regra ip yz handle 7
    Erro: non se puido procesar a regra: non hai ningún ficheiro ou directorio
    eliminar a regra ip yz handle 7
    ^

    # nft elimina a regra ip xx handle 7
    Erro: non se puido procesar a regra: non hai ningún ficheiro ou directorio
    eliminar a regra ip xx handle 7
    ^

    # nft eliminar táboa twst
    Erro: non hai ningún ficheiro ou directorio; querías dicir a táboa "test" na IP familiar?
    eliminar táboa twst
    ^^^^

    O primeiro exemplo mostra que a táboa "y" non está no sistema, o segundo que falta o manejador "7" e o terceiro que se mostra un aviso de erro ao escribir o nome da táboa.

  • Engadido soporte para comprobar a interface escrava especificando "meta sdif" ou "meta sdifname":

    ... meta sdifname vrf1 ...

  • Engadido soporte para operacións de desprazamento á dereita ou á esquerda. Por exemplo, para cambiar unha etiqueta de paquete existente á esquerda 1 bit e establecer o bit menor en 1:

    ... meta marca establecer metamarca lshift 1 ou 0x1 ...

  • Implementouse a opción "-V" para mostrar información da versión estendida.

    # nft -V
    nftables v0.9.4 (Jive at Five)
    cli:readline
    json: si
    minigmp: non
    libxtables: si

  • Agora deben especificarse as opcións da liña de comandos antes dos comandos. Por exemplo, cómpre especificar "nft -a list ruleset" e executar "nft list ruleset -a" producirá un erro.

    Fonte: opennet.ru

Engadir un comentario