Comportamiento de Netfilter

  • Posted on: 26 March 2020
  • By: ReYDeS

Netfilter utiliza cuatro diferentes tabas, las cuales almacenan reglas regulando tres tipos de operaciones sobre los paquetes:

  • filter: Relacionado a reglas para filtrado (aceptar, rechazar, o ignorar un paquete)
  • nat (Network Address Translation): Relacionado a la traducción de direcciones origen y destino, como también puertos de los paquetes.
  • mangle: Relacionado a otros cambios hacia el paquete IP (incluyendo el campo ToS - Type of Service y otras opciones)
  • raw: Permite otras modificaciones manuales sobre los paquetes, antes de estos alcancen el sistema para el seguimiento de conexiones.

Cada tabla contiene una lista de reglas llamadas cadenas. El firewall utiliza cadenas estándar para manejar los paquetes basado en circunstancias previamente definidas. El administrador puede crear otras cadenas, la cual podría únicamente ser utilizada cuando sean referidas por una de las otras cadenas estándar (ya sea directamente o indirectamente).

La tabla de nombre “filter” tiene tres cadenas estándar:

  • INPUT: Relacionado a paquetes cuyo destino es el firewall por si mismo.
  • OUTPUT: Relacionado a paquetes emitidos por el firewall.
  • FORWARD: Relacionado a paquetes pasando a través del firewall (el cual no es ni su origen ni su destino)

La tabla de nombre “nat” también tiene tres cadenas estándar:

  • PREROUTING: Para modificar los paquetes tan pronto como lleguen.
  • POSTROUTING: Para modificar los paquetes cuando están listos para tomar su ruta.
  • OUTPUT: Para modificar los paquetes generados por el firewall por si mismo.

Estas cadenas son ilustradas en la siguiente imagen:

Cada cadena tiene una lista de reglas; cada regla es un conjunto de condiciones y una acción a realizar cuando se cumpla la condición. Cuando se procesa un paquete, el firewall escanea la cadena apropiada, una regla después de otra, y cuando las condiciones para una regla se cumplen, salta (debido a la opción “-j” en el comando) hacia la acción especificada para continuar el procesamiento. Los comportamientos más comunes son acciones estandarizadas y dedicadas para estos. Tomar una de estas acciones estandarizadas interrumpe el proceso de la cadena, pues el destino de los paquetes ya esta sellado (salvo una excepción mencionada a continuación). A continuación se listan las acciones de Netfilter:

  • ACCEPT: Permite el paquete siga su camino.
  • REJECT: Rechaza el paquete con un paquete de error ICMP (La opción “--reject-with type” de iptables determina el tipo de error a enviar).
  • DROP: Borra (ignora) el paquete.
  • LOG: Registra (mediante syslogd) un mensaje con una descripción del paquete. Notar esta acción no interrumpe el procesamiento, y la ejecución de la cadena continúa a la siguiente regla, es por ello el registro de paquetes rechazados requiere una regla LOG y REJECT/DROP. Los parámetros asociados con el registro incluye:
    • --log-level: Con el valor por defecto “warning” indica el nivel de severidad de “syslog”.
    • --log-prefix: Permite especificar un prefijo “texto” para diferenciar entre mensajes registrados.
    • --log-tcp-sequence, --log-tcp-options, y –log-ip-options: indican datos adicionales a ser integrados dentro del mensaje: respectivamente, el número TCP de secuencia, opciones TCP, y opciones IP.
  • ULOG: Registra un mensaje mediante “ulogd”, el cual puede ser mejor adaptado y más eficiente a syslogd para el manejo de un gran número de mensajes; notar esta acción, como LOG, también retorna el procesamiento hacia la siguiente regla en la cadena.
  • chain_name: Salta hacia la cadena definida y evalúa sus reglas.
  • RETURN: Interrumpe el procesamiento de la cadena actual, y retorna hacia la cadena original; en caso la cadena actual es una estándar, no existe cadena original, así la acción por defecto (definida con la opción “-P” de iptables) es ejecutada en su lugar.
  • SNAT (Unicamente la tabla “nat”). Aplica SNAT. Opciones adicionales describen los cambios exactos a aplicar, incluyendo la opción “--to-source address:port”, lo cual define una nueva dirección IP y/o puerto origen.
  • DNAT (Unicamente la tabla “nat”). Aplica SNAT. Opciones adicionales describen los cambios exacto a aplicar, incluyendo la opción “--to-destination address:port”, lo cual define la nueva dirección y/o puerto destino.
  • MASQUERADE (Unicamente la table “nat”): Aplica enmascaramiento (un caso especial de SNAT)
  • REDIRECT (Unicamente la table “nat”): Redirige transparentemente un paquete hacia un puerto definido del firewall; esto puede ser utilizada para configurar un proxy web transparente, el cual funcione sin configuración en el lado del cliente, pues los clientes piensan se conectan al destinatario, mientas las comunicaciones realmente pasan a través del proxy. La opción “--to-ports port(s)” indica el puerto, o rango de puertos, donde los paquetes deben ser dirigidos.

Otras acciones, particularmente aquellas relacionadas a la tabla “mangle”, están fuera del alcance del presente texto. Las páginas de manual para iptables(8) e ip6tables(8) tienen un completo listado.

Fuentes:

https://kali.training/downloads/Kali-Linux-Revealed-1st-edition.pdf
https://linux.die.net/man/8/iptables
https://linux.die.net/man/8/ip6tables

Sobre el Autor


Alonso Eduardo Caballero Quezada - ReYDeS
Instructor y Consultor en Hacking Ético, Forense Digital & GNU/Linux
Correo Electrónico: ReYDeS@gmail.com
Twitter: @Alonso_ReYDeS
LinkedIn: pe.linkedin.com/in/alonsocaballeroquezada
Facebook: https://www.facebook.com/alonsoreydes
Youtube: http://www.youtube.com/c/AlonsoCaballero
Resumen de mi CV: http://www.reydes.com/d/?q=node/1