6.6. Usando mapas de veredictos em comandos nftables
Os mapas verídicos, que também são conhecidos como dicionários, permitem que nft
execute uma ação baseada em informações de pacotes, mapeando critérios de correspondência a uma ação.
6.6.1. Usando mapas literais em nftables
Um mapa literal é um { match_criteria : action }
declaração de que você usa diretamente em uma regra. A declaração pode conter vários mapeamentos separados por vírgula.
A desvantagem de um mapa literal é que se você quiser mudar o mapa, você deve substituir a regra. Para uma solução dinâmica, use mapas de veredictos nomeados, como descrito em Seção 6.6.2, “Usando mapas de veredictos mutáveis em nftables”.
O exemplo descreve como usar um mapa literal para encaminhar tanto os pacotes TCP e UDP do protocolo IPv4 e IPv6 para diferentes cadeias a fim de contar separadamente os pacotes TCP e UDP que chegam.
Procedimento
Crie o
example_table
:# nft adicionar tabela inet exemplo_tabela
Criar a cadeia
tcp_packets
emexample_table
:# nft add chain inet exemplo_tabela tcp_packets
Adicione uma regra a
tcp_packets
que conta o tráfego nesta cadeia:# nft add rule inet example_table tcp_packets counter
Crie a cadeia
udp_packets
emexample_table
# nft add chain inet exemplo_tabela udp_packets
Adicione uma regra a
udp_packets
que conta o tráfego nesta cadeia:# nft add rule inet example_table udp_packets counter
Criar uma cadeia para o tráfego de entrada. Por exemplo, para criar uma cadeia chamada
incoming_traffic
emexample_table
que filtra o tráfego de entrada:# nft add chain inet example_table incoming_traffic { type filter hook input priority 0 { type filter hook input priority 0}; }
Adicione uma regra com um mapa literal a
incoming_traffic
:# nft add rule inet example_table incoming_traffic ip protocol vmap { tcp : jump tcp_packets, udp : jump udp_packets }
O mapa literal distingue os pacotes e os envia para as diferentes cadeias de contadores com base em seu protocolo.
Para listar os balcões de trânsito, exibir
example_table
:# nft list table inet example_table table inet example_table { chain tcp_packets { counter packets 36379 bytes 2103816 } chain udp_packets { counter packets 10 bytes 1559 } chain incoming_traffic { type filter hook input priority filter; policy accept; ip protocol vmap { tcp : jump tcp_packets, udp : jump udp_packets } } }
Os balcões da cadeia
tcp_packets
eudp_packets
exibem tanto o número de pacotes recebidos quanto o número de bytes.