stringtranslate.com

Filtro de red

Netfilter es un marco proporcionado por el kernel de Linux que permite implementar diversas operaciones relacionadas con la red en forma de controladores personalizados. Netfilter ofrece varias funciones y operaciones para filtrado de paquetes , traducción de direcciones de red y 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 ganchos dentro del kernel de Linux, que permiten que módulos específicos del kernel registren funciones de devolución de llamada con la pila de red del kernel. Esas funciones, generalmente aplicadas 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 predecesor del proyecto, ipchains . A medida que el proyecto crecía, fundó Netfilter Core Team (o simplemente coreteam ) en 1999. El software que produjeron (llamado en adelante netfilter ) utiliza la licencia GNU General Public License (GPL), y el 26 de agosto de 1999 se fusionó en la versión 2.3. .15 de la línea principal del kernel de Linux y, por lo tanto, estaba 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 seguir los términos de la GPL (ver GPL- disputas relacionadas ). En septiembre de 2007, Patrick McHardy, que dirigió el desarrollo durante los últimos años, fue elegido nuevo presidente del equipo central.

Antes de iptables, los paquetes de software predominantes para crear firewalls de 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 alteran 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 filtrado de paquetes y NAT (particularmente tres tipos específicos de NAT , llamados enmascaramiento , reenvío de puertos y redirección ), Netfilter separa las operaciones de paquetes en múltiples partes, que se describen a continuación. Cada uno 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 dentro 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 tablas 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

iptables

Los módulos del kernel denominados ip_tables, ip6_tables( arp_tablesel guión bajo es parte del nombre) y ebtablescomprenden la parte heredada de filtrado de paquetes del sistema de enlace 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 del espacio de usuario iptables, ip6tables, arptablesy ebtables. Observe que aunque tanto los módulos del kernel como las utilidades del espacio de usuario tienen nombres similares, cada uno de ellos es una entidad diferente con una funcionalidad diferente.

