Versión de filtro de paquetes nftables 0.9.5

publicado liberación do filtro de paquetes nftables 0.9.5, 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 nftables 0.9.5 funcione están incluídos no núcleo Linux 5.7.

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:

  • Engadiuse aos conxuntos soporte para contadores de paquetes e tráfico asociados aos elementos de conxunto. Os contadores están habilitados usando a palabra clave "contador":

    táboa ip x {
    establecer y {
    tipo de ip saddr
    contrariar
    elementos = { 192.168.10.35, 192.168.10.101, 192.168.10.135 }
    }

    cadea z {
    tipo de filtro filtro de prioridade de saída de gancho; política aceptar;
    ip daddr @y
    }
    }

  • Para configurar os valores iniciais dos contadores, por exemplo, para restaurar os contadores anteriores despois dun reinicio, pode usar o comando "nft -f":

    # cat rulesset.nft
    táboa ip x {
    establecer y {
    tipo de ip saddr
    contrariar
    elementos = { 192.168.10.35 contador de paquetes 1 bytes 84, 192.168.10.101 \
    contador p 192.168.10.135 contador de paquetes 0 bytes 0 }
    }

    cadea z {
    tipo de filtro filtro de prioridade de saída de gancho; política aceptar;
    ip daddr @y
    }
    }
    # nft -f ruleset.nft
    Conxunto de regras da lista #nft
    táboa ip x {
    establecer y {
    tipo de ip saddr
    contrariar
    elementos = { 192.168.10.35 contador de paquetes 1 bytes 84, 192.168.10.101 \
    contador p 192.168.10.135 contador de paquetes 0 bytes 0 }
    }

    cadea z {
    tipo de filtro filtro de prioridade de saída de gancho; política aceptar;
    ip daddr @y
    }
    }

  • Tamén se engadiu o contador de soporte ao flowtable:

    mesa ip foo {
    barra de fluxo {
    prioridade de entrada de gancho -100
    dispositivos = { eth0, eth1 }
    contrariar
    }

    cadea adiante {
    tipo de filtro gancho cara adiante filtro de prioridade;
    flow engade contador de @bar
    }
    }

    Podes ver a lista de contadores usando o comando "conntrack -L":

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

  • En conxuntos para a concatenación (concatenación, certos paquetes de enderezos e portos que simplifican a comparación), é posible utilizar a directiva "typeof", que determina o tipo de datos dos elementos para as partes constitutivas dos elementos do conxunto:

    mesa ip foo {
    establecer lista branca {
    tipo de ip saddr. tcp dport
    elementos = { 192.168.10.35 . 80, 192.168.10.101. 80}
    }

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

  • A directiva typeof agora tamén se aplica ás unións nas listas de mapas:

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

    barra de cadea {
    tipo filtro hook prerouting filtro de prioridade; caída da política;
    meta mark set ip daddr . tcp dport map @addr2mark aceptar
    }
    }

  • Engadido soporte para combinacións de intervalos en conxuntos anónimos (sen nome):

    #nft engadir regra de entrada de filtro inet ip daddr. tcp dport\
    { 10.0.0.0/8 . 10-23, 192.168.1.1-192.168.3.8. 80-443 } aceptar

  • Ofrécese a capacidade de descartar paquetes con bandeiras 802.1q (VLAN) ao procesar pontes de rede:

    # nft engadir regra bridge foo bar ether type vlan reject con tcp reset

  • Engadiuse compatibilidade para a correspondencia mediante o identificador de sesión TCP (ID de conntrack). Para determinar o ID de conttrack, pode usar a opción "--output id":

    # conttrack -L —id de saída
    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] mark=0 use=1 id=2779986232

    # nft engadir regra foo bar ct id 2779986232 contador

Fonte: opennet.ru

Engadir un comentario