6.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, como192.0.2.1
ou192.0.2.0/24
. -
ipv6_addr
para um conjunto que contenha endereços ou faixas IPv6, como2001:db8:1::1
ou2001:db8:1::1/64
. -
ether_addr
para um conjunto que contém uma lista de endereços de controle de acesso à mídia (MAC), como52:54:00:6b:66:42
. -
inet_proto
para um conjunto que contém uma lista de tipos de protocolos de Internet, comotcp
. -
inet_service
para um conjunto que contém uma lista de serviços de Internet, tais comossh
. -
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
a2147483647
].
Pré-requisitos
-
A cadeia
example_chain
e a tabelaexample_table
existem.
Procedimento
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 \; }
ImportantePara 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.
Opcionalmente, criar regras que utilizem o conjunto. Por exemplo, o seguinte comando adiciona uma regra ao
example_chain
no siteexample_table
que irá descartar todos os pacotes de endereços IPv4 emexample_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.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.