6.6.2. Uso de mapas de veredicto mutables en nftables
El marco nftables admite mapas de veredicto mutables. Puedes utilizar estos mapas en múltiples reglas dentro de una tabla. Otra ventaja con respecto a los mapas literales es que puedes actualizar un mapa mutable sin reemplazar las reglas que lo utilizan.
Cuando se crea un mapa de veredicto mutable, se debe especificar el tipo de elementos
-
ipv4_addrpara un mapa cuya parte coincidente contiene una dirección IPv4, como192.0.2.1. -
ipv6_addrpara un mapa cuya parte coincidente contiene una dirección IPv6, como2001:db8:1::1. -
ether_addrpara un mapa cuya parte coincidente contiene una dirección de control de acceso al medio (MAC), como52:54:00:6b:66:42. -
inet_protopara un mapa cuya parte coincidente contiene un tipo de protocolo de Internet, comotcp. -
inet_servicepara un mapa cuya parte de coincidencia contiene un número de puerto de nombre de servicios de Internet, comossho22. -
markpara un mapa cuya parte coincidente contiene una marca de paquete. Una marca de paquete puede ser cualquier valor entero positivo de 32 bits (0a2147483647. -
counterpara un mapa cuya parte de coincidencia contiene un valor de contador. El valor del contador puede ser cualquier valor entero positivo de 64 bits. -
quotapara un mapa cuya parte de coincidencia contiene un valor de cuota. El valor de la cuota puede ser cualquier valor entero positivo de 64 bits.
El ejemplo describe cómo permitir o descartar paquetes entrantes basándose en su dirección IP de origen. Utilizando un mapa de veredicto mutable, sólo se requiere una única regla para configurar este escenario, mientras que las direcciones IP y las acciones se almacenan dinámicamente en el mapa. El procedimiento también describe cómo añadir y eliminar entradas del mapa.
Procedimiento
Cree una tabla. Por ejemplo, para crear una tabla llamada
example_tableque procese paquetes IPv4:nft add table ip example_table
# nft add table ip example_tableCopy to Clipboard Copied! Toggle word wrap Toggle overflow Cree una cadena. Por ejemplo, para crear una cadena llamada
example_chainenexample_table:nft add chain ip example_table example_chain { type filter hook input priority 0 \_; }# nft add chain ip example_table example_chain { type filter hook input priority 0 \_; }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.
Cree un mapa vacío. Por ejemplo, para crear un mapa de direcciones IPv4:
nft add map ip example_table example_map { type ipv4_addr : verdict \; }# nft add map ip example_table example_map { type ipv4_addr : verdict \; }Copy to Clipboard Copied! Toggle word wrap Toggle overflow Cree reglas que utilicen el mapa. Por ejemplo, el siguiente comando añade una regla a
example_chainenexample_tableque aplica acciones a las direcciones IPv4 que están definidas enexample_map:nft add rule example_table example_chain ip saddr vmap @example_map
# nft add rule example_table example_chain ip saddr vmap @example_mapCopy to Clipboard Copied! Toggle word wrap Toggle overflow Agregue las direcciones IPv4 y las acciones correspondientes a
example_map:nft add element ip example_table example_map { 192.0.2.1 : accept, 192.0.2.2 : drop }# nft add element ip example_table example_map { 192.0.2.1 : accept, 192.0.2.2 : drop }Copy to Clipboard Copied! Toggle word wrap Toggle overflow Este ejemplo define las asignaciones de direcciones IPv4 a acciones. En combinación con la regla creada anteriormente, el cortafuegos acepta los paquetes de
192.0.2.1y los descarta de192.0.2.2.Opcionalmente, puede mejorar el mapa añadiendo otra dirección IP y una declaración de acción:
nft add element ip example_table example_map { 192.0.2.3 : accept }# nft add element ip example_table example_map { 192.0.2.3 : accept }Copy to Clipboard Copied! Toggle word wrap Toggle overflow Opcionalmente, eliminar una entrada del mapa:
nft delete element ip example_table example_map { 192.0.2.1 }# nft delete element ip example_table example_map { 192.0.2.1 }Copy to Clipboard Copied! Toggle word wrap Toggle overflow Opcionalmente, mostrar el conjunto de reglas:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow