Red Hat Training

A Red Hat training course is available for RHEL 8

45.5.2. Usando conjuntos nomeados em nftables

A estrutura nftables suporta conjuntos de nomes mutáveis. Um conjunto nomeado é uma lista ou gama de elementos que você pode usar em múltiplas regras dentro de uma tabela. Outro benefício sobre os conjuntos anônimos é que você pode atualizar um conjunto nomeado sem substituir as regras que utilizam o conjunto.

Quando você cria um conjunto nomeado, você deve especificar o tipo de elementos que o conjunto contém. Você pode definir os seguintes tipos:

  • ipv4_addr para um conjunto que contenha endereços ou faixas IPv4, como 192.0.2.1 ou 192.0.2.0/24.
  • ipv6_addr para um conjunto que contenha endereços ou faixas IPv6, como 2001:db8:1::1 ou 2001:db8:1::1/64.
  • ether_addr para um conjunto que contém uma lista de endereços de controle de acesso à mídia (MAC), tais como 52:54:00:6b:66:42.
  • inet_proto para um conjunto que contém uma lista de tipos de protocolos de Internet, como tcp.
  • inet_service para um conjunto que contém uma lista de serviços de Internet, tais como ssh.
  • mark para um conjunto que contém uma lista de marcas de pacotes. As marcas de pacotes podem ser qualquer valor inteiro positivo de 32 bits (0 a 2147483647].

Pré-requisitos

  • A cadeia example_chain e a tabela example_table existem.

Procedimento

  1. Criar um conjunto vazio. Os exemplos a seguir criam um conjunto para endereços IPv4:

    • Para criar um conjunto que possa armazenar múltiplos endereços IPv4 individuais:

      # nft add set inet example_table example_set { type ipv4_addr }; }
    • Para criar um conjunto que possa armazenar faixas de endereços IPv4:

      # nft add set inet example_table example_set { type ipv4_addr \; flags interval \; }
    Importante

    Para evitar que a casca interprete os ponto-e-vírgula como o fim do comando, você deve escapar dos pontos-e-vírgula com uma barra invertida.

  2. Opcionalmente, criar regras que utilizem o conjunto. Por exemplo, o seguinte comando adiciona uma regra ao example_chain no site example_table que irá descartar todos os pacotes de endereços IPv4 em example_set.

    # nft add rule inet example_table example_chain ip saddr @example_set drop

    Como example_set ainda está vazio, a regra atualmente não tem efeito.

  3. Adicionar endereços IPv4 a example_set:

    • Se você criar um conjunto que armazene endereços IPv4 individuais, entre:

      # nft adicionar elemento inet example_table example_set { 192.0.2.1, 192.0.2.2 }
    • Se você criar um conjunto que armazene faixas IPv4, entre:

      # nft adicionar elemento inet example_table example_set { 192.0.2.0-192.0.2.255 }

      Quando você especifica uma faixa de endereços IP, você pode alternativamente usar a notação Classless Inter-Domain Routing (CIDR), como por exemplo 192.0.2.0/24 no exemplo acima.