26.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_addrpara un conjunto que contiene direcciones o rangos IPv4, como192.0.2.1o192.0.2.0/24. -
ipv6_addrpara un conjunto que contiene direcciones o rangos IPv6, como2001:db8:1::1o2001:db8:1::1/64. -
ether_addrpara un conjunto que contiene una lista de direcciones de control de acceso al medio (MAC), como52:54:00:6b:66:42. -
inet_protopara un conjunto que contiene una lista de tipos de protocolo de Internet, comotcp. -
inet_servicepara un conjunto que contiene una lista de servicios de Internet, comossh. -
markpara un conjunto que contiene una lista de marcas de paquetes. Las marcas de paquetes pueden ser cualquier valor entero positivo de 32 bits (0a2147483647].
Requisitos previos
-
La cadena
example_chainy la tablaexample_tableexisten.
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 \; }# nft add set inet example_table example_set { type ipv4_addr \; }Copy to Clipboard Copied! Toggle word wrap Toggle overflow Para crear un conjunto que pueda almacenar rangos de direcciones IPv4:
nft add set inet example_table example_set { type ipv4_addr \; flags interval \; }# nft add set inet example_table example_set { type ipv4_addr \; flags interval \; }Copy to Clipboard Copied! Toggle word wrap Toggle overflow
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_chainen elexample_tableque descartará todos los paquetes de las direcciones IPv4 enexample_set.nft add rule inet example_table example_chain ip saddr @example_set drop
# nft add rule inet example_table example_chain ip saddr @example_set dropCopy to Clipboard Copied! Toggle word wrap Toggle overflow Como
example_setestá 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 }# nft add element inet example_table example_set { 192.0.2.1, 192.0.2.2 }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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 }# nft add element inet example_table example_set { 192.0.2.0-192.0.2.255 }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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/24en el ejemplo anterior.