nftables es un subsistema del núcleo Linux que proporciona filtrado y clasificación de paquetes /datagramas/tramas de red. Está disponible desde la versión 3.13 del núcleo Linux, publicada el 19 de enero de 2014. [2]
nftables reemplaza al componente iptables heredado de Netfilter . Entre las ventajas de nftables sobre iptables se encuentra una menor duplicación de código y una extensión más sencilla a nuevos protocolos. Entre las desventajas de nftables se encuentra que no se admite el DPI que se proporcionaba mediante el filtrado SNI como "iptables string match" . [3]
nftables se configura a través de la utilidad de espacio de usuario nft , mientras que las herramientas heredadas se configuran a través de las utilidades iptables , ip6tables , arptables y ebtables .
nftables utiliza los componentes básicos de la infraestructura de Netfilter , como los enlaces existentes a la pila de red, el sistema de seguimiento de conexiones, el componente de cola de espacio de usuario y el subsistema de registro.
Un comando para descartar cualquier paquete con dirección IP de destino 1.2.3.4
:
nft agregar regla filtro ip salida ip daddr 1.2.3.4 soltar
Tenga en cuenta que la nueva sintaxis difiere significativamente de la de iptables, en la que se escribiría la misma regla:
iptables -A SALIDA -d 1.2.3.4 -j ELIMINAR
La nueva sintaxis puede parecer más verbosa, pero también es mucho más flexible. nftables incorpora estructuras de datos avanzadas, como diccionarios, mapas y concatenaciones, que no existen en iptables. Su uso puede reducir significativamente la cantidad de cadenas y reglas necesarias para expresar un diseño de filtrado de paquetes determinado.
La iptables-translate
herramienta se puede utilizar para traducir muchas reglas iptables existentes a reglas nftables equivalentes. [4] [5] Debian 10 (Buster) , entre otras distribuciones de Linux , utiliza nftables junto con iptables-translate
como backend de filtrado de paquetes predeterminado. [6]
El proyecto fue presentado públicamente por primera vez en el Netfilter Workshop 2008 por Patrick McHardy del equipo principal de Netfilter. [7] La primera versión preliminar de la implementación del kernel y del espacio de usuario se realizó en marzo de 2009. [8] Aunque la herramienta ha sido llamada "el mayor cambio en el firewalling de Linux desde la introducción de iptables en 2001", ha recibido poca atención de la prensa. [9] El conocido hacker Fyodor Vaskovich (Gordon Lyon) dijo que está "esperando su lanzamiento general en el kernel de Linux principal ". [9]
El proyecto permaneció en la etapa alfa y el sitio web oficial fue eliminado en 2009. En marzo de 2010, los correos electrónicos del autor en las listas de correo del proyecto mostraban que el proyecto aún estaba activo y se acercaba a una versión beta, [10] [11] pero esta última nunca se lanzó oficialmente. En octubre de 2012, Pablo Neira Ayuso propuso una capa de compatibilidad para iptables [12] y anunció una posible inclusión del proyecto en el kernel principal.
El 16 de octubre de 2013, Pablo Neira Ayuso envió una solicitud de extracción del núcleo de nftables al árbol principal del kernel de Linux . [13] Se fusionó con la línea principal del kernel el 19 de enero de 2014, con el lanzamiento de la versión 3.13 del kernel de Linux. [2]
El motor del núcleo nftables añade una máquina virtual sencilla al núcleo Linux que puede ejecutar bytecode para inspeccionar un paquete de red y tomar decisiones sobre cómo debe manejarse ese paquete. Las operaciones implementadas por esta máquina virtual se hacen intencionalmente básicas. Puede obtener datos del propio paquete, echar un vistazo a los metadatos asociados (interfaz de entrada, por ejemplo) y gestionar los datos de seguimiento de la conexión. Se pueden utilizar operadores aritméticos, bit a bit y de comparación para tomar decisiones basadas en esos datos. La máquina virtual también es capaz de manipular conjuntos de datos (normalmente, direcciones IP), lo que permite sustituir múltiples operaciones de comparación por una única búsqueda de conjunto. [14]
La organización descrita anteriormente es contraria al código de firewall de iptables, que tiene el conocimiento del protocolo incorporado tan profundamente en la lógica que el código tuvo que ser replicado cuatro veces (para IPv4 , IPv6 , ARP y puente Ethernet ), ya que los motores de firewall son demasiado específicos del protocolo para ser utilizados de manera genérica. [14]
Las principales ventajas de nftables sobre iptables son la simplificación de la ABI del kernel de Linux , la reducción de la duplicación de código , la mejora en la generación de informes de errores y una ejecución, almacenamiento y cambios incrementales más eficientes de las reglas de filtrado. Los tradicionalmente utilizados , , y (para IPv4, IPv6, ARP y puentes Ethernet, respectivamente) están pensados para ser reemplazados por como una única implementación unificada, que proporciona la configuración del firewall sobre la máquina virtual en el kernel.
nftables también ofrece una API de espacio de usuario mejorada que permite reemplazos atómicos de una o más reglas de firewall dentro de una sola transacción Netlink . Esto acelera los cambios de configuración del firewall para configuraciones que tienen conjuntos de reglas grandes; también puede ayudar a evitar condiciones de carrera mientras se ejecutan los cambios de reglas. nftables también incluye características de compatibilidad para facilitar la transición desde firewalls anteriores, utilidades de línea de comandos para convertir reglas en el formato iptables, [15] y versiones compatibles con la sintaxis de los comandos iptables que usan el backend de nftables. [16]