viernes, 11 de octubre de 2013

Introducción a Iptables


origin_100250487
Para todos los que inician el camino hacia Linux, la seguridad es algo que preocupa, ya que cuando se busca un antivirus u otra aplicación de seguridad para la distribución elegida, son pocas las opciones que se encuentran. Esto se debe a que de por sí, Linux trae implementada una de las mejores (si no la mejor a mi punto de vista personal) medidas de securización que se pueden encontrar, Iptables. Iptables es un potente firewall que Linux integra en el propio Kernel y que forma parte del proyecto netfilter (compuesto por IPtables, ip6tables, ebtables, arptables e ipset). Este cortafuegos, al igual que su predecesor Ipchains, es totalmente configurable, tanto por línea de comandos, sin necesidad de instalar nada en el sistema, o mediante alguna interfaz gráfica que ya son varias las que circulan por la red. Es cierto que ha tenido alguna vulnerabilidad conocida durante su existencia, como el que permitiese la realización de ataques DoS (Dennied of Service o denegación de servicio), pero no es ni mucho menos tan ‘frágil’ como puede llegar a ser un servidor que tengamos que iniciar aparte del equipo para que vigile la red y que en cualquier momento se pueda caer, o como alguna aplicación de terceros que mantengamos en servicio escuchando ciertos puertos.
IPtables se inicia junto con el sistema y se mantiene activo todo el tiempo, adecuándose y aplicando a todo el tráfico de red las reglas que se le hayan configurado previamente. Para explicarlo de una forma muy simplista, tenemos que abstraernos del equipo y olvidar por un momento toda la configuración específica de nuestra máquina. Teniendo en cuenta que las reglas de IPtables están a nivel de Kernel, el Kernel lo que recibe es un paquete de datos y decidirá qué hacer con él. Es ahora cuando, dependiendo de si el paquete es para nuestro equipo o para otro, consultará las reglas de IPtables y decidirá lo que hará con el paquete según dichas reglas. Según la configuración aplicada, el paquete de datos de red pasará por nuestro equipo sin ser procesado, entrará se procesará y saldrá, o directamente será devuelto.

Tipos de tablas

Existen tres tipos de tablas en IPtables y os las presentamos en orden de posible aplicación:

Tablas MANGLE

Las tablas MANGLE, se encargan de la modificación de los paquetes, como los TTL o TOS por ejemplo, en el momento que se le especifique. No es utilizada normalmente por lo que no nos detendremos mucho en este apartado. Sólo comentar que hasta el Kernel 2.4.17 se componía de 2 cadenas; PREROUTING para modificar los paquetes entrantes antes de enrutarlos hacia el siguiente nivel de IPtables, y OUTPUT para alterar paquetes generados localmente antes de enrutarlos. Desde el Kernel 2.4.18 tres nuevas cadenas se implementaron en las tablas MANGLE; INPUT para modificar paquetes entrantes, FORWARD para alterar paquetes que a continuación serán enrutados a través de IPtables y POSTROUTING para cambiar paquetes que están listos para salir.

Tablas NAT: PREROUTING, POSTROUTING

Las tablas NAT (network address translation o traducción de direcciones de red) serán consultadas cuando un paquete cree una nueva conexión. Permiten compartir una dirección IP pública entre muchos equipos, lo que es imprescindible en muchas situaciones por la escasez de direcciones IPv4. También permiten añadir reglas que modifican las direcciones IP de los paquetes. Contiene dos tipos principales de reglas, SNAT (o IP masquerading) para cambiar la dirección de origen y DNAT (o Port Forwarding) para las direcciones de destino. Contiene tres cadenas de modificación, PREROUTING para modificar paquetes tan pronto lleguen al equipo, OUTPUT para alterar paquetes generados localmente antes de enrutarlos y POSTROUTING para modificar paquetes que están listos para salir del equipo.

Tablas de Filtrado: INPUT, OUTPUT, FORWARD

Las tablas de filtrado se utilizan por defecto para el manejo que los paquetes de datos. Es responsable del filtrado de dichos paquetes según la cadena que esté configurada para cada uno de ellos hacia un destino u otro, o bloquearlo. Todos los paquetes pasan a través de esta tabla, que contiene tres cadenas predefinidas: INPUT (ENTRADA) con la que todos los paquetes destinados a este sistema atraviesan esta cadena (y por esto se la llama algunas veces LOCAL_INPUT o ENTRADA_LOCAL),OUTPUT (SALIDA) para todos los paquetes creados por este sistema atraviesen esta cadena (a la que también se la conoce como LOCAL_OUTPUT o SALIDA_LOCAL) y FORWARD (REDIRECCIÓN) con la que todos los paquetes simplemente pasan por este sistema para ser encaminados a su destino recorren esta cadena.
Cada paquete de red recibido o enviado desde un sistema Linux está sujeto a al menos una tabla. Sin embargo, un paquete puede estar sometido a múltiples reglas dentro de cada tabla antes de emerger al final de la cadena. La estructura y propósito de estas reglas puede variar, pero normalmente buscan identificar un paquete que viene de o se dirige hacia una dirección IP en particular, o un conjunto de direcciones, cuando utiliza un determinado protocolo y servicio de red.
Independientemente de su destino, cuando un paquete cumple una regla en particular en una de las tablas, se les aplica un objetivo (target) o acción a ellos. Si la regla especifica un objetivo ACCEPT para un paquete que coincida, el paquete se salta el resto de las verificaciones de la regla y se permite que continúe hacia su destino. Si una regla especifica un objetivo DROP, a ese paquete se le niega el acceso al sistema y no se envía nada de vuelta al servidor que envió el paquete. Si una regla especifica un objetivo QUEUE, el paquete se pasa al espacio del usuario. Si una regla especifica el objetivo opcional REJECT, el paquete es descartado, pero se envía un paquete de error al que envió el paquete.
Cada cadena tiene una política por defecto de ACCEPT (aceptar), DROP (eliminar), REJECT(rechazar), o QUEUE. Si ninguna de estas reglas en la cadena se aplican al paquete, entonces el paquete es tratado de acuerdo a la política por defecto.

Tipos de Targets

Estas políticas son conocidas también como Targets (objetivos) para las cadenas anteriormente citadas y los más comunes son:

Target ACCEPT

Un vez que el paquete cumple la todas las condiciones que hayamos especificado, si usamos la opción -j ACCEPT el mismo será aceptado y no recorrerá más reglas de la cadena actual y de ninguna otra de esa misma tabla. Esto es importante aclararlo ya que el paquete puede ser eliminado en otra tabla.

Target DROP

Un vez que el paquete cumple la todas las condiciones que hayamos especificado, si usamos la opción -j DROP el mismo será bloqueado y no será procesado en ningún otra cadena ni tabla.
Esto puede traer como inconveniente dejar sockets muertos y en muchos casos conviene usar el target REJECT

Target REJECT

Este módulo tiene el mismo efecto que «DROP», excepto que al remitente se le envía un mensaje de error  ICMP «port unreachable»

Target QUEUE

Se utiliza para procesar los paquetes que llegan por un determinado proceso, independientemente de que vayan o no dirigidos a él.
Hasta aquí la información más básica acerca de IPtables. Con esto deberíamos ser capaces de entender cómo funciona este excepcional cortafuegos. Muy pronto publicaremos cómo configurarlo, suscribiros para no perdéroslo!

No hay comentarios.: