Red Hat Training

A Red Hat training course is available for RHEL 8

6.5.2. Uso de conjuntos con nombre en nftables

El marco nftables admite conjuntos con nombre mutables. Un conjunto con nombre es una lista o rango de elementos que se puede utilizar en múltiples reglas dentro de una tabla. Otra ventaja con respecto a los conjuntos anónimos es que se puede actualizar un conjunto con nombre sin sustituir las reglas que lo utilizan.

Cuando se crea un conjunto con nombre, se debe especificar el tipo de elementos que contiene el conjunto. Puede establecer los siguientes tipos:

  • ipv4_addr para un conjunto que contiene direcciones o rangos IPv4, como 192.0.2.1 o 192.0.2.0/24.
  • ipv6_addr para un conjunto que contiene direcciones o rangos IPv6, como 2001:db8:1::1 o 2001:db8:1::1/64.
  • ether_addr para un conjunto que contiene una lista de direcciones de control de acceso al medio (MAC), como 52:54:00:6b:66:42.
  • inet_proto para un conjunto que contiene una lista de tipos de protocolo de Internet, como tcp.
  • inet_service para un conjunto que contiene una lista de servicios de Internet, como ssh.
  • mark para un conjunto que contiene una lista de marcas de paquetes. Las marcas de paquetes pueden ser cualquier valor entero positivo de 32 bits (0 a 2147483647].

Requisitos previos

  • La cadena example_chain y la tabla example_table existen.

Procedimiento

  1. Cree un conjunto vacío. Los siguientes ejemplos crean un conjunto para direcciones IPv4:

    • Para crear un conjunto que pueda almacenar varias direcciones IPv4 individuales:

      # nft add set inet example_table example_set { type ipv4_addr \; }
    • Para crear un conjunto que pueda almacenar rangos de direcciones IPv4:

      # nft add set inet example_table example_set { type ipv4_addr \; flags interval \; }
    Importante

    Para evitar que el shell interprete los puntos y comas como el final del comando, debe escapar los puntos y comas con una barra invertida.

  2. Opcionalmente, cree reglas que utilicen el conjunto. Por ejemplo, el siguiente comando agrega una regla a la example_chain en el example_table que descartará todos los paquetes de las direcciones IPv4 en example_set.

    # nft add rule inet example_table example_chain ip saddr @example_set drop

    Como example_set está todavía vacío, la regla no tiene actualmente ningún efecto.

  3. Añadir direcciones IPv4 a example_set:

    • Si crea un conjunto que almacena direcciones IPv4 individuales, introduzca:

      # nft add element inet example_table example_set { 192.0.2.1, 192.0.2.2 }
    • Si crea un conjunto que almacena rangos IPv4, introduzca:

      # nft add element inet example_table example_set { 192.0.2.0-192.0.2.255 }

      Cuando se especifica un rango de direcciones IP, se puede utilizar alternativamente la notación Classless Inter-Domain Routing (CIDR), como 192.0.2.0/24 en el ejemplo anterior.