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, como192.0.2.1
o192.0.2.0/24
. -
ipv6_addr
para un conjunto que contiene direcciones o rangos IPv6, como2001:db8:1::1
o2001:db8:1::1/64
. -
ether_addr
para un conjunto que contiene una lista de direcciones de control de acceso al medio (MAC), como52:54:00:6b:66:42
. -
inet_proto
para un conjunto que contiene una lista de tipos de protocolo de Internet, comotcp
. -
inet_service
para un conjunto que contiene una lista de servicios de Internet, comossh
. -
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
a2147483647
].
Requisitos previos
-
La cadena
example_chain
y la tablaexample_table
existen.
Procedimiento
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 \; }
ImportantePara evitar que el shell interprete los puntos y comas como el final del comando, debe escapar los puntos y comas con una barra invertida.
Opcionalmente, cree reglas que utilicen el conjunto. Por ejemplo, el siguiente comando agrega una regla a la
example_chain
en elexample_table
que descartará todos los paquetes de las direcciones IPv4 enexample_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.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.