Lançamento do filtro de pacotes nftables 0.9.4

Publicado lançamento do filtro de pacotes nftables 0.9.4, que está se desenvolvendo como uma substituição para iptables, ip6tables, arptables e ebtables através da unificação das interfaces de filtragem de pacotes para IPv4, IPv6, ARP e pontes de rede. O pacote nftables inclui componentes de filtragem de pacotes que operam no espaço do usuário, enquanto a subsistema nf_tables no nível do kernel, que faz parte do kernel Linux desde a versão 3.13, fornece a funcionalidade. As mudanças necessárias para o lançamento do nftables 0.9.4 estão incluídas na futura ramificação do kernel. Linux 5.6.

No nível do kernel, é fornecida apenas uma interface genérica, independente do protocolo específico e que oferece funções básicas de extração de dados de pacotes, execução de operações de dados e controle de fluxo. As regras de filtragem e os manipuladores específicos de protocolo são compilados em bytecode no espaço do usuário, após o que esse bytecode é carregado no kernel por meio da interface Netlink e executado no kernel em uma máquina virtual especial, semelhante ao BPF (Berkeley Packet Filters). Essa abordagem permite reduzir significativamente o tamanho do código de filtragem que opera no nível do kernel e transferir todas as funções de análise de regras e lógica de manipulação de protocolos para o espaço do usuário.

Principais novidades:

  • Suporte para intervalos em associações (concatenation, combinações específicas de endereços e portas que simplificam a correspondência). Por exemplo, para um conjunto "whitelist", cujos elementos são associações, especificar a flag "interval" indicará que o conjunto pode incluir intervalos na associação (anteriormente, para a associação "ipv4_addr . ipv4_addr . inet_service", era possível listar correspondências exatas como "192.168.10.35 . 192.68.11.123 . 80", mas agora podem ser especificados grupos de endereços como "192.168.10.35-192.168.10.40 . 192.68.11.123-192.168.11.125 . 80"):

    table ip foo {
    set whitelist {
    type ipv4_addr . ipv4_addr . inet_service
    flags interval
    elements = { 192.168.10.35-192.168.10.40 . 192.68.11.123-192.168.11.125 . 80 }
    }

    chain bar {
    type filter hook prerouting priority filter; policy drop;
    ip saddr . ip daddr . tcp dport @whitelist accept
    }
    }

  • Nos conjuntos e listas de map, foi adicionada a possibilidade de usar a diretiva "typeof", que define o formato do elemento durante a correspondência.
    Por exemplo:

    table ip foo {
    set whitelist {
    typeof ip saddr
    elements = { 192.168.10.35, 192.168.10.101, 192.168.10.135 }
    }

    chain bar {
    type filter hook prerouting priority filter; policy drop;
    ip daddr @whitelist accept
    }
    }

    table ip foo {
    map addr2mark {
    typeof ip saddr : meta mark
    elements = { 192.168.10.35 : 0x00000001, 192.168.10.135 : 0x00000002 }
    }
    }

  • Adicionado suporte para associações em ligações NAT, permitindo especificar endereço e porta ao definir transformações NAT com base em listas de map ou conjuntos nomeados:

    nft add rule ip nat pre dnat ip addr . port to ip saddr map { 1.1.1.1 : 2.2.2.2 . 30 }

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

  • Suporte para aceleração de hardware, realizando algumas operações de filtragem de pacotes na placa de rede. A aceleração é ativada através da ferramenta ethtool ("ethtool -K eth0 hw-tc-offload on"), após o que é ativa em nftables para a cadeia principal usando a flag "offload". Com o kernel Linux 5.6, a aceleração de hardware é suportada para a correspondência de campos de cabeçalho e verificação da interface de entrada em combinação com recebimento, descarte, duplicação (dup) e redirecionamento (fwd) de pacotes. No exemplo abaixo, as operações de descarte dos pacotes provenientes do endereço 192.168.30.20 são realizadas no nível da placa de rede, sem transmissão dos pacotes para o kernel:

    # cat file.nft
    table netdev x {
    chain y {
    filtro de tipo hook do dispositivo de entrada eth0 prioridade 10; flags offload;
    ip saddr 192.168.30.20 cair
    }
    }
    # nft -f file.nft

  • Melhorias na notificação sobre o local do erro nas regras.

    # nft delete rule ip y z handle 7
    Erro: Não foi possível processar a regra: Não existe tal arquivo ou diretório
    deletar regra ip y z handle 7
    ^

    # nft delete rule ip x x handle 7
    Erro: Não foi possível processar a regra: Não existe tal arquivo ou diretório
    deletar regra ip x x handle 7
    ^

    # nft delete table twst
    Erro: Não existe tal arquivo ou diretório; quis dizer tabela ‘test’ na família ip?
    deletar tabela twst
    ^^^^

    O primeiro exemplo mostra que a tabela "y" não está presente no sistema, o segundo, que o manipulador "7" está ausente, e o terceiro, que uma dica de erro é exibida ao digitar o nome da tabela.

  • Suporte adicionado para verificar a interface escrava através da indicação "meta sdif" ou "meta sdifname":

    … meta sdifname vrf1 …

  • Suporte adicionado para operação de deslocamento para a direita ou para a esquerda. Por exemplo, para deslocar uma etiqueta de pacote existente para a esquerda em 1 bit e definir o bit menos significativo como 1:

    … meta mark set meta mark lshift 1 or 0x1 …

  • Implementada a opção "-V" para exibir informações detalhadas sobre a versão.

    # nft -V
    nftables v0.9.4 (Jive at Five)
    cli: readline
    json: sim
    minigmp: não
    libxtables: sim

  • As opções de linha de comando agora devem obrigatoriamente ser especificadas antes dos comandos. Por exemplo, deve-se usar "nft -a list ruleset", enquanto a execução de "nft list ruleset -a" resultará em erro.

    Fonte: opennet.ru

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster