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_addrpara um conjunto que contenha endereços ou faixas IPv4, como192.0.2.1ou192.0.2.0/24. -
ipv6_addrpara um conjunto que contenha endereços ou faixas IPv6, como2001:db8:1::1ou2001:db8:1::1/64. -
ether_addrpara um conjunto que contém uma lista de endereços de controle de acesso à mídia (MAC), como52:54:00:6b:66:42. -
inet_protopara um conjunto que contém uma lista de tipos de protocolos de Internet, comotcp. -
inet_servicepara um conjunto que contém uma lista de serviços de Internet, tais comossh. -
markpara um conjunto que contém uma lista de marcas de pacotes. As marcas de pacotes podem ser qualquer valor inteiro positivo de 32 bits (0a2147483647].
Pré-requisitos
-
A cadeia
example_chaine a tabelaexample_tableexistem.
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 }; }# nft add set inet example_table example_set { type ipv4_addr }; }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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 \; }# nft add set inet example_table example_set { type ipv4_addr \; flags interval \; }Copy to Clipboard Copied! Toggle word wrap Toggle overflow
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_chainno siteexample_tableque irá descartar todos os pacotes de endereços IPv4 emexample_set.nft add rule inet example_table example_chain ip saddr @example_set drop
# nft add rule inet example_table example_chain ip saddr @example_set dropCopy to Clipboard Copied! Toggle word wrap Toggle overflow Como
example_setainda 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 }# nft adicionar elemento inet example_table example_set { 192.0.2.1, 192.0.2.2 }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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 }# nft adicionar elemento inet example_table example_set { 192.0.2.0-192.0.2.255 }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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/24no exemplo acima.