Red Hat Training

A Red Hat training course is available for RHEL 8

26.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.

26.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 26.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

  1. Crie o example_table:

    # nft adicionar tabela inet exemplo_tabela
  2. Criar a cadeia tcp_packets em example_table:

    # nft add chain inet exemplo_tabela tcp_packets
  3. Adicione uma regra a tcp_packets que conta o tráfego nesta cadeia:

    # nft add rule inet example_table tcp_packets counter
  4. Crie a cadeia udp_packets em example_table

    # nft add chain inet exemplo_tabela udp_packets
  5. Adicione uma regra a udp_packets que conta o tráfego nesta cadeia:

    # nft add rule inet example_table udp_packets counter
  6. Criar uma cadeia para o tráfego de entrada. Por exemplo, para criar uma cadeia chamada incoming_traffic em example_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}; }
  7. 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.

  8. 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 e udp_packets exibem tanto o número de pacotes recebidos quanto o número de bytes.