Analizar el marco de firewall de Linux desde cinco aspectos

  

Netfilter en Linux proporciona un marco abstracto y abstracto. La implementación de una subfunción definida por el marco es el subsistema de filtrado de paquetes. El marco consta de las siguientes cinco partes: 1. Para cada protocolo de red (IPv4, IPv6) Etc.) Defina un conjunto de funciones de enlace (IPv4 define cinco funciones de enlace) que se llaman en varios puntos clave en el flujo de datagramas a través de la pila de protocolos. En estos puntos, la pila de protocolos llamará al marco de Netfilter con el datagrama y la etiqueta de función de enlace como parámetros.

2. Cualquier módulo en el kernel puede registrar uno o más enlaces de cada protocolo para implementar el enganche, de modo que cuando se pasa un paquete a la estructura de Netfilter, el kernel puede detectar si hay módulos. Las funciones de protocolo y gancho están registradas. Si está registrada, se llama a la función de devolución de llamada utilizada para registrar el módulo, de modo que estos módulos tengan la oportunidad de verificar (y posiblemente modificar) el paquete, descartar el paquete e indicar a Netfilter que pase el paquete a la cola en el espacio del usuario. .

3. Esos paquetes en cola se procesan de forma asíncrona al espacio del usuario. Un proceso de usuario puede examinar el paquete, modificarlo e incluso reinyectar el paquete en el kernel a través de la misma función de enlace que deja el kernel. 4. Los paquetes de IP que se desecharán en la capa de IP se verifican antes de que realmente se descarten. Por ejemplo, el módulo tiene permitido verificar el paquete IP-Spoofed (descartado por la ruta).

5. La ubicación de los cinco puntos HOOK en la capa IP es la siguiente: (1) NF_IP_PRE_ROUTING: el paquete que acaba de ingresar a la capa de red pasa este punto (justo después del número de versión, suma de comprobación, etc.), La traducción de la dirección de origen se realiza en este punto; IP_Rcv se llama en IP_Input.c; (2) NF_IP_LOCAL_IN: después de buscar la ruta, se envía a la máquina a través de este punto de control, y el filtrado de paquetes INPUT se realiza en este punto y se llama en IP_local_deliver; (3) NF_IP_FORWARD: El paquete que se reenviará pasa este punto de detección, el filtrado de paquetes FORWORD se realiza en este punto; (4) NF_IP_POST_ROUTING: Todos los paquetes que salen a través del dispositivo de red pasan inmediatamente este punto de detección, función incorporada de traducción de direcciones de destino (incluida la función de camuflaje de direcciones) En este punto; (5) NF_IP_LOCAL_OUT: El paquete enviado por el proceso local pasa este punto de detección y el filtrado de paquetes de SALIDA se realiza en este punto.

Estos puntos ya están definidos en el kernel. Los módulos del kernel se pueden registrar para procesar en estos puntos de GANCHO, que se pueden especificar mediante la función nf_register_hook. El datagrama se llama cuando el datagrama pasa a través de estas funciones de enlace, de modo que el módulo puede modificar los datagramas y devolver los siguientes valores a Netfilter:

NF_ACCEPT Continuar transmitiendo datagramas normalmente

NF_DROP Descartar los datagramas, Ya no se transfiere

El módulo NF_STOLEN toma el control del datagrama y no continúa transmitiéndolo.

NF_QUEUE Consulta el datagrama (generalmente se usa para procesar datos al espacio del usuario)

NF_REPEAT Llamando la función hook nuevamente

Un sistema de selección de datagramas basado en Netgram llamado IPtables se aplica en el kernel Linux 2.4. De hecho, es un sucesor de IPchains, pero Pero tiene más escalabilidad. El módulo del kernel puede registrar una nueva tabla de reglas y requerir que el datagrama fluya a través de la tabla de reglas especificada. Este datagrama se selecciona para el filtrado de datagramas (tabla de filtros), la traducción de direcciones de red (tabla Nat) y el procesamiento de datagramas (tabla Mangle). Las tres funciones de procesamiento de datagramas proporcionadas por el núcleo de Linux 2.4 se basan en las funciones de enlace de Netfilter y las tablas de IP. Son módulos independientes que son independientes entre sí. Todos están perfectamente integrados en el marco proporcionado por Netfileter.

Filtrado de paquetes

La tabla de filtros no modifica el datagrama, sino solo el datagrama. Un aspecto de IPtables sobre IPchains es que es más pequeño y más rápido. Accede al marco de Netfilter a través de las funciones de enlace NF_IP_LOCAL_IN, NF_IP_FORWARD y NF_IP_LOCAL_OUT. Por lo tanto, solo hay un lugar para que un informe lo filtre. Esta es una gran mejora con respecto a IPchains porque un datagrama reenviado atraviesa tres cadenas en IPchains.

NAT

La tabla NAT escucha tres funciones de enlace de Netfilter: NF_IP_PRE_ROUTING, NF_IP_POST_ROUTING y NF_IP_LOCAL_OUT. NF_IP_PRE_ROUTING implementa la traducción de direcciones para la dirección de origen del datagrama que se reenviará y NF_IP_POST_ROUTING realiza la traducción de direcciones para la dirección de destino del paquete que se reenviará. La conversión de la dirección de destino del datagrama local se implementa mediante NF_IP_LOCAL_OUT. La tabla NAT es diferente de la tabla de filtro porque solo el primer datagrama de la nueva conexión atravesará la tabla, y los datagramas posteriores realizarán el mismo proceso de conversión en función de los resultados del primer datagrama. La tabla NAT se utiliza en NAT de origen, NAT de destino, enmascaramiento (que es un caso especial de NAT de origen) y proxy transparente (que es un caso especial de NAT de destino).

Packet Mangling

La tabla Mangle está registrada en los ganchos NF_IP_PRE_ROUTING y NF_IP_LOCAL_OUT. Usando la tabla mangle, puede modificar el datagrama o adjuntar algunos datos fuera de banda al datagrama. La tabla mangle actual admite la modificación del bit TOS y la configuración del campo nfmard de skb.

Si queremos agregar nuestro propio código, necesitamos usar la función nf_register_hook. Nuestro trabajo es generar una instancia de la estructura struct nf_hook_ops y usar HOF_register_hook para ponerlo en HOOK. El elemento de la lista que siempre queremos inicializar a {NULL, NULL}, porque generalmente funciona en la capa IP, pf es siempre PF_INET; hooknum es el punto de GANCHO que elegimos; un punto de GANCHO puede colgar múltiples funciones de procesamiento, quien sea primero, luego Para ver la prioridad, es decir, la designación de prioridad. Netfilter_IPv4.h especifica la prioridad del controlador incorporado con un tipo enumerado

Copyright © Conocimiento de Windows All Rights Reserved