stringtranslate.com

Filtro de red

Netfilter es un marco de trabajo proporcionado por el núcleo de Linux que permite implementar diversas operaciones relacionadas con la red en forma de controladores 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 , que proporcionan la funcionalidad necesaria para dirigir paquetes a través de una red y prohibir que los paquetes lleguen a ubicaciones sensibles dentro de una red.

Netfilter representa un conjunto de enlaces dentro del núcleo Linux que permiten que módulos específicos del núcleo registren funciones de devolución de llamadas con la pila de red del núcleo. Esas funciones, que normalmente se aplican al tráfico en forma de reglas de filtrado y modificación, se invocan para cada paquete que atraviesa el enlace respectivo dentro de la pila de red. [2]

Historia

Relación de (algunos de) los diferentes componentes de Netfilter

Rusty Russell inició el proyecto netfilter/iptables en 1998; también fue autor del proyecto predecesor, ipchains . A medida que el proyecto crecía, fundó el equipo central de Netfilter (o simplemente coreteam ) en 1999. El software que produjeron (llamado netfilter de aquí en adelante) utiliza la licencia pública general de GNU (GPL), y el 26 de agosto de 1999 se fusionó con la versión 2.3.15 de la línea principal del núcleo Linux y, por lo tanto, se incluyó en la versión estable 2.4.0. [3]

En agosto de 2003, Harald Welte se convirtió en presidente del equipo central. En abril de 2004, tras una ofensiva del proyecto contra quienes distribuían el software del proyecto integrado en enrutadores sin cumplir con la GPL, un tribunal alemán concedió a Welte una orden judicial histórica contra Sitecom Alemania, que se negó a cumplir con los términos de la GPL (ver Disputas relacionadas con la GPL ). En septiembre de 2007, Patrick McHardy, quien dirigió el desarrollo durante los últimos años, fue elegido como nuevo presidente del equipo central.

Antes de iptables, los paquetes de software predominantes para crear cortafuegos Linux eran ipchains en el kernel Linux 2.2.x e ipfwadm en el kernel 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 Linux carecía de un marco de control de paquetes general hasta la introducción de Netfilter.

Mientras que ipchains e ipfwadm combinan el filtrado de paquetes y NAT (en particular, tres tipos específicos de NAT , denominados enmascaramiento , reenvío de puertos y redirección ), Netfilter separa las operaciones de paquetes en varias partes, que se describen a continuación. Cada una de ellas se conecta a los ganchos de Netfilter en diferentes puntos para acceder a los paquetes. Los subsistemas de seguimiento de conexiones y NAT son más generales y más potentes que las versiones rudimentarias de ipchains e ipfwadm.

En 2017, se agregó la infraestructura de descarga de flujo IPv4 e IPv6 , lo que permitió acelerar el reenvío de la tabla de flujo de software y el soporte de descarga de hardware. [4] [5]

Programas de utilidad del espacio de usuario

Flujo de paquetes de red a través de Netfilter con filtrado de paquetes iptables heredado

Tablas ip

Los módulos del núcleo denominados ip_tables, ip6_tables, arp_tables(el guión bajo es parte del nombre) y ebtablescomprenden la parte de filtrado de paquetes heredada del sistema de gancho Netfilter. Proporcionan un sistema basado en tablas para definir reglas de firewall que pueden filtrar o transformar paquetes. Las tablas se pueden administrar a través de las herramientas de espacio de usuario iptables, ip6tables, arptablesy ebtables. Observe que, aunque tanto los módulos del núcleo como las utilidades de espacio de usuario tienen nombres similares, cada uno de ellos es una entidad diferente con una funcionalidad diferente.

Cada tabla es en realidad su propio gancho y cada tabla se introdujo para cumplir un propósito específico. En lo que respecta a Netfilter, ejecuta una tabla en particular en un orden específico con respecto a otras tablas. Cualquier tabla puede llamarse a sí misma y también puede ejecutar sus propias reglas, lo que permite posibilidades de procesamiento e iteración adicionales.

Las reglas se organizan en cadenas o, en otras palabras, "cadenas de reglas". Estas cadenas se nombran con títulos predefinidos, como 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, cae en PREROUTING, mientras que INPUTrepresenta los datos entregados localmente y el tráfico reenviado cae en la FORWARDcadena. La salida generada localmente pasa a través de la OUTPUTcadena y los paquetes que se enviarán están en POSTROUTINGla cadena.

Los módulos Netfilter no organizados en tablas (ver más abajo) son capaces de verificar el origen para seleccionar su modo de operación.

iptable_rawmódulo
Cuando se carga, registra un enlace que se llamará antes que cualquier otro enlace de Netfilter. Proporciona una tabla denominada raw que se puede utilizar para filtrar paquetes antes de que lleguen a operaciones que demanden más memoria, como el seguimiento de conexión.
iptable_manglemódulo
Registra una tabla de enganche y desmantelamiento para que se ejecute después del seguimiento de conexión (ver a continuación) (pero antes de cualquier otra tabla), de modo que se puedan realizar modificaciones al 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 filtrado de propósito general (cortafuegos).
security_filtermódulo
Se utiliza para las reglas de red de control de acceso obligatorio (MAC), como las que habilitan los destinos SECMARKy CONNSECMARK. (Estos denominados "destinos" hacen referencia a los marcadores de Linux con seguridad mejorada). El control de acceso obligatorio se implementa mediante 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 ingresan al equipo en sí), OUTPUT(para alterar los paquetes generados localmente antes del enrutamiento) y FORWARD(para alterar los paquetes que se enrutan a través del equipo).

Tablas nft

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 de nftables agrega una máquina virtual simple al kernel de 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 paquete mismo, echar un vistazo a los metadatos asociados (interfaz de entrada, por ejemplo) y administrar los datos de seguimiento de la conexión. Se pueden usar operadores aritméticos, de 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 reemplazar múltiples operaciones de comparación con una única búsqueda de conjunto. [6]

Esto contrasta con el código heredado de Xtables (iptables, etc.), que tiene el conocimiento del protocolo tan profundamente integrado en el código que ha tenido 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. [6] Las principales ventajas son la simplificación de la ABIiptables del kernel de Linux , la reducción de la duplicación de código , la mejora de los informes de errores y una ejecución y un almacenamiento más eficientes y cambios incrementales y atómicos de las reglas de filtrado.

Desfragmentación de paquetes

El nf_defrag_ipv4módulo desfragmentará los paquetes IPv4 antes de que lleguen al nf_conntrack_ipv4módulo de seguimiento de conexión de Netfilter. Esto es necesario para el seguimiento de conexión dentro del núcleo y los módulos auxiliares NAT (que son una forma de "mini- ALG ") que solo funcionan de manera confiable en paquetes completos, no necesariamente en fragmentos.

El desfragmentador de IPv6 no es un módulo en sí mismo, sino que está integrado en el nf_conntrack_ipv6módulo.

Seguimiento de conexión

Una de las características importantes construidas sobre el marco Netfilter es el seguimiento de conexiones. [7] El seguimiento de conexiones permite al núcleo realizar un seguimiento de todas las conexiones o sesiones de red lógicas y, de ese modo, relacionar todos los paquetes que pueden formar esa conexión. NAT se basa en esta información para traducir todos los paquetes relacionados de la misma manera y iptablespuede usar esta información para actuar como un firewall con estado.

Sin embargo, el estado de la conexión es completamente independiente de cualquier estado de nivel superior, como el estado de TCP o SCTP. Parte de la razón de esto es que cuando solo se reenvían paquetes, es decir, no hay entrega local, el motor TCP puede no necesariamente ser invocado en absoluto. Incluso las transmisiones en modo sin conexión como UDP , IPsec (AH/ESP), GRE y otros protocolos de tunelización tienen, al menos, un pseudoestado de conexión. La heurística para tales protocolos se basa a menudo en un valor de tiempo de espera preestablecido para la inactividad, después de cuya expiración se descarta una conexión Netfilter.

Cada conexión 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 de túnel, pero en caso contrario es simplemente cero, como si no fuera 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.

iptablesPuede utilizar la comprobación de la información de la conexión, como estados, situaciones y más, para que las reglas de filtrado de paquetes sean más eficaces 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 configuran estas expectativas, por ejemplo, cuando el nf_conntrack_ftpmódulo ve un comando FTP " "PASV
INVALID
Se encontró que el paquete no era válido , es decir, no se ajustaba al diagrama de estado TCP .
UNTRACKED
un estado especial que puede asignar el administrador para omitir el seguimiento de conexión de un paquete en particular (ver la tabla sin procesar más arriba).

Un ejemplo normal sería que el primer paquete que ve el subsistema conntrack se clasificaría como "nuevo", la respuesta se clasificaría como "establecido" y un error ICMP se clasificaría como "relacionado". Un paquete de error ICMP que no coincidiera con ninguna conexión conocida se clasificaría como "inválido".

Asistentes de seguimiento de conexiones

Mediante el uso de módulos de complemento, se puede proporcionar al seguimiento de conexiones el conocimiento de los protocolos de la capa de aplicación y, de esta manera, comprender que dos o más conexiones distintas están "relacionadas". Por ejemplo, considere el protocolo FTP . Se establece una conexión de control, pero siempre que se transfieren datos, se establece una conexión separada para transferirlos. 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 es parte lógica 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 en dos paquetes, ya sea debido a la fragmentación de IP o a la segmentación de TCP, el asistente no necesariamente reconocerá patrones y, por lo tanto, no realizará su operación. La fragmentación de IP se maneja con el subsistema de seguimiento de la conexión que requiere desfragmentación, aunque la segmentación de TCP no se maneja. En el caso de FTP, se considera que la segmentación no ocurre "cerca" de un comando como PASVcon los tamaños de segmento estándar, por lo que tampoco se maneja en Netfilter.

Traducción de direcciones de red

Cada conexión tiene un conjunto de direcciones originales y direcciones de respuesta , que inicialmente son las mismas. NAT en Netfilter se implementa simplemente cambiando la dirección de respuesta y, si se desea, el puerto. Cuando se reciben paquetes, su tupla de conexión también se comparará con el par de direcciones de respuesta (y puertos). No tener fragmentos también es un requisito para NAT. (Si es necesario, los paquetes IPv4 pueden ser refragmentados por la pila IPv4 normal, que no sea de Netfilter).

Ayudantes de NAT

De manera similar a los ayudantes de seguimiento de conexión, los ayudantes NAT realizarán una inspección de paquetes y sustituirán las direcciones originales por direcciones de respuesta en la carga útil.

Otros proyectos de Netfilter

Aunque no son módulos del kernel que utilizan el código Netfilter directamente, el proyecto Netfilter alberga algunos programas más dignos de mención.

herramientas conntrack

conntrack-toolses un conjunto de herramientas de espacio de usuario para Linux que permiten a los administradores de sistemas 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 para el sistema de seguimiento de conexiones que el obsoleto /proc/net/nf_conntrack.

conjunto ip

A diferencia de otras extensiones como Connection Tracking, ipset[8] está más relacionada con iptablesNetfilter que con el código central. ipsetPor ejemplo, no utiliza ganchos de Netfilter, pero en realidad proporciona un iptablesmódulo para hacer coincidir y realizar modificaciones mínimas (establecer/borrar) conjuntos de IP.

La herramienta de espacio de usuario ipsetse utiliza para configurar, mantener e inspeccionar los denominados "conjuntos de IP" en el núcleo de Linux. Un conjunto de IP suele contener 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 cuanto a búsqueda que iptableslas reglas simples, pero, por supuesto, pueden requerir una mayor memoria. Se proporcionan diferentes algoritmos de almacenamiento (para las estructuras de datos en la memoria) ipsetpara que el usuario seleccione una solución óptima.

Cualquier entrada de un conjunto puede vincularse a otro conjunto, lo que permite realizar operaciones de correspondencia 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 grandes penalizaciones de rendimiento que impone el seguimiento de conexiones en tales casos. Al redirigir SYNlas solicitudes iniciales al SYNPROXYobjetivo, las conexiones no se registran dentro del seguimiento de conexiones hasta que alcanzan un ACKestado final validado, lo que libera al seguimiento de conexiones de tener que contabilizar grandes cantidades de conexiones potencialmente no válidas. De esta manera, se pueden gestionar inundaciones enormes SYNde forma eficaz. [9]

El 3 de noviembre de 2013, SYNla funcionalidad de proxy se fusionó con Netfilter, con el lanzamiento de la versión 3.12 de la línea principal del kernel de Linux. [10] [11]

ulogd

ulogdes un demonio de espacio de usuario para recibir y registrar paquetes y notificaciones de eventos de los subsistemas Netfilter. ip_tablespuede entregarle paquetes a través del mecanismo de cola de espacio de usuario, y el seguimiento de conexión puede interactuar con él ulogdpara intercambiar más información sobre paquetes o eventos (como la interrupción de la conexión o la configuración de NAT).

Bibliotecas del espacio de usuario

Netfilter también proporciona un conjunto de bibliotecas que tienen libnetfiltercomo prefijo de su nombre, las cuales pueden ser utilizadas para realizar diferentes tareas desde el espacio de usuario. Estas bibliotecas están publicadas bajo la licencia GNU GPL versión 2. En concreto, son las siguientes:

libnetfilter_queue
permite realizar colas de paquetes en el espacio de usuario junto con iptables; basado enlibnfnetlink
libnetfilter_conntrack
permite la manipulación de entradas de seguimiento de conexión desde el espacio de usuario; basado enlibnfnetlink
libnetfilter_log
permite la recopilación de mensajes de registro generados por iptables; basado enlibnfnetlink
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 de iptables; no se basa en ninguna netlinkbiblioteca y su API es utilizada internamente por las iptablesutilidades
libipset
permite operaciones en conjuntos de IP; basado en libmnl.

Talleres de Netfilter

El proyecto Netfilter organiza una reunión anual para desarrolladores, que se utiliza para discutir los esfuerzos de investigación y desarrollo en curso. El taller Netfilter de 2018 se llevó a cabo en Berlín, Alemania, en junio de 2018. [13]

Véase también

Referencias

  1. ^ Linus Torvalds (17 de noviembre de 2024). «Linux 6.12» . Consultado el 17 de noviembre de 2024 .
  2. ^ "página de inicio del proyecto netfilter/iptables - El proyecto netfilter.org". netfilter.org . Consultado el 4 de julio de 2014 .
  3. ^ de Harald Welte , Arqueología de Netfilter: 18 años desde la versión 2.3 hasta la 4.x, 5 de diciembre de 2017
  4. ^ "Infraestructura de descarga de flujo". LWN.net .
  5. ^ "Infraestructura de descarga de flujo". LWN.net .
  6. ^ por Jonathan Corbet (20 de agosto de 2013). "El regreso de las nftables". LWN.net . Consultado el 22 de octubre de 2013 .
  7. ^ Neira Ayuso, Pablo (14 de junio de 2006). "El sistema de seguimiento de conexiones de Netfilter" (PDF) .
  8. ^ "Conjuntos de direcciones IP". ipset.netfilter.org . Consultado el 4 de julio de 2014 .
  9. ^ Patrick McHardy (7 de agosto de 2013). «netfilter: implementar proxy SYN de netfilter». LWN.net . Consultado el 5 de noviembre de 2013 .
  10. ^ "netfilter: añadir SYNPROXY core/target". kernel.org. 2013-08-27 . Consultado el 2013-11-05 .
  11. ^ "netfilter: añadir destino IPv6 SYNPROXY". kernel.org. 2013-08-27 . Consultado el 2013-11-05 .
  12. ^ "Biblioteca Netfilter (libnl-nf)". infradead.org. 2013-04-02 . Consultado el 2013-12-28 .
  13. ^ "14º Taller de Netfilter". workshop.netfilter.org. 2018-09-26 . Consultado el 2018-09-26 .

Enlaces externos