filtro de pacotes nftables versão 0.9.5

publicado liberação de filtro de pacotes nfttables 0.9.5, desenvolvendo-se como um substituto para iptables, ip6table, arptables e ebtables, unificando interfaces de filtragem de pacotes para IPv4, IPv6, ARP e pontes de rede. O pacote nftables inclui componentes de filtro de pacotes que são executados no espaço do usuário, enquanto o trabalho no nível do kernel é fornecido pelo subsistema nf_tables, que faz parte do kernel Linux desde a versão 3.13. As alterações necessárias para que a versão 0.9.5 do nftables funcione estão incluídas no kernel Linux 5.7.

O nível do kernel fornece apenas uma interface genérica independente de protocolo que fornece funções básicas para extrair dados de pacotes, realizar operações de dados e controlar o fluxo. As regras de filtragem e manipuladores específicos do protocolo são compilados em bytecode no espaço do usuário, após o qual esse bytecode é carregado no kernel usando a interface Netlink e executado no kernel em uma máquina virtual especial que lembra BPF (Berkeley Packet Filters). Essa abordagem permite reduzir significativamente o tamanho do código de filtragem em execução no nível do kernel e mover todas as funções de análise de regras e lógica para trabalhar com protocolos para o espaço do usuário.

Principais inovações:

  • Suporte para contadores de pacotes e tráfego associados a elementos de conjunto foi adicionado aos conjuntos. Os contadores são habilitados usando a palavra-chave “counter”:

    ip da tabela x {
    definir y {
    tipo de ip saddr
    contrariar
    elementos = {192.168.10.35, 192.168.10.101, 192.168.10.135}
    }

    cadeia z {
    tipo filtro gancho filtro de prioridade de saída; política aceita;
    ip pai @y
    }
    }

  • Para definir os valores iniciais dos contadores, por exemplo, para restaurar contadores anteriores após uma reinicialização, você pode usar o comando “nft -f”:

    # gato conjunto de regras.nft
    ip da tabela x {
    definir y {
    tipo de ip saddr
    contrariar
    elementos = { 192.168.10.35 contador pacotes 1 bytes 84, 192.168.10.101 \
    contador p 192.168.10.135 contador de pacotes 0 bytes 0 }
    }

    cadeia z {
    tipo filtro gancho filtro de prioridade de saída; política aceita;
    ip pai @y
    }
    }
    # nft -f conjunto de regras.nft
    Conjunto de regras da lista #nft
    ip da tabela x {
    definir y {
    tipo de ip saddr
    contrariar
    elementos = { 192.168.10.35 contador pacotes 1 bytes 84, 192.168.10.101 \
    contador p 192.168.10.135 contador de pacotes 0 bytes 0 }
    }

    cadeia z {
    tipo filtro gancho filtro de prioridade de saída; política aceita;
    ip pai @y
    }
    }

  • O suporte de contador também foi adicionado ao flowtable:

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

    cadeia para frente {
    tipo filtro gancho filtro de prioridade direta;
    fluxo adicionar @bar contador
    }
    }

    Você pode visualizar a lista de contadores usando o comando “conntrack -L”:

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

  • Em conjuntos para concatenação (concatenação, certos pacotes de endereços e portas que simplificam a comparação), é possível utilizar a diretiva “typeof”, que determina o tipo de dados dos elementos para as partes constituintes dos elementos do conjunto:

    tabela ip foo {
    definir lista de permissões {
    tipo de ip saddr. porta tcp
    elementos = { 192.168.10.35. 80, 192.168.10.101. 80}
    }

    barra de corrente {
    tipo filtro gancho pré-roteamento filtro de prioridade; queda da política;
    ip pai. tcp dport @whitelist aceitar
    }
    }

  • A diretiva typeof agora também se aplica a junções em listas de mapas:

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

    barra de corrente {
    tipo filtro gancho pré-roteamento filtro de prioridade; queda da política;
    meta marca definir ip daddr. mapa tcp dport @ addr2mark aceitar
    }
    }

  • Adicionado suporte para junções de intervalo em conjuntos anônimos (sem nome):

    # nft adicionar regra inet filter input ip daddr . porta tcp\
    {10.0.0.0/8. 10-23, 192.168.1.1-192.168.3.8. 80-443 } aceitar

  • É fornecida a capacidade de descartar pacotes com sinalizadores 802.1q (VLAN) ao processar pontes de rede:

    # nft adicionar regra bridge foo bar ether tipo vlan rejeitar com redefinição de tcp

  • Adicionado suporte para correspondência por identificador de sessão TCP (ID conntrack). Para determinar o ID do conntrack, você pode usar a opção “--output id”:

    # conntrack -L —id de saída
    udp 17 18 src=192.168.2.118 dst=192.168.2.1 sport=36424 dport=53 pacotes=2 \
    bytes=122 src=192.168.2.1 dst=192.168.2.118 sport=53 dport=36424 pacotes=2 bytes=320 \
    [ASSEGURADO] marca = 0 uso = 1 id = 2779986232

    # nft adicionar regra foo bar ct id 2779986232 contador

Fonte: opennet.ru

Adicionar um comentário