Iptables - Conceptos generales para configurar un cortafuegos

Rafa Morales 19 Noviembre 2013
9min
0
Linux

Iptables es la herramienta utilizada en los sistemas Linux para controlar el paso de paquetes de red por el equipo de la siguiente manera, filtrándolos, modificándolos o registrándolos. Por tanto, nos permitirá realizar un cortafuegos (firewall) en nuestra red si lo utilizamos como router.

  • Iptables permite definir reglas sobre qué hacer con los paquetes de red.
  • Las reglas se agrupan en cadenas.
  • Las cadenas se dividen en tablas.

A continuación os queremos ofrecer una idea bastante detallada de Iptables, pero sin llegar a comentar todas las opciones disponibles, dejando sin tocar las más avanzadas.

 

Cadenas

En Iptables existen las siguientes cadenas por donde van a circular los paquetes dentro del sistema:

  • PREROUTING: Contiene los paquetes que acaban de entrar al sistema, independientemente de que estén generados por el mismo equipo o un equipo remoto.
  • INPUT: Contiene los paquetes destinados al equipo local con cualquier origen.
  • OUTPUT: Contiene los paquetes generados en el equipo local y que van a salir del mismo.
  • FORWARD: Contiene los paquetes que pasan por el equipo pero que son generados en equipos remotos y se dirigen a otros equipos diferentes.
  • POSTROUTING: Contiene los paquetes que van a abandonar el sistema, independientemente de estén generados en el mismo equipo o en un equipo remoto.

 

Tablas

En Iptables existen una serie de tablas para procesar de manera diferente los paquetes. En cada tabla se van a permitir unas cadenas determinadas.

  • filter: Se utiliza exclusivamente para filtrar paquetes, es decir, aceptarlos, rechazarlos, etc. Permite las cadenas INPUT, OUTPUT y FORWARD.
  • nat: Se utiliza para traducir las direcciones de los paquetes, ya sea la dirección origen o la dirección destino. Permite las cadenas PREROUTING, OUTPUT y POSTROUTING.
  • mangle: Se utiliza modificar información en la cabecera de los paquetes. Permite las cadenas PREROUTING, INPUT, OUTPUT, FORWARD y POSTROUTING.

 

Los posibles flujos que seguirán los paquetes los podemos observar en la siguiente imagen:

Flujo iptables

 

 

Acciones / Objetivos

Las acciones u objetivos especifican qué se va a realizar con el paquete cuando satisface la regla en la que se encuentra. Existen las siguientes acciones:

  • ACCEPT: El paquete se acepta y no continua atravesando ni la cadena actual ni cualquier otra cadena de la misma tabla.
  • DROP: El paquete se elimina completamente dentro de la cadena actual, y no será procesado en ninguna de las cadenas principales de ninguna tabla. Tampoco se enviará ninguna información en ninguna dirección para informar de ello.
  • REJECT: El paquete se elimina completamente dentro de la cadena actual, aunque en este caso sí que se devuelve información al equipo que envió el paquete. Sólo es válido en las cadenas INPUT, OUTPUT y FORWARD.
  • DNAT (Destination Network Address Translation): Modifica la dirección y el puerto de destino en el paquete. Se emplea, por ejemplo, en los casos donde se tiene una IP pública y se quiere redirigir los accesos al cortafuegos hacia algún otro equipo en una zona fuera del DMZ. Necesita un parámetro opcional para indicar la ip y puerto destino (--to ip:puerto).
  • SNAT (Source Network Address Translation): Modifica la dirección y el puerto de origen en el paquete. Se emplea, por ejemplo, cuando queremos sustituir las direcciones IP de la red local que está detrás del cortafuegos, por la dirección IP del cortafuegos. Necesita un parámetro opcional para indicar la ip y puerto origen (--to ip:puerto).
  • MASQUERADE: Modifica la dirección y el puerto de origen en el paquete, como en SNAT, pero cuando la IP que se asigna es dinámica, ya que el equipo la posee gracias a un servidor DHCP.
  • QUEUE: El paquete se pone en cola, para que sea analizado por programas externos a Iptables.
  • RETURN: El paquete dejará la cadena en la que se encuentre, pero continuará por la cadena superior a esa si es que existe.
  • LOG: El paquete dejará un registro de su paso por el equipo.
  • MARK: Establece marcas en el paquete. Sólo es válido en la tabla mangle, pero no fuera de ella.
  • REDIRECT: Redirige el paquete hacia el mismo equipo local donde se ejecuta Iptables. Necesita un parámetro opcional para indicar hacia dónde se redirige (--to-ports puertos).
  • TOS: Modifica el campo Type Of Service de la cabecera del paquete.
  • TTL: Modifica el campo Time To Live de la cabecera del paquete.

 

Seguimiento de conexiones

