Comprensión del marco de trabajo de nftables: tablas, cadenas, reglas y conjuntos

Una descripción general a nivel conceptual del marco de nftables: para qué sirven la tabla, familia, cadena, regla, conjunto, mapa y mapa de veredicto, y cómo trabajan juntos para formar reglas de firewall mantenibles.

Al aprender nftables, es fácil comenzar con los detalles del comando: cómo agregar una regla, cómo eliminar un identificador o cómo escribir una coincidencia de puerto. Los comandos son importantes, pero si primero comprende el marco, leer reglas, solucionar problemas y diseñar conjuntos de reglas será mucho más fácil.

Puedes pensar en nftables como una estructura en capas:

  • table aísla los espacios de nombres de reglas.
  • La “familia” decide a qué protocolos de red se aplican las reglas.
  • “cadena” decide en qué etapa se ejecutan las reglas.
  • La regla define el partido y la acción reales.
  • set, map y verdict map reducen las reglas repetidas y facilitan el mantenimiento de los conjuntos de reglas.

Las siguientes secciones explican estos conceptos capa por capa.

tabla: espacio de nombres de reglas

table es el contenedor de reglas más externo en nftables. Las diferentes tablas están aisladas entre sí, por lo que una práctica común es colocar reglas relacionadas en la misma tabla.

Por ejemplo, puede separar reglas de filtrado, reglas NAT o reglas de prueba personalizadas. Esto mantiene los límites claros: al depurar, sabes qué grupo de reglas estás cambiando; Al limpiar, es menos probable que elimines por error contenido no relacionado.

Una tabla en sí misma no procesa paquetes directamente. Los objetos de cadena y regla dentro de la tabla son los que realmente participan en el procesamiento de paquetes.

familia: a qué protocolos se aplican las reglas

Al crear una tabla, debe elegir una “familia”. Determina a qué tipo de paquetes se aplican las reglas de la tabla.

Las familias comunes se pueden entender de esta manera:

  • ip: solo maneja IPv4.
  • ip6: solo maneja IPv6.
  • inet: maneja tanto IPv4 como IPv6.
  • arp: maneja ARP.
  • bridge: maneja el tráfico de la capa de puente.
  • netdev: más cercano a la ruta de ingreso del dispositivo de red, adecuado para manejar el tráfico en una etapa anterior.

Para las reglas de firewall ordinarias, se utiliza comúnmente “inet”. Le permite mantener las reglas de IPv4 e IPv6 en la misma tabla y evita mantener dos estructuras de reglas similares.

cadena: Dónde se ejecutan las reglas

“cadena” es una lista de reglas. Después de que un paquete ingresa a un gancho, pasa por las reglas de la cadena en orden.

Las cadenas se pueden dividir a grandes rasgos en dos tipos:

  1. Cadena base: adjunta a un gancho en la ruta de la red del kernel y llamada activamente por el flujo de paquetes.
  2. Cadena normal: no unida directamente a un gancho; debe ser llamado mediante saltos de otras reglas.

Una cadena base suele especificar varias propiedades clave:

  • tipo: el propósito de la cadena, como filtro, nat o ruta.
  • hook: la etapa de procesamiento, como prerouting, input, forward, output o postrouting.
  • prioridad: cuando existen varias cadenas en el mismo gancho, esto decide cuál se ejecuta primero.
  • política: la acción predeterminada cuando no coincide ninguna regla, comúnmente aceptar o eliminar.

El punto clave es que las reglas no entran en vigor en cualquier lugar. La misma regla tiene un significado completamente diferente cuando se coloca en “entrada”, “adelante” o “salida”.

regla: Coincidir condiciones más acciones

La “regla” es donde nftables realmente toma decisiones. Suele constar de dos partes:

  • Condiciones de coincidencia: IP de origen, IP de destino, protocolo, puerto, interfaz, estado de conexión, etc.
  • Acciones: aceptar, soltar, rechazar, contrarrestar, saltar, regresar, etc. Las reglas se evalúan en orden. Después de que un paquete coincide con una acción que finaliza el procesamiento, las reglas posteriores ya no se evalúan. Si nada coincide, la evaluación continúa hasta que finaliza la cadena o se activa la política predeterminada.

Esta es la razón por la que el orden de las reglas es importante: las reglas más específicas generalmente deben aparecer antes que las reglas más amplias; de lo contrario, es posible que nunca tengan la oportunidad de ejecutarse.

set: Agrupar valores

Si necesita hacer coincidir muchas direcciones IP, puertos o interfaces, escribir muchas reglas separadas resulta difícil de mantener. set te permite administrar un grupo de valores del mismo tipo en un solo lugar.

Por ejemplo, un grupo de IP confiables, un grupo de puertos bloqueados o un grupo de direcciones que necesitan limitación de velocidad se pueden almacenar en un conjunto. La regla sólo necesita comprobar si un valor pertenece a ese conjunto.

Los beneficios del conjunto son:

  • Menos reglas.
  • Mejor legibilidad.
  • Adiciones y eliminaciones de elementos más sencillas posteriormente.

Cuando un conjunto de reglas contiene muchas condiciones repetidas, generalmente es el momento de considerar el conjunto.

map: asignar un valor coincidente a un resultado

“mapa” puede entenderse como una tabla de búsqueda. Devuelve un resultado basado en un valor de entrada.

Por ejemplo, diferentes puertos pueden asignarse a diferentes marcas, o diferentes direcciones pueden asignarse a diferentes parámetros de procesamiento. En comparación con escribir muchas reglas de estilo if/else, el mapa está más centralizado y es más fácil de mantener.

establecer respuestas “¿está este valor en la colección?”; el mapa responde “qué resultado corresponde a este valor”.

mapa de veredicto: asignar un valor coincidente a una acción

El “mapa de veredicto” es un uso importante del mapa: asigna un valor coincidente a un veredicto, lo que significa una acción de regla.

Por ejemplo, diferentes rangos de IP pueden corresponder a “aceptar”, “eliminar” o saltos a diferentes cadenas. Esto puede comprimir muchas ramas en una sola estructura.

Cuando un conjunto de reglas se vuelve más complejo, el mapa de veredictos es muy útil. Reduce las reglas repetidas y expresa la política más como una tabla que como una larga lista de declaraciones condicionales.

Diseñar reglas a partir de los conceptos

Al diseñar reglas de nftables, puedes pensar en este orden:

  1. Primero decida a qué “familia” pertenecen las reglas.
  2. Luego decida en qué “tabla” deberían entrar.
  3. Elija el “gancho” y la “cadena” adecuados.
  4. Escribe la “regla” concreta.
  5. Si hay muchas condiciones repetidas, introduzca “conjunto”, “mapa” o “mapa de veredicto”.

Las reglas escritas de esta manera son más fáciles de mantener y de solucionar problemas.

Resumen

Los conceptos de nftables no son complicados, pero la jerarquía importa:

  • la tabla define los límites de las reglas.
  • la familia define el alcance del protocolo.
  • la cadena define la posición de ejecución.
  • la regla define la coincidencia y la acción.
  • establecer, mapear y veredicto gestionar la complejidad.

Primero comprenda estos conceptos y luego observe los comandos concretos. Esto es más confiable que memorizar comandos directamente. Especialmente después de que un conjunto de reglas crece, los conceptos claros lo ayudan a determinar si un problema está en el alcance del protocolo, la etapa de ejecución, el orden de las reglas o la condición de coincidencia en sí.

Referencias

记录并分享
Creado con Hugo
Tema Stack diseñado por Jimmy