Considérese cómo una máquina Unix, o de hecho cualquier máquina capaz de realizar encaminamiento de IP, procesa los datagramas de IP. Los pasos básicos, mostrados en la Figura 9-2 son:
Se recibe el datagrama de IP. (1)
Se examina el datagrama de IP entrante para determinar si está destinado a un proceso de esta máquina.
Si el datagrama es para esta máquina, se procesa localmente.(2)
Si no está destinado a esta máquina, se realiza una búsqueda en la tabla de encaminamiento de una ruta adecuada y el datagragama se reenvía por la interfaz adecuada o se elimina si no se puede encontrar una ruta. (3)
Los datagramas procedentes de procesos locales se envían hacia el 'software' de encaminamiento para ser reenviados hacia la interfaz apropiada. (4)
Se examina el datagrama de IP saliente para determinar si existe una ruta válida que escoger, si no es así, se elimina.
Se transmite el datagrama de IP. (5)
En nuestro diagrama, el flujo 1→3→5 representa nuestra máquina encaminando datos entre un 'host' sobre nuestra red Ethernet y un 'host' alcanzable vía nuestro enlace de PPP. Los flujos 1→2 y 4→5 representan los flujos de entrada y de salida de datos de un programa de red ejecutándose en nuestro 'host' local. El flujo 4→3→2 representaría un flujo de datos vía una conexión 'loopback'. Naturalmente, los datos fluyen tanto hacia dentro como hacia fuera de los dispositivos de red. Los símbolos de interrogación del diagrama representan los puntos donde la capa de IP realiza las decisiones de encaminamiento.
El cortafuegos de IP del núcleo de Linux es capaz de aplicar filtrados en varias etapas de este proceso. Es decir, se pueden filtrar los datagramas de IP que entren en su máquina, aquellos que estén siendo reenviados a través de su máquina y aquellos que estén preparados para ser transmitidos.
En ipfwadm y en ipchains, una regla de tipo 'Input' [1] se aplica al flujo 1 del diagrama, una regla de tipo 'Forwarding' [2] al flujo 3 y una regla de tipo 'Output' [3] al flujo 5. Cuando se discuta netfilter más adelante se verá que los puntos de interceptación han cambiado de tal forma que una regla de tipo 'Input' se aplica ahora en el flujo 2, y una regla de tipo 'Output' en el flujo 4. Esto tiene implicaciones importantes sobre cómo se deben estructurar los conjuntos de reglas, pero los principios generales permanecen válidos para todos los tipos de cortafuegos de GNU/Linux.
Todo esto puede parecer complicado de forma innecesaria en un primer momento, pero proporciona una flexibilidad que permite construir configuraciones muy sofisticadas y poderosas.
[1] | N. del T.: "entrada" |
[2] | N. del T.: "reenvío" |
[3] | N. del T.: "salida" |