Inicio rápido de nftables: tablas, cadenas, reglas y operaciones comunes

Un inicio rápido y práctico de nftables: comprenda la tabla, la cadena y la regla, luego use comandos comunes para IP, MAC, coincidencia de puertos, contadores de tráfico, limitación de velocidad y limpieza de reglas.

nftables es una herramienta común de administración de reglas de firewall y filtrado de paquetes en Linux. Si solo necesita control de acceso al dispositivo, contadores de tráfico, coincidencia de puertos o limitación de velocidad básica, no necesita aprender todo el sistema de reglas de una vez. Comience con tres conceptos:

  • table: un contenedor de reglas.
  • cadena: donde se evalúan las reglas, generalmente unidas a un gancho.
  • regla: la condición y acción coincidentes reales.

Este artículo describe un flujo de trabajo mínimo que es adecuado para realizar pruebas primero en un entorno seguro.

Estructura básica

Prepare algunas variables primero. Los siguientes comandos los reutilizan:

1
2
3
4
5
table=customtable
chain=custom_control
target=drop
ip=192.168.18.251
mac=00:00:01:02:03:04

Cree una tabla inet que admita IPv4 e IPv6:

1
nft add table inet $table

Luego cree una cadena adjunta a la etapa “adelante”:

1
nft add chain inet $table $chain { type filter hook forward priority 0\; }

Aquí, “tipo filtro” significa que se trata de una cadena de reglas de filtrado y “enganche hacia adelante” significa que procesa paquetes reenviados.

Métodos de coincidencia comunes

Coincidencia por IP de origen. Esto suele ser útil para la dirección de carga:

1
nft add rule inet $table $chain ip saddr $ip $target

Coincidencia por IP de destino. Esto suele ser útil para la dirección de descarga:

1
nft add rule inet $table $chain ip daddr $ip $target

Cuando se hace coincidir por dirección MAC, se puede usar ether saddr para controlar el tráfico ascendente:

1
nft add rule inet $table $chain ether saddr $mac $target

Tenga en cuenta que en redes que implican puenteo, reenvío o traducción de direcciones, es posible que los paquetes descendentes no siempre se filtren de manera confiable por MAC de destino. Para el control de acceso al dispositivo, comience validando primero ether saddr o las reglas basadas en IP.

Para hacer coincidir los puertos, puede cubrir tanto TCP como UDP:

1
nft add rule inet $table $chain { tcp, udp } dport 22 $target

Para hacer coincidir un rango de puertos, utilice una expresión de comparación:

1
nft add rule inet $table $chain tcp dport \>= 1024 $target

Contar el tráfico para un dispositivo

Si solo desea contar el tráfico de carga y descarga para una dirección IP, utilice “contrarretorno”. Después de una coincidencia, registra el contador y regresa, lo que puede reducir aún más los gastos generales de coincidencia cuando existan más reglas estadísticas más adelante.

1
2
nft add rule inet $table $chain ip saddr $ip counter return
nft add rule inet $table $chain ip daddr $ip counter return

Ver las estadísticas:

1
nft list chain inet $table $chain

Si necesita ver el “identificador” de cada regla, agregue “-a”:

1
nft -a list chain inet $table $chain

handle es importante porque nftables generalmente depende de él para eliminar una sola regla.

Limitación de tasa básica

La limitación de la tasa se puede realizar con “tasa límite superior”. Por ejemplo, limite el tráfico a una velocidad específica por dirección MAC:

1
2
3
4
rate=10
unit=mbytes

nft add rule inet $table $chain ether saddr $mac limit rate over $rate $unit/second drop

Aquí, “mbytes” y “kbytes” pueden entenderse como las unidades habituales M y K. No es necesario multiplicar manualmente por 8. En la práctica, comience con un valor más relajado, confirme la dirección y el efecto correspondientes y luego apriételo si es necesario.

Eliminar y limpiar reglas

Primera lista de reglas con valores de control:

1
nft -a list chain inet $table $chain

Luego elimine una regla por identificador:

1
nft delete rule inet $table $chain handle <handle>

Lavar una cadena:

1
nft flush chain inet $table $chain

Eliminar una cadena:

1
nft delete chain inet $table $chain

Eliminar toda la tabla:

1
nft delete table inet $table

Durante la depuración diaria, limpie únicamente la tabla que creó usted mismo. Evite cambiar directamente las tablas generadas automáticamente por el sistema u otros servicios. Esto facilita la reversión incluso si una regla está escrita incorrectamente.

Notas de uso

Cuando se utilizan nftables, suele ser más seguro crear primero su propia tabla y cadena independientes. Esto tiene dos beneficios:

  1. Es menos probable que sus reglas se mezclen con las reglas del sistema existente.
  2. La depuración, el vaciado y la eliminación son más seguros.

Después de escribir reglas, utilice siempre nft list chain para verificar el comportamiento de coincidencia real. Las reglas de MAC, interfaz, puerto y límite de velocidad pueden comportarse de manera diferente entre dispositivos, configuraciones de puente y versiones del sistema. Las pruebas de pequeño alcance son más seguras que escribir reglas complejas todas a la vez.

Referencias

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