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_addr
para un mapa cuya parte coincidente contiene una dirección IPv4, como192.0.2.1
. -
ipv6_addr
para un mapa cuya parte coincidente contiene una dirección IPv6, como2001:db8:1::1
. -
ether_addr
para un mapa cuya parte coincidente contiene una dirección de control de acceso al medio (MAC), como52:54:00:6b:66:42
. -
inet_proto
para un mapa cuya parte coincidente contiene un tipo de protocolo de Internet, comotcp
. -
inet_service
para un mapa cuya parte de coincidencia contiene un número de puerto de nombre de servicios de Internet, comossh
o22
. -
mark
para un mapa cuya parte coincidente contiene una marca de paquete. Una marca de paquete puede ser cualquier valor entero positivo de 32 bits (0
a2147483647
. -
counter
para un mapa cuya parte de coincidencia contiene un valor de contador. El valor del contador puede ser cualquier valor entero positivo de 64 bits. -
quota
para 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_table
que procese paquetes IPv4:# nft add table ip example_table
Cree una cadena. Por ejemplo, para crear una cadena llamada
example_chain
enexample_table
:# nft add chain ip example_table example_chain { type filter hook input priority 0 \_; }
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 \; }
Cree reglas que utilicen el mapa. Por ejemplo, el siguiente comando añade una regla a
example_chain
enexample_table
que aplica acciones a las direcciones IPv4 que están definidas enexample_map
:# nft add rule example_table example_chain ip saddr vmap @example_map
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 }
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.1
y 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 }
Opcionalmente, eliminar una entrada del mapa:
# nft delete element ip example_table example_map { 192.0.2.1 }
Opcionalmente, mostrar el conjunto de reglas:
# nft list ruleset table ip example_table { map example_map { type ipv4_addr : verdict elements = { 192.0.2.2 : drop, 192.0.2.3 : accept } } chain example_chain { type filter hook input priority filter; policy accept; ip saddr vmap @example_map } }