El seguimiento de conexiones permite al núcleo llevar la cuenta de todas las conexiones y relacionar todos los paquetes que forman parte de una conexión. Por lo que se reconocen los siguientes estados del paquete.

  • NEW: Indica que el paquete es el primero de la conexión.
  • ESTABLISHED: Indica que el paquete forma parte de una conexión ya establecida. El estado NEW cambiará al estado ESTABLISHED en cuanto llegue un paquete de respuesta al cortafuegos (o cuando este paquete pase por el cortafuegos). Los mensajes de error ICMP, las redirecciones, ..., también se pueden considerar como ESTABLISHED, si hemos enviado un paquete que a su vez genera el mensaje de error ICMP.
  • RELATED: Indica que la conexión está ligada a otra conexión ya establecida. Por este motivo, para que una conexión se considere en estado RELATED primero debemos tener otra conexión en estado ESTABLISHED. Un ejemplo son las conexiones de datos FTP, relacionadas con el puerto de control FTP.
  • INVALID: Indica que el paquete no puede ser identificado o que no tiene ningún estado. Ésto puede ser debido a varias razones, como que el sistema se ha quedado sin memoria disponible, o a mensajes ICMP de error que no responden a ninguna conexión conocida. Normalmente es una buena idea eliminar (DROP) todo aquello que se encuentre en este estado.

 

Protocolos de conexión

Los protocolos definen cómo se van a enviar los paquetes entre el emisor y receptor.

  • TCP (Transmission Control Protocol): Se establece una conexión entre el emisor y el receptor, previamente al envío de paquetes entre ellos.
  • UDP (User Datagram Protocol): No se establece una conexión previa al envío, por lo que el emisor no tendrá respuesta de si el paquete ha llegado o no.
  • ICMP (Internet Control Message Protocol): Este protocolo se utiliza para el envío de mensajes de control y notificación de errores.
  • GRE (Generic Routing Encapsulation): Este protocolo establece túneles a través de Internet.
  • ALL: Haría referencia a todos los protocolos posibles.

 

Operaciones

A las reglas de Iptables se le pueden aplicar una de las siguientes operaciones:

  • -L | --list: Lista todas las reglas de la cadena.
  • -A | --append: Añade la regla al final de la cadena.
  • -I | --insert: Inserta la regla en la posición que indiquemos de la cadena.
  • -D | --delete: Elimina la regla de la cadena.
  • -R | --replace: Sustituye la regla en la cadena por la nueva.
  • -F | --flush: Elimina todas las reglas de la cadena.
  • -P | --policy: Crea una política por defecto en la cadena.

 

Coincidencias

Las condiciones son los patrones que se van a utilizar para buscar concordancias con los paquetes que pasan por Iptables, de esa manera podremos aplicarles las acciones que nosotros deseemos. Entre otras, están las siguientes:

  • -p protocolo | --protocol protocolo: Indica el protocolo de conexión que debe poseer el paquete.
  • -s ip/máscara | --source ip/máscara: Indica la dirección o red de origen del paquete.
  • -d ip/máscara | --destination ip/máscara: Indica la dirección o red de destino del paquete.
  • -i interfaz | --in-interface interfaz: Indica la interfaz de red del sistema por la que se recibe el paquete (sólo permitido en las cadenas PREROUTING, INPUT y FORWARD).
  • -o interfaz | --out-interface: Indica la interfaz de red del sistema por la que se envía el paquete (sólo permitido en las cadenas OUTPUT, FORWARD y POSTROUTING).
  • --sport puerto | --source-port puerto: Indica el puerto de origen del paquete (sólo para los protocolos TCP y UDP).
  • --dport puerto | --destination-port puerto: Indica el puerto de destino del paquete (sólo para los protocolos TCP y UDP).
  • -m state --state seguimiento: Indica el estado del paquete según el seguimiento de la conexión.
  • -m mac --mac-source direcciónMAC: Indica la dirección MAC de origen del paquete.

 

Reglas

Las reglas van a especificar una serie de condiciones para los paquetes, qué acciones hacer con esos paquetes que las cumplen y qué operación ejecutar en alguna de las tablas y cadenas.

La sintaxis general sería la siguiente. Lo que encontramos entre corchetes sería opcional.

iptables [-t tabla] operación [cadena] [coincidencia] [-j acción]

En el caso de que la regla sea para definir una política por defecto, la sintaxis será la siguiente.

iptables [-t tabla] operación acción

 

Algunos ejemplos de reglas serían los siguientes:


iptables -A INPUT -i eth1 -j ACCEPT

iptables -t nat -A POSTROUTING -s 10.0.1.0/24 -o eth3 -j MASQUERADE

iptables -t nat -A PREROUTING -i eth3 -p tcp --dport 3390 -j DNAT --to 10.0.2.10:3389

iptables -A FORWARD -i eth3 -p tcp -d 10.0.2.10 --dport 3389 -j ACCEPT

 

Configurando un cortafuegos real

En el siguiente enlace podéis seguir con el aprendizaje de Iptables, para saber cómo aplicar reglas concretas y cómo utilizarlo correctamente en un sistema.

Ir a Iptables - Aplicando reglas para configurar el cortafuegos.

 

 

Bibliografía

http://www.slideshare.net/afiebig/iptables-que-es-y-como-funciona

http://arkandasos.com/noticias/manual-practico-iptables/

http://rlworkman.net/howtos/iptables/spanish/iptables-tutorial.html