En realidad, cada tabla tiene su propio gancho y cada tabla se introdujo para cumplir un propósito específico. En lo que respecta a Netfilter, ejecuta una tabla 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 están organizadas en cadenas, o en otras palabras, "cadenas de reglas". Estas cadenas reciben nombres con títulos predefinidos, incluidos INPUTy OUTPUT. FORWARDEstos 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 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 de Netfilter que no están 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 gancho que se llamará antes que cualquier otro gancho de Netfilter. Proporciona una tabla llamada raw que se puede utilizar para filtrar paquetes antes de que alcancen operaciones que requieren más memoria, como el seguimiento de conexiones.
iptable_manglemódulo
Registra una tabla de enlace y destrucción para ejecutarla después del seguimiento de conexiones (ver más abajo) (pero aún antes de cualquier otra tabla), de modo que se puedan realizar modificaciones en el paquete. Esto permite modificaciones adicionales mediante las reglas siguientes, como NAT o filtrado adicional.
iptable_natmódulo
Registra dos enlaces: las transformaciones basadas en la traducción de direcciones de red de destino ("DNAT") se aplican antes del enlace de filtro, 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 está disponible para iptables es simplemente una "base de datos de configuración" para asignaciones NAT únicamente y no está destinada a filtrado de ningún tipo.
iptable_filtermódulo
Registra la tabla de filtros , utilizada para filtrado de uso general (firewalling).
security_filtermódulo
Se utiliza para reglas de red de control de acceso obligatorio (MAC), como las habilitadas por los destinos SECMARKy . CONNSECMARK(Estos llamados "objetivos" se refieren a 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 de la tabla de filtro, lo que permite que cualquier regla de control de acceso discrecional (DAC) en la tabla de filtro entre en vigor antes que cualquier regla MAC. Esta tabla proporciona las siguientes cadenas integradas: INPUT(para paquetes que ingresan a la computadora), OUTPUT(para alterar paquetes generados localmente antes del enrutamiento) y FORWARD(para alterar paquetes que se enrutan a través de la computadora).

nftables

nftables es la nueva parte de filtrado de paquetes de Netfilter. es nftla nueva utilidad de espacio de usuario que reemplaza iptables, ip6tablesy .arptablesebtables

El motor del kernel de nftables agrega una máquina virtual simple al kernel de Linux, que puede ejecutar código de bytes para inspeccionar un paquete de red y tomar decisiones sobre cómo se debe manejar 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 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 un conocimiento del protocolo tan profundamente integrado en el código que ha tenido que replicarse cuatro veces‍—‌para puentes IPv4, IPv6, ARP y Ethernet‍—como firewall. Los motores son demasiado específicos de protocolos para usarse de manera genérica. [6] Las principales ventajas iptablesson la simplificación de la ABI 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, almacenamiento y cambios atómicos incrementales de las reglas de filtrado más eficientes .

Desfragmentación de paquetes

El nf_defrag_ipv4módulo desfragmentará los paquetes IPv4 antes de que lleguen al seguimiento de conexiones de Netfilter ( nf_conntrack_ipv4módulo). Esto es necesario para el seguimiento de conexiones en el kernel 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 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 integradas en el marco de Netfilter es el seguimiento de conexiones. [7] El seguimiento de conexiones permite al kernel realizar un seguimiento de todas las conexiones o sesiones de red lógica y, por lo tanto, 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 simplemente se reenvían paquetes, es decir, sin entrega local, es posible que no necesariamente se invoque en absoluto el motor TCP. Incluso las transmisiones en modo sin conexión como UDP , IPsec (AH/ESP), GRE y otros protocolos de túnel tienen, al menos, un estado de pseudoconexión. La heurística de dichos protocolos a menudo se basa en un valor de tiempo de espera preestablecido por inactividad, después de cuyo vencimiento se interrumpe una conexión 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 de túnel, pero de lo contrario es solo cero, como si no fuera parte de la tupla. Para poder inspeccionar el puerto TCP en todos los casos, los paquetes serán obligatoriamente desfragmentados.

Las conexiones de Netfilter se pueden manipular con la herramienta de espacio de usuario conntrack.

iptablespuede utilizar la verificación de la información de la conexión, como estados, estados y más, para hacer que las reglas de filtrado de paquetes sean más potentes y fáciles de administrar. 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 antes mencionados 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 , por ejemplo, no se adhería al diagrama de estado de TCP.
UNTRACKED
un estado especial que el administrador puede asignar para omitir el seguimiento de la conexión de un paquete en particular (consulte la tabla sin formato, arriba).

Un ejemplo normal sería que el primer paquete que vea el subsistema conntrack se clasifique como "nuevo", la respuesta se clasifique como "establecida" y un error ICMP se clasifique como "relacionado". Un paquete de error ICMP que no coincida con ninguna conexión conocida sería "no válido".

Ayudantes de seguimiento de conexiones

Mediante el uso de módulos complementarios, al seguimiento de conexiones se le puede brindar conocimiento de los protocolos de la capa de aplicación y así 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 cada vez 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 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 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 conexiones que requiere desfragmentación, aunque no se maneja la segmentación de TCP . En el caso de FTP, se considera que la segmentación no ocurre "cerca" de un comando como PASVocurre con los tamaños de segmento estándar, por lo que tampoco se aborda en Netfilter.

Traducción de Direcciones de Red

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

ayudantes de NAT

De manera similar a los asistentes de seguimiento de conexiones, los asistentes de 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 notables.

herramientas-conntrack

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 del espacio de usuario conntrackdse puede utilizar para habilitar firewalls con estado basados ​​en clústeres de alta disponibilidad y recopilar estadísticas del uso del firewall con estado. La interfaz de línea de comandos conntrackproporciona una interfaz más flexible para el 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 relacionada iptablesque con el código central de Netfilter. ipsetno utiliza enlaces de Netfilter, por ejemplo, pero en realidad proporciona un iptablesmódulo para hacer coincidir y realizar modificaciones mínimas (configurar/borrar) a los conjuntos de IP.

La herramienta de espacio de usuario llamada ipsetse utiliza para configurar, mantener e inspeccionar los llamados "conjuntos de IP" en el kernel de Linux. Un conjunto de IP normalmente contiene un conjunto de direcciones IP , pero también puede contener conjuntos de otros números de red, dependiendo de su "tipo". Estos conjuntos son mucho más eficientes en términos de búsqueda que iptableslas reglas simples, pero, por supuesto, pueden requerir una mayor utilización de 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 se puede vincular a otro conjunto, lo que permite operaciones de comparación sofisticadas. Un conjunto sólo se puede eliminar (destruir) si no hay iptablesreglas u otros conjuntos que se refieran a él.

proxy SINC

SYNPROXYtarget hace posible el manejo de grandes inundaciones SYN sin las grandes penalizaciones de rendimiento impuestas por el seguimiento de conexiones en tales casos. Al redirigir las solicitudes iniciales SYNal SYNPROXYdestino, 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 contabilizar una gran cantidad de conexiones potencialmente no válidas. De esta manera SYNse pueden hacer frente de forma eficaz a grandes inundaciones. [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 de Netfilter. ip_tablespuede entregarle paquetes a través del mecanismo de cola del espacio de usuario, y el seguimiento de la conexión puede interactuar para ulogdintercambiar más información sobre paquetes o eventos (como la desconexió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 sus nombres, que pueden usarse para realizar diferentes tareas desde el espacio de usuario. Estas bibliotecas están liberadas bajo la versión 2 de GNU GPL. En concreto son las siguientes:

libnetfilter_queue
permite realizar colas de paquetes en el espacio de usuario junto con iptables; Residencia enlibnfnetlink
libnetfilter_conntrack
permite la manipulación de entradas de seguimiento de conexiones desde el espacio de usuario; Residencia enlibnfnetlink
libnetfilter_log
permite la recopilación de mensajes de registro generados por iptables; Residencia enlibnfnetlink
libnl-3-netfilter
permite operaciones sobre 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 las utilidades utilizan internamente su APIiptables
libipset
permite operaciones en conjuntos de IP; Residencia 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 2018 tuvo lugar en Berlín, Alemania, en junio de 2018. [13]

Ver también

Referencias

  1. ^ Greg Kroah-Hartman (3 de agosto de 2024). "Linux 6.10.3" . Consultado el 4 de agosto 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. ^ ab Harald Welte , arqueología de netfilter: 18 años de 2.3 a 4.x, 5 de diciembre de 2017
  4. ^ "Infraestructura de descarga de flujo". LWN.net .
  5. ^ "Infraestructura de descarga de flujo". LWN.net .
  6. ^ ab Jonathan Corbet (20 de agosto de 2013). "El regreso de nftables". LWN.net . Consultado el 22 de octubre de 2013 .
  7. ^ Neira Ayuso, Pablo (14 de junio de 2006). "Sistema de seguimiento de conexiones de Netfilter" (PDF) .
  8. ^ "Conjuntos de IP". ipset.netfilter.org . Consultado el 4 de julio de 2014 .
  9. ^ Patrick McHardy (7 de agosto de 2013). "netfilter: implementar el proxy SYN de netfilter". LWN.net . Consultado el 5 de noviembre de 2013 .
  10. ^ "netfilter: agregue núcleo/destino SYNPROXY". kernel.org. 27 de agosto de 2013 . Consultado el 5 de noviembre de 2013 .
  11. ^ "netfilter: agregar destino SYNPROXY IPv6". kernel.org. 27 de agosto de 2013 . Consultado el 5 de noviembre de 2013 .
  12. ^ "Biblioteca Netfilter (libnl-nf)". infradead.org. 2013-04-02 . Consultado el 28 de diciembre de 2013 .
  13. ^ "14º Taller de Netfilter". taller.netfilter.org. 2018-09-26 . Consultado el 26 de septiembre de 2018 .

enlaces externos