Configuración Avanzada de Reglas NAT con Iptables: Cadenas y Selección de Paquetes

Enviado por Programa Chuletas y clasificado en Informática y Telecomunicaciones

Escrito el en español con un tamaño de 4,01 KB

Definición y Control de Reglas NAT en Netfilter

6. Control de Flujo de Paquetes a Través de NAT

Es necesario crear reglas NAT que indiquen al núcleo qué conexiones deben ser modificadas y cómo hacerlo. Para este propósito, utilizaremos la herramienta versátil iptables, especificando que altere la tabla de NAT mediante la opción «-t nat».

La tabla de reglas NAT contiene tres listas fundamentales, denominadas «cadenas». Cada regla se examina secuencialmente hasta que se encuentra una coincidencia. Las tres cadenas son:

  • PREROUTING: Utilizada para Destination NAT (DNAT), aplicada a los paquetes a medida que entran al sistema.
  • POSTROUTING: Utilizada para Source NAT (SNAT), aplicada a los paquetes a medida que salen del sistema.
  • OUTPUT: Utilizada para Destination NAT (DNAT) con los paquetes generados en la propia máquina local.

El siguiente diagrama ilustraría este proceso bastante bien si yo tuviese algo de talento artístico (Nota del autor).

Todas las opciones con doble guion pueden ser abreviadas, siempre que iptables pueda distinguirlas de otras opciones posibles. Si la implementación de iptables en el núcleo es modular, necesitará cargar previamente el módulo ip_tables.o mediante el comando: «insmod ip_tables».

Opciones Fundamentales de iptables para NAT

La opción más importante es la de selección de tabla, «-t». Para todas las operaciones de NAT, se debe usar «-t nat» para la tabla NAT. La segunda opción más importante es «-A» para añadir una nueva regla al final de una cadena (ejemplo: «-A POSTROUTING»), o «-I» para insertarla al principio (ejemplo: «-I PREROUTING»).

Se puede especificar el origen («-s» o «--source») y el destino («-d» o «--destination») de los paquetes sobre los que se desea aplicar NAT. Estas opciones pueden ir seguidas por:

  • Una IP sencilla (ejemplo: 192.168.1.1).
  • Un nombre de host (ejemplo: www.gnumonks.org).
  • Una dirección de red (ejemplo: 192.168.1.0/24 o 192.168.1.0/255.255.255.0).

6.2 Opciones Avanzadas para la Selección Refinada de Paquetes

Como se mencionó anteriormente, se puede especificar una dirección de origen y destino. Si se omite la opción de origen, se aplicará a cualquier dirección de origen. Si se omite la de destino, se aplicará a cualquier dirección de destino.

También es posible indicar un protocolo específico («-p» o «--protocol»), como TCP o UDP. Solo los paquetes de este protocolo coincidirán con la regla. La razón principal para hacer esto es que especificar uno de los protocolos TCP o UDP habilita opciones adicionales, específicamente las opciones de puerto:

  • --source-port (abreviada --sport)
  • --destination-port (abreviada --dport)

Estas opciones permiten especificar que solo los paquetes con un determinado puerto de origen y destino coincidirán con la regla. Esto es extremadamente útil para tareas como la redirección de peticiones web (puertos TCP 80 u 8080) mientras se deja el resto del tráfico sin modificar.

Es crucial que estas opciones de puerto sigan inmediatamente a la opción «-p», lo cual tiene el efecto secundario de cargar la biblioteca compartida de extensión para ese protocolo. Se pueden usar números de puerto o nombres definidos en el fichero /etc/services.

Todos los diferentes parámetros por los que se puede seleccionar un paquete vienen enumerados con toda clase de dolorosos detalles en la página de manual (man iptables).

Entradas relacionadas: