filtro de pacotes nftables versão 0.9.4

publicado liberação de filtro de pacotes nfttables 0.9.4, 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 mudanças necessárias para que a versão 0.9.4 do nftables funcione estão incluídas na futura ramificação do kernel Linux 5.6.

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 intervalos em conexões (concatenação, determinados pacotes de endereços e portas que simplificam a comparação). Por exemplo, para um conjunto "lista branca" cujos elementos são um anexo, a especificação do sinalizador "intervalo" indicará que o conjunto pode incluir intervalos no anexo (para o anexo "ipv4_addr . ipv4_addr . inet_service" era anteriormente possível listar dados exatos correspondências do formato "192.168.10.35", e agora você pode especificar grupos de endereços "192.68.11.123-80-192.168.10.35"):

    tabela ip foo {
    definir lista de permissões {
    digite ipv4_addr. ipv4_addr. serviço_inet
    intervalo de bandeiras
    elementos = { 192.168.10.35-192.168.10.40 . 192.68.11.123-192.168.11.125. 80}
    }

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

  • Em conjuntos e listas de mapas, é possível usar a diretiva “typeof”, que determina o formato do elemento durante a correspondência.
    Por exemplo:

    tabela ip foo {
    definir lista de permissões {
    tipo de ip saddr
    elementos = {192.168.10.35, 192.168.10.101, 192.168.10.135}
    }

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

    tabela ip foo {
    mapa addr2mark {
    typeof ip saddr: meta marca
    elementos = {192.168.10.35: 0x00000001, 192.168.10.135: 0x00000002}
    }
    }

  • Adicionada a capacidade de usar junções em ligações NAT, o que permite especificar um endereço e uma porta ao definir transformações NAT com base em listas de mapas ou conjuntos nomeados:

    nft adicionar regra ip nat pré dnat ip addr. mapa de porta para ip saddr {1.1.1.1: 2.2.2.2. trinta }

    nft adicionar mapa ip nat destinos {tipo ipv4_addr. inet_service: ipv4_addr. inet_service \\; }
    nft adicionar regra ip nat pré dnat ip addr. porta para ip saddr. mapa tcp dport @destinos

  • Suporte para aceleração de hardware com algumas operações de filtragem realizadas pela placa de rede. A aceleração é habilitada através do utilitário ethtool (“ethtool -K eth0 hw-tc-offload on”), após o qual é ativada em nftables para a cadeia principal usando o sinalizador “offload”. Ao usar o kernel Linux 5.6, a aceleração de hardware é suportada para correspondência de campos de cabeçalho e inspeção de interface de entrada em combinação com pacotes de recebimento, descarte, duplicação (dup) e encaminhamento (fwd). No exemplo abaixo, as operações de descarte de pacotes vindos do endereço 192.168.30.20 são realizadas no nível da placa de rede, sem passar os pacotes para o kernel:

    # arquivo cat.nft
    tabela netdev x {
    cadeia y {
    digite filtro gancho dispositivo de entrada eth0 prioridade 10; descarregamento de bandeiras;
    ip saddr 192.168.30.20 queda
    }
    }
    # nft -f arquivo.nft

  • Informações aprimoradas sobre a localização de um erro nas regras.

    # nft excluir regra ip yz identificador 7
    Erro: Não foi possível processar a regra: Arquivo ou diretório inexistente
    excluir regra ip yz handle 7
    ^

    # nft excluir regra ip xx identificador 7
    Erro: Não foi possível processar a regra: Arquivo ou diretório inexistente
    excluir regra ip xx identificador 7
    ^

    #nft excluir tabela twst
    Erro: Esse arquivo ou diretório não existe; você quis dizer tabela 'teste' no ip da família?
    excluir tabela twst
    ^^^^

    O primeiro exemplo mostra que a tabela “y” não está no sistema, o segundo que o manipulador “7” está faltando e o terceiro que um prompt de digitação é exibido ao digitar o nome da tabela.

  • Adicionado suporte para verificação da interface escrava especificando “meta sdif” ou “meta sdifname”:

    ... meta sdifname vrf1 ...

  • Adicionado suporte para operações de deslocamento para a direita ou para a esquerda. Por exemplo, para deslocar um rótulo de pacote existente para a esquerda em 1 bit e definir o bit menor como 1:

    … meta marca definir meta marca lshift 1 ou 0x1…

  • Opção "-V" implementada para exibir informações estendidas da versão.

    #nft-V
    nftables v0.9.4 (Jive às cinco)
    cli:readline
    JSON: sim
    minigmp: não
    libxtables: sim

  • As opções de linha de comando agora devem ser especificadas antes dos comandos. Por exemplo, você precisa especificar “nft -a list Ruleset” e executar “nft list Ruleset -a” resultará em um erro.

    Fonte: opennet.ru

Adicionar um comentário