16.3. Opciones usadas en comandos iptables

Las reglas que permiten a los paquetes ser filtrados por el kernel se ponen en funcionamiento ejecutando el comando iptables. Cuando use el comando iptables, debe especificar las opciones siguientes:

Las opciones usadas con la regla dada iptables deben estar agrupadas lógicamente, basándose en el propósito y en las condiciones de la regla general, para que la regla sea válida.

16.3.1. Tablas

Un aspecto muy potente de iptables es que se pueden utilizar múltiples tablas para decidir el destino de un paquete particular. Gracias a la naturaleza extensible de iptables, se pueden crear tablas especializadas y almacenarlas en el directorio /lib/modules/<kernel-version>/kernel/net/ipv4/netfilter/, donde <kernel-version> corresponde al número de la versión del kernel.

La tabla por defecto, llamada filter, contiene las cadenas estándard por defecto para INPUT, OUTPUT, y FORWARD. Esto es similar a las cadenas estándar que se utilizan con ipchains. Sin embargo, por defecto, iptables también incluye dos tablas adicionales que realizan tareas de filtrado específico de paquetes. La tabla nat se puede utilizar para modificar las direcciones de origen y destino grabadas en un paquete, y la tabla mangle permite alterar los paquetes de forma especializada.

Cada tabla contiene las cadenas por defecto que realizan las tareas necesarias basadas en el propósito de la tabla, aún cuando se pueden añadir nuevas cadenas a cualquier tabla.

16.3.2. Estructura

Muchos comandos iptables tienen la siguiente estructura:

iptables [-t <table-name>]
<command>
<chain-name>
<parameter-1> \
         <option-1>
<parameter-n>
<option-n>

En este ejemplo, la opción <table-name> permite al usuario seleccionar una tabla diferente a la tabla predeterminada filter a usar con el comando. La opción <command> indica una acción específica a realizar, tal como anexar o eliminar la regla especificada por la opción <chain-name>. Luego de la opción <chain-name> se encuentran un par de parámetros y opciones que definen qué pasará cuando un paquete coincide con la regla.

Cuando miramos la estructura de un comando iptables, es importante recordar que, al contrario que la mayoría de los comandos, la longitud y complejidad de un comando iptables puede cambiar en función de su propósito. Un comando simple para borrar una regla de una cadena puede ser muy corto, mientras que un comando diseñado para filtrar paquetes de una subred particular usando un conjunto de parámetros específicos y opciones puede ser mucho más largo. Al crear comandos iptables puede ser de ayuda reconocer que algunos parámetros y opciones pueden crear la necesidad de utilizar otros parámetros y opciones para especificar algo de los requisitos de la opción anterior. Para construir una regla válida, esto deberá continuar hasta que todos los parámetros y opciones que requieran otro conjunto de opciones hayan sido satisfechos.

Teclee iptables -h para ver una lista detallada de la estructura de los comandos iptables.

16.3.3. Comandos

Los comandos le dicen a iptables que realice una tarea específica. Solamente un comando se permite por cada cadena de comandos iptables. Excepto el comando de ayuda, todos los comandos se escriben en mayúsculas.

Los comandos de iptables son los siguientes:

16.3.4. Parámetros

Una vez que se especifiquen ciertos comandos iptables, incluyendo aquellos para añadir, anexar, eliminar, insertar o reemplazar reglas dentro de una cadena, se requieren parámetros para construir una regla de filtrado de paquetes.

16.3.5. Opciones de identificación de paquetes

Diferentes protocolos de red proporcionan opciones especializadas las cuales se pueden configurar de formas específicas para coincidir un paquete particular usando ese protocolo. Por supuesto, el protocolo debe ser especificado primero con el comando iptables, mediante el uso de -p tcp <protocol-name> (donde <protocol-name> es el protocolo objetivo), para hacer las opciones disponibles para ese protocolo.

16.3.5.1. Protocolo TCP

Estas opciones de identificación están disponibles en el protocolo TCP (opción -p tcp):

  • --dport — Configura el puerto de destino para el paquete. Use bien sea un nombre de servicio (tal como www o smtp), número de puerto, o el rango de números de puertos para configurar esta opción. Para hojear los nombres y alias de los servicios de red y los números que ellos usan, visualice el archivo /etc/services. La opción --destination-port es sinónimo con --dport.

    Para especificar un rango de números de puertos, separe los dos números con dos puntos (:), tal como -p tcp --dport 3000:3200. El rango válido aceptable es 0:65535.

    Use un caracter de exclamación (!) después de la opción --dport para indicar a iptables que coincida todos los paquetes que no usan el servicio de red o puerto.

  • --sport — Configura el puerto fuente del paquete usando las mismas opciones que --dport. La opción --source-port es sinónimo con --sport.

  • --syn Provoca que todos los paquetes designados de TCP, comúnmente llamados paquetes SYN, cumplan esta regla. Cualquier paquete que esté llevando un payload de datos no será tocado. Si se sitúa un punto de exclamación (!) como bandera tras la opción --syn se provoca que todos los paquetes no-SYN sean seleccionados.

  • --tcp-flags — Permite a los paquetes TCP packets con bits específicos o banderas, ser coincididos con una regla. La opción --tcp-flags acepta dos parámetros. El primer parámetro es la máscara, la cual configura banderas a ser examinadas en el paquete. El segundo parámetro se refiere a la bandera que se debe configurar para poder coincidir.

    Las banderas posibles son:

    • ACK

    • FIN

    • PSH

    • RST

    • SYN

    • URG

    • ALL

    • NONE

    Por ejemplo, una regla iptables que contiene -p tcp --tcp-flags ACK,FIN,SYN SYN tan sólo seleccionará los paquetes TCP que tengan la bandera SYN activo y las banderas ACK y FIN sin activar.

    Usando el caracter de exclamación (!) después de --tcp-flags reversa el efecto de la opción de coincidencia.

  • --tcp-option Intenta seleccionar con opciones específicas de TCP que pueden estar activas en un paquete en particular. Esta opción se puede revertir con el punto de exclamación (!).

16.3.5.2. Protocolo UDP

Estas opciones de selección están disponibles para el protocolo UDP (-p udp):

  • --dport — Especifica el puerto destino del paquete UDP, usando el nombre del servicio, número de puerto, o rango de números de puertos. La --destination-port que coincide la opción es sinónimo con --dport. Consulte a la opción --dport en Sección 16.3.5.1 para ver las formas de usar esta opción.

  • --sport — Especifica el puerto fuente de un paquete UDP, usando el nombre del servicio, número de puerto, o rango de números de puertos. La --source-port opción es sinónimo con --sport. Consulte a la --sport en Sección 16.3.5.1 para ver las formas de usar esta opción.

16.3.5.3. Protocolo ICMP

Estas opciones de coincidencia están disponibles para el Internet Control Message Protocol (ICMP) (-p icmp):

  • --icmp-type Selecciona el nombre o el número del tipo ICMP que concuerde con la regla. Se puede obtener una lista de nombres válidos ICMP tecleando el comando iptables -p icmp -h.

16.3.5.4. Módulos con opciones de selección adicionales

Opciones adicionales de coincidencia están disponibles a través de los módulos por el comando iptables. Para usar un módulo de opciones de coincidencia, cargue el módulo por nombre usando la opción -m, tal como -m <module-name> (reemplazando <module-name> con el nombre del módulo).

Un gran número de módulos están disponibles por defecto. Hasta es posible crear sus propios módulos para proporcionar funcionalidades de opciones de coincidencia adicionales.

Existen muchos módulos, pero sólo se discuten aquí los más populares.

  • limit module — Permite colocar un límite en cuántos paquetes son coincididos a una regla particular. Esto es especialmente beneficioso cuando se registren las coincidencias a las reglas y así una gran cantidad de paquetes coincidentes no sobrecarguen el registro del sistema con mensajes repetitivos o usen los recursos del sistema.

    El módulo limit habilita las opciones siguientes:

    • --limit — Configura el número de coincidencias en un intervalo de tiempo, especificado con un número y un modificador de tiempo ordenados en el formato <número>/<tiempo>. Por ejemplo, si usamos --limit 5/hour sólo dejaremos que una regla sea efectiva cinco veces a la hora.

      Si no se utiliza ningún número ni modificador de tiempo, se asume el siguiente valor por defecto: 3/hour.

    • --limit-burst — Configura un límite en el número de paquetes capaces de cumplir una regla en un determinado tiempo. Esta opción deberá ser usada junto con la opción --limit, y acepta un número para configurar el intervalo de tiempo (threshold).

      Si no se especifica ningún número, tan sólo cinco paquetes serán capaces inicialmente de cumplir la regla.

  • módulo state — Habilita la coincidencia de estado.

    El módulo state tiene las siguientes opciones:

    • --state — coincide un paquete con los siguientes estados de conexión:

      • ESTABLISHED El paquete seleccionado se asocia con otros paquetes en una conexión establecida.

      • INVALID El paquete seleccionado no puede ser asociado a una conexión conocida.

      • NEW El paquete seleccionado o bien está creando una nueva conexión o bien forma parte de una conexión de dos caminos que antes no había sido vista.

      • RELATED El paquete seleccionado está iniciando una nueva conexión en algún punto de la conexión existente.

      Estos estados de conexión se pueden utilizar en combinación con otros separándolos mediante comas como en -m state --state INVALID, NEW.

  • módulo mac — Habilita la coincidencia de direcciones MAC de hardware.

    El módulo mac activa las opciones siguientes:

    • --mac-source — Coincide una dirección MAC a la tarjeta de red que envió el paquete. Para excluir una dirección MAC de la regla, coloque un símbolo de exclamación (!) después de la opción --mac-source.

Para visualizar otras opciones disponibles a través de los módulos, consulte la página del manual de iptables.

16.3.6. Opciones del objetivo

Una vez que un paquete ha coincidido con una regla, la regla puede dirigir el paquete a un número de objetivos diferentes que deciden su suerte y, posiblemente, toman acciones adicionales. Cada cadena tiene un objetivo por defecto, el cual es usado si ninguna de las reglas en esa cadena coinciden con un paquete o si ninguna de las reglas que coinciden con el paquete especifica un objetivo.

Los siguientes son los objetivos estándar:

Además de estos objetivos standard, se pueden usar otros más con extensiones llamadas módulos de objetivos (target modules), que trabajan de forma similar a como los hacían los módulos de las opciones de selección. Para obtener más información sobre estos módulos, mire en Sección 16.3.5.4.

Existen varios módulos extendidos de objetivos, la mayoría de los cuales tan sólo se aplicarán a tablas o situaciones específicas. Un par de estos módulos de los más populares e incluidos por defecto en Red Hat Linux serían:

Otras extensiones de objetivos, incluyendo muchas que son útiles para el enmascaramiento de IP usando la tabla nat o con alteración de paquetes usando la tabla mangle, se puede encontrar en la página del manual de iptables.

16.3.7. Opciones de listado

El comando predeterminado para listar, iptables -L, proporciona una vista muy básica de los filtros por defecto de las cadenas actuales de la tabla. Las opciones adicionales proporcionan más información: