6.6.2. Usando mapas de veredictos mutáveis em nftables
A estrutura nftables suporta mapas de veredictos mutáveis. Você pode usar estes mapas em várias regras dentro de uma tabela. Outro benefício sobre os mapas literais é que você pode atualizar um mapa mutável sem substituir as regras que o utilizam.
Quando você cria um mapa de veredicto mutável, você deve especificar o tipo de elementos
-
ipv4_addrpara um mapa cuja parte correspondente contém um endereço IPv4, tal como192.0.2.1. -
ipv6_addrpara um mapa cuja parte correspondente contém um endereço IPv6, tal como2001:db8:1::1. -
ether_addrpara um mapa cuja parte correspondente contém um endereço de controle de acesso à mídia (MAC), tal como52:54:00:6b:66:42. -
inet_protopara um mapa cuja parte correspondente contém um tipo de protocolo Internet, tal comotcp. -
inet_servicepara um mapa cuja parte correspondente contém um número de porta do nome dos serviços da Internet, comosshou22. -
markpara um mapa cuja parte correspondente contém uma marca de pacote. Uma marca de pacote pode ser qualquer valor inteiro positivo de 32 bits (0a2147483647. -
counterpara um mapa cuja parte correspondente contém um contravalor. O valor do contador pode ser qualquer valor inteiro positivo de 64 bits. -
quotapara um mapa cuja parte correspondente contém um valor de cota. O valor da cota pode ser qualquer valor inteiro positivo de 64 bits.
O exemplo descreve como permitir ou largar pacotes de entrada com base em seu endereço IP de origem. Usando um mapa de veredicto mutável, é necessária apenas uma única regra para configurar este cenário enquanto os endereços IP e ações são armazenados dinamicamente no mapa. O procedimento também descreve como adicionar e remover entradas do mapa.
Procedimento
Criar uma mesa. Por exemplo, para criar uma tabela chamada
example_tableque processa pacotes IPv4:nft adicionar tabela ip exemplo_tabela
# nft adicionar tabela ip exemplo_tabelaCopy to Clipboard Copied! Toggle word wrap Toggle overflow Criar uma corrente. Por exemplo, para criar uma cadeia chamada
example_chainemexample_table:nft add chain ip example_table example_chain { type filter hook input priority 0 {\i1}; {\i1}# nft add chain ip example_table example_chain { type filter hook input priority 0 {\i1}; {\i1}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.
Criar um mapa vazio. Por exemplo, para criar um mapa para endereços IPv4:
nft add map ip example_table example_map { type ipv4_addr : veredicto }# nft add map ip example_table example_map { type ipv4_addr : veredicto }Copy to Clipboard Copied! Toggle word wrap Toggle overflow Criar regras que utilizem o mapa. Por exemplo, o seguinte comando adiciona uma regra a
example_chainemexample_tableque aplica ações a endereços IPv4 que são ambos definidos emexample_map:nft add rule example_table example_chain ip saddr vmap @example_map
# nft add rule example_table example_chain ip saddr vmap @example_mapCopy to Clipboard Copied! Toggle word wrap Toggle overflow Adicionar endereços IPv4 e ações correspondentes a
example_map:nft adicionar elemento ip example_table example_map { 192.0.2.1 : aceitar, 192.0.2.2 : largar }# nft adicionar elemento ip example_table example_map { 192.0.2.1 : aceitar, 192.0.2.2 : largar }Copy to Clipboard Copied! Toggle word wrap Toggle overflow Este exemplo define os mapeamentos de endereços IPv4 para ações. Em combinação com a regra criada acima, o firewall aceita pacotes de
192.0.2.1e deixa cair pacotes de192.0.2.2.Opcionalmente, melhore o mapa adicionando outro endereço IP e declaração de ação:
nft adicionar elemento ip example_table example_map { 192.0.2.3 : aceitar }# nft adicionar elemento ip example_table example_map { 192.0.2.3 : aceitar }Copy to Clipboard Copied! Toggle word wrap Toggle overflow Opcionalmente, remova uma entrada do mapa:
nft apagar elemento ip example_table example_map { 192.0.2.1 }# nft apagar elemento ip example_table example_map { 192.0.2.1 }Copy to Clipboard Copied! Toggle word wrap Toggle overflow Opcionalmente, exibir o conjunto de regras:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow