Netfilter es un marco de trabajo proporcionado por el kernel de Linux que permite implementar diversas operaciones de red mediante manejadores personalizados. Netfilter ofrece varias funciones y operaciones para el filtrado de paquetes , la traducción de direcciones de red y la traducción de puertos , lo que proporciona la funcionalidad necesaria para dirigir los paquetes a través de una red e impedir que lleguen a ubicaciones sensibles dentro de ella.
Netfilter representa un conjunto de ganchos dentro del núcleo de Linux, que permiten a módulos específicos del núcleo registrar funciones de devolución de llamada con la pila de red del núcleo. Estas funciones, que generalmente se aplican al tráfico en forma de reglas de filtrado y modificación, se llaman para cada paquete que atraviesa el gancho correspondiente dentro de la pila de red. [ 2 ]
Historia

Rusty Russell inició el proyecto netfilter/iptables en 1998; también fue el autor de su predecesor, ipchains . A medida que el proyecto creció, fundó el Equipo Central de Netfilter (o simplemente coreteam ) en 1999. El software que produjeron (llamado netfilter en adelante) utiliza la licencia GNU General Public License (GPL), y el 26 de agosto de 1999 se integró en la versión 2.3.15 del núcleo principal de Linux , pasando así a formar parte de la versión estable 2.4.0. [ 3 ]
En agosto de 2003, Harald Welte se convirtió en presidente del equipo principal. En abril de 2004, tras una ofensiva del proyecto contra quienes distribuían el software integrado en routers sin cumplir con la GPL, un tribunal alemán otorgó a Welte una histórica orden judicial contra Sitecom Alemania, que se negaba a acatar los términos de la GPL (véase Disputas relacionadas con la GPL ). En septiembre de 2007, Patrick McHardy, quien había liderado el desarrollo durante los años anteriores, fue elegido nuevo presidente del equipo principal.
Antes de iptables, los paquetes de software predominantes para crear cortafuegos en Linux eran ipchains en el kernel de Linux 2.2.x e ipfwadm en el kernel de Linux 2.0.x, [ 3 ] que a su vez se basaba en ipfw de BSD . Tanto ipchains como ipfwadm modifican el código de red para poder manipular paquetes, ya que el kernel de Linux carecía de un marco general de control de paquetes hasta la introducción de Netfilter.
Mientras que ipchains e ipfwadm combinan el filtrado de paquetes y la traducción de direcciones de red (NAT) (en particular, tres tipos específicos de NAT : enmascaramiento , reenvío de puertos y redirección ), Netfilter separa las operaciones de paquetes en varias partes, descritas a continuación. Cada una se conecta a los hooks de Netfilter en diferentes puntos para acceder a los paquetes. Los subsistemas de seguimiento de conexiones y NAT son más generales y potentes que las versiones rudimentarias de ipchains e ipfwadm.
En 2017 se agregó infraestructura de descarga de flujo IPv4 e IPv6 , lo que permitió una aceleración del reenvío de tablas de flujo de software y soporte de descarga de hardware. [ 4 ] [ 5 ]
Programas de utilidad para el espacio de usuario

iptables
Los módulos del kernel denominados ip_tables, ip6_tables, arp_tables(el guion bajo forma parte del nombre) y ebtablescomprenden la parte heredada de filtrado de paquetes del sistema de ganchos de Netfilter. Proporcionan un sistema basado en tablas para definir reglas de firewall que pueden filtrar o transformar paquetes. Las tablas se pueden administrar mediante las herramientas de espacio de usuario iptables, ip6tables, arptables, y ebtables. Nótese que, aunque tanto los módulos del kernel como las utilidades de espacio de usuario tienen nombres similares, cada uno de ellos es una entidad diferente con una funcionalidad distinta.
Cada tabla es, en realidad, un gancho independiente, y cada una se creó para cumplir una función específica. En lo que respecta a Netfilter, ejecuta una tabla en particular en un orden específico con respecto a las demás. Cualquier tabla puede llamarse a sí misma y ejecutar sus propias reglas, lo que permite realizar procesamientos e iteraciones adicionales.
Las reglas se organizan en cadenas, o en otras palabras, "cadenas de reglas". Estas cadenas se nombran con títulos predefinidos, incluidos INPUT, OUTPUTy FORWARD. Estos títulos de cadena ayudan a describir el origen en la pila de Netfilter. La recepción de paquetes, por ejemplo, se encuentra en PREROUTING, mientras que INPUTrepresenta los datos entregados localmente, y el tráfico reenviado se encuentra en la FORWARDcadena. La salida generada localmente pasa a través de la OUTPUTcadena, y los paquetes que se enviarán están en la POSTROUTINGcadena.
Los módulos de Netfilter que no están organizados en tablas (véase más abajo) son capaces de comprobar el origen para seleccionar su modo de funcionamiento.
iptable_rawmódulo- Al cargarse, registra un gancho que se ejecutará antes que cualquier otro gancho de Netfilter. Proporciona una tabla llamada raw que se puede usar para filtrar paquetes antes de que lleguen a operaciones que consumen más memoria, como el seguimiento de conexiones.
iptable_manglemódulo- Registra una tabla de enganches y manipulación que se ejecutará después del seguimiento de conexiones (ver más abajo) (pero antes que cualquier otra tabla), de modo que se puedan realizar modificaciones en el paquete. Esto permite modificaciones adicionales mediante reglas posteriores, como NAT o filtrado adicional.
iptable_natmódulo- Registra dos ganchos: las transformaciones basadas en la traducción de direcciones de red de destino ("DNAT") se aplican antes del gancho de filtro, y las transformaciones basadas en la traducción de direcciones de red de origen ("SNAT") se aplican después. La tabla de traducción de direcciones de red (o "nat") que se pone a disposición de iptables es simplemente una "base de datos de configuración" para asignaciones NAT únicamente, y no está destinada a ningún tipo de filtrado.
iptable_filtermódulo- Registra la tabla de filtros , utilizada para el filtrado de propósito general (cortafuegos).
security_filtermódulo- Se utiliza para reglas de red de Control de Acceso Obligatorio (MAC), como las habilitadas por los objetivos
SECMARKyCONNSECMARK. (Estos llamados "objetivos" se refieren a marcadores de Linux mejorados con seguridad). El Control de Acceso Obligatorio es implementado por Módulos de Seguridad de Linux como SELinux. La tabla de seguridad se llama después de la llamada a la tabla de filtros, lo que permite que cualquier regla de Control de Acceso Discrecional (DAC) en la tabla de filtros surta efecto antes que cualquier regla MAC. Esta tabla proporciona las siguientes cadenas integradas:INPUT(para paquetes que llegan al propio equipo),OUTPUT(para modificar paquetes generados localmente antes del enrutamiento) yFORWARD(para modificar paquetes que se enrutan a través del equipo).
nftables
nftables es la nueva parte de filtrado de paquetes de Netfilter. nftes la nueva utilidad de espacio de usuario que reemplaza a iptables, ip6tables, arptablesy ebtables.
El motor del kernel nftables agrega una máquina virtual simple al kernel de Linux, capaz de ejecutar código de bytes para inspeccionar un paquete de red y decidir cómo debe manejarse. Las operaciones implementadas por esta máquina virtual son intencionadamente básicas: puede obtener datos del propio paquete, examinar los metadatos asociados (interfaz de entrada, por ejemplo) y gestionar los datos de seguimiento de la conexión. Se pueden usar operadores aritméticos, de bits 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 reemplazar múltiples operaciones de comparación con una sola búsqueda de conjunto. [ 6 ]
Esto contrasta con el código heredado de Xtables (iptables, etc.), que tiene una conciencia de protocolo tan profundamente integrada en el código que ha tenido que ser replicado cuatro veces —para IPv4, IPv6, ARP y puenteo Ethernet —ya que los motores de firewall son demasiado específicos de protocolo para ser utilizados de manera genérica. [ 6 ] Las principales ventajas son la simplificación de la ABI del kernel de Linux , la reducción de la duplicación de código , la mejora de la notificación de errores y una ejecución, almacenamiento y cambios incrementales y atómicos más eficientes de las reglas de filtrado.iptables
Desfragmentación de paquetes
El nf_defrag_ipv4módulo desfragmentará los paquetes IPv4 antes de que lleguen al nf_conntrack_ipv4sistema de seguimiento de conexiones de Netfilter. Esto es necesario para los módulos auxiliares de seguimiento de conexiones y NAT integrados en el kernel (que son una especie de "mini- ALG "), los cuales solo funcionan de forma fiable con paquetes completos, no necesariamente con fragmentos.
El desfragmentador IPv6 no es un módulo independiente, sino que está integrado en el nf_conntrack_ipv6módulo.
Seguimiento de conexiones
Una de las características importantes del marco de trabajo Netfilter es el seguimiento de conexiones. [ 7 ] El seguimiento de conexiones permite al kernel mantener un registro de todas las conexiones o sesiones de red lógicas y, por lo tanto, relacionar todos los paquetes que pueden conformar esa conexión. NAT se basa en esta información para traducir todos los paquetes relacionados de la misma manera y iptablespuede usarla para funcionar como un cortafuegos con estado.
El estado de la conexión, sin embargo, es completamente independiente de cualquier estado de nivel superior, como el de TCP o SCTP. Esto se debe, en parte, a que al simplemente reenviar paquetes (es decir, sin entrega local), el motor TCP no necesariamente se activa. Incluso las transmisiones en modo sin conexión , como UDP , IPsec (AH/ESP), GRE y otros protocolos de tunelización, tienen, al menos, un estado de conexión simulado. La heurística para estos protocolos suele basarse en un valor de tiempo de espera preestablecido para la inactividad, tras cuya expiración se cierra la conexión de Netfilter.
Cada conexión de Netfilter se identifica de forma única mediante una tupla (protocolo de capa 3, dirección de origen, dirección de destino, protocolo de capa 4, clave de capa 4). La clave de capa 4 depende del protocolo de transporte; para TCP/UDP son los números de puerto, para túneles puede ser su ID, pero en otros casos es cero, como si no formara parte de la tupla. Para poder inspeccionar el puerto TCP en todos los casos, los paquetes se desfragmentarán obligatoriamente.
Las conexiones de Netfilter se pueden manipular con la herramienta de espacio de usuario conntrack.
iptablesSe puede utilizar la comprobación de la información de la conexión, como estados y otros datos, para que las reglas de filtrado de paquetes sean más potentes y fáciles de gestionar. Los estados más comunes son:
NEW- intentando crear una nueva conexión
ESTABLISHED- parte de una conexión ya existente
RELATED- asignado a un paquete que está iniciando una nueva conexión y que ha sido "esperado"; los mini-ALG mencionados anteriormente establecen estas expectativas, por ejemplo, cuando el
nf_conntrack_ftpmódulo ve un comando FTP " "PASV INVALID- Se determinó que el paquete no era válido , es decir, no se ajustaba al diagrama de estado TCP.
UNTRACKED- un estado especial que puede ser asignado por el administrador para omitir el seguimiento de conexión para un paquete en particular (ver tabla sin procesar, arriba).
Un ejemplo típico sería que el primer paquete que recibe el subsistema conntrack se clasificará como "nuevo", la respuesta como "establecido" y un error ICMP como "relacionado". Un paquete de error ICMP que no coincida con ninguna conexión conocida se clasificará como "inválido".
Ayudantes de seguimiento de conexiones
Mediante el uso de módulos de complemento, el seguimiento de conexiones puede adquirir conocimiento de los protocolos de la capa de aplicación y, por lo tanto, comprender que dos o más conexiones distintas están "relacionadas". Por ejemplo, consideremos el protocolo FTP . Se establece una conexión de control, pero cada vez que se transfieren datos, se establece una conexión independiente para dicha transferencia. Cuando nf_conntrack_ftpse carga el módulo, el primer paquete de una conexión de datos FTP se clasificará como "relacionado" en lugar de "nuevo", ya que lógicamente forma parte de una conexión existente.
Los asistentes solo inspeccionan un paquete a la vez, por lo que si la información vital para el seguimiento de la conexión se divide entre dos paquetes, ya sea por fragmentación IP o segmentación TCP, el asistente no necesariamente reconocerá patrones y, por lo tanto, no realizará su operación. La fragmentación IP se gestiona mediante el subsistema de seguimiento de la conexión, que requiere desfragmentación, aunque la segmentación TCP no se gestiona. En el caso de FTP, se considera que la segmentación no ocurre "cerca" de un comando, como sucede PASVcon los tamaños de segmento estándar, por lo que Netfilter tampoco la gestiona.
Traducción de direcciones de red
Cada conexión tiene un conjunto de direcciones originales y de respuesta , que inicialmente son las mismas. La traducción de direcciones de red (NAT) en Netfilter se implementa simplemente cambiando la dirección de respuesta y, si se desea, el puerto. Al recibir paquetes, su tupla de conexión también se compara con el par de direcciones de respuesta (y puertos). La ausencia de fragmentación es otro requisito para NAT. (Si es necesario, los paquetes IPv4 pueden ser refragmentados por la pila IPv4 normal, sin Netfilter).
Ayudantes NAT
Al igual que las herramientas de seguimiento de conexiones, las herramientas NAT inspeccionan los paquetes y sustituyen las direcciones originales por direcciones de respuesta en la carga útil.
Otros proyectos de Netfilter
Aunque no son módulos del kernel que utilicen directamente el código de Netfilter, el proyecto Netfilter alberga otros programas informáticos dignos de mención.
herramientas de seguimiento de conexión
conntrack-toolses un conjunto de herramientas de espacio de usuario para Linux que permiten a los administradores del sistema interactuar con las entradas y tablas de Seguimiento de conexiones. El paquete incluye el conntrackddemonio y la interfaz de línea de comandos conntrack. El demonio de espacio de usuario conntrackdse puede utilizar para habilitar cortafuegos con estado basados en clústeres de alta disponibilidad y recopilar estadísticas del uso del cortafuegos con estado. La interfaz de línea de comandos conntrackproporciona una interfaz más flexible al sistema de seguimiento de conexiones que la obsoleta /proc/net/nf_conntrack.
ipset
A diferencia de otras extensiones como Connection Tracking, ipset[ 8 ] está más relacionado con iptablesque con el código principal de Netfilter. ipsetPor ejemplo, no utiliza ganchos de Netfilter, sino que proporciona un iptablesmódulo para hacer coincidir y realizar modificaciones mínimas (establecer/borrar) en conjuntos de IP.
La herramienta de espacio de usuario ipsetse utiliza para configurar, mantener e inspeccionar los denominados "conjuntos de IP" en el kernel de Linux. Un conjunto de IP generalmente contiene un conjunto de direcciones IP , pero también puede contener conjuntos de otros números de red, según su "tipo". Estos conjuntos son mucho más eficientes en términos de búsqueda que iptableslas reglas simples, pero, por supuesto, pueden requerir mayor memoria. Se proporcionan diferentes algoritmos de almacenamiento (para las estructuras de datos en memoria) ipsetpara que el usuario seleccione la solución óptima.
Cualquier entrada de un conjunto puede vincularse a otro conjunto, lo que permite realizar operaciones de coincidencia sofisticadas. Un conjunto solo puede eliminarse (destruirse) si no existen iptablesreglas u otros conjuntos que hagan referencia a él.
proxy SYN
SYNPROXYEl objetivo permite gestionar grandes inundaciones SYN sin las importantes penalizaciones de rendimiento que impone el seguimiento de conexiones en estos casos. Al redirigir SYNlas solicitudes iniciales al SYNPROXYobjetivo, las conexiones no se registran en el seguimiento de conexiones hasta que alcanzan un ACKestado final validado, lo que libera al seguimiento de conexiones de contabilizar un gran número de conexiones potencialmente inválidas. De esta forma, SYNse pueden gestionar inundaciones masivas de manera eficaz. [ 9 ]
El 3 de noviembre de 2013, SYNla funcionalidad de proxy se integró en Netfilter con el lanzamiento de la versión 3.12 del kernel principal de Linux. [ 10 ] [ 11 ]
ulogd
ulogdes un demonio en el espacio de usuario para recibir y registrar paquetes y notificaciones de eventos de los subsistemas de Netfilter. ip_tablesPuede entregarle paquetes a través del mecanismo de colas del espacio de usuario, y el seguimiento de conexiones puede interactuar con él ulogdpara intercambiar más información sobre paquetes o eventos (como la finalización de la conexión, la configuración de NAT).
Bibliotecas de espacio de usuario
Netfilter también proporciona un conjunto de bibliotecas que tienen libnetfiltercomo prefijo en sus nombres, las cuales pueden usarse para realizar diferentes tareas desde el espacio de usuario. Estas bibliotecas se publican bajo la licencia GNU GPL versión 2. Específicamente, son las siguientes:
libnetfilter_queue- permite realizar la puesta en cola de paquetes en el espacio de usuario junto con iptables; basado en
libnfnetlink libnetfilter_conntrack- permite la manipulación de las entradas de seguimiento de conexión desde el espacio de usuario; basado en
libnfnetlink libnetfilter_log- permite la recopilación de mensajes de registro generados por iptables; basado en
libnfnetlink libnl-3-netfilter- permite operaciones en colas, seguimiento de conexiones y registros; parte del
libnlproyecto [ 12 ] libiptc- Permite realizar cambios en los conjuntos de reglas del firewall iptables; no se basa en ninguna
netlinkbiblioteca y su API es utilizada internamente por lasiptablesutilidades. libipset- permite operaciones en conjuntos IP; basado en
libmnl.
Talleres de Netfilter
El proyecto Netfilter organiza una reunión anual para desarrolladores, que se utiliza para debatir sobre las iniciativas de investigación y desarrollo en curso. El taller de Netfilter de 2018 tuvo lugar en Berlín, Alemania, en junio de 2018. [ 13 ]
Véase también
- Filtro de paquetes de Berkeley
- Demanda Geniatech contra McHardy (2018)
- Servidor virtual IP (IPVS, parte de LVS)
- ipchains , el predecesor de iptables
- IPFire , una distribución de cortafuegos que utiliza Netfilter.
- Servidor virtual Linux (LVS)
- Netlink , una API utilizada por las extensiones de Netfilter.
- Planificador de red , otro componente de bajo nivel de la pila de red.
- NPF (cortafuegos)
- PF (cortafuegos)
- Cortafuegos sencillo
Referencias
- ↑ Greg Kroah-Hartman (4 de julio de 2026). "Linux 7.1.3" . Consultado el 7 de julio de 2026 .
- ↑ "Página principal del proyecto netfilter/iptables - El proyecto netfilter.org" . netfilter.org . Consultado el 4 de julio de 2014 .
- 1 2 Harald Welte , Arqueología de los filtros de red: 18 años desde 2.3 hasta 4.x , 5 de diciembre de 2017
- ↑ "Infraestructura de descarga de flujo" . LWN.net .
- ↑ "Infraestructura de descarga de flujo" . LWN.net .
- 1 2 Jonathan Corbet (2013-08-20). "El regreso de nftables" . LWN.net . Recuperado el 22-10-2013 .
- ↑ Neira Ayuso, Pablo (14 de junio de 2006). "Sistema de seguimiento de conexiones de Netfilter" (PDF) .
- ↑ "Conjuntos de IP" . ipset.netfilter.org . Consultado el 4 de julio de 2014 .
- ↑ Patrick McHardy (2013-08-07). "netfilter: implementar netfilter SYN proxy" . LWN.net . Consultado el 2013-11-05 .
- ↑ "netfilter: agregar núcleo/objetivo SYNPROXY" . kernel.org. 27 de agosto de 2013. Consultado el 5 de noviembre de 2013 .
- ↑ "netfilter: agregar objetivo SYNPROXY IPv6" . kernel.org. 27 de agosto de 2013. Consultado el 5 de noviembre de 2013 .
- ↑ "Biblioteca Netfilter (libnl-nf)" . infradead.org. 2 de abril de 2013. Consultado el 28 de diciembre de 2013 .
- ↑ "14.º Taller de Netfilter" . workshop.netfilter.org. 26 de septiembre de 2018. Consultado el 26 de septiembre de 2018 .
Enlaces externos
- Sitio web oficial
- Página principal de conntrack-tools
- Página principal de ipset
- Página principal de ulogd
- Página principal de los sitios web de Netfilter Workshop
- " Cómo escribir módulos para Netfilter " (libro electrónico; 2009)
- " Netfilter e Iptables : cortafuegos con estado para Linux " (11 de octubre de 2001)
- Descripción general de la red por Rami Rosen
- Software de firewall
- Software gratuito relacionado con redes
- Software de seguridad gratuito
- Características del kernel de Linux