Cortafuegos

Zentyal utiliza para su módulo de cortafuegos el subsistema del kernel de Linux llamado Netfilter [2], que proporciona funcionalidades de filtrado, marcado de tráfico y redirección de conexiones.

[2]Netfilter: http://www.netfilter.org/

Configuración de un cortafuegos con Zentyal

El modelo de seguridad de Zentyal proporciona una configuración predeterminada segura que minimiza los esfuerzos necesarios a la hora de levantar un nuevo servicio en el sistema.

Cuando Zentyal actúa como cortafuegos, se instala normalmente entre la red interna y el router conectado a Internet. La interfaz de red que conecta la máquina con el router se marca como Externo en Red ‣ Interfaces. Así, el cortafuegos establece políticas de filtrado más estrictas para las conexiones externas que acceden a través de estas interfaces.

Interfaz externa

Interfaz externa

Zentyal deniega por defecto todo intento de conexión al sistema a través de las interfaces externas. En el caso de las interfaces internas, permite exclusivamente las conexiones dirigidas a los servicios definidos por los módulos instalados. Cada vez que un módulo de Zentyal es instalado, Zentyal añade automáticamente las reglas de cortafuegos necesarias para habilitar los nuevos servicios. Estas reglas pueden ser modificadas posteriormente por el administrador. La configuración predeterminada para la salida desde las redes internas y desde el propio servidor es permitir toda clase de conexiones.

La definición de las políticas del cortafuegos se hace desde Cortafuegos ‣ Filtrado de paquetes.

Secciones del firewall, dependiendo del flujo de tráfico

Secciones del firewall, dependiendo del flujo de tráfico

Cada una de las secciones que podemos ver en el diagrama controla diferentes flujos de tráfico, dependiendo del origen y destino:

  • Reglas de filtrado de redes internas a Zentyal (por ejemplo: permitir acceder al servidor de ficheros de Zentyal a los clientes de la red interna).
  • Reglas de filtrado para las redes internas (por ejempo: restringir el acceso a Internet a ciertos clientes de la red interna, impedir que la red DMZ acceda a otros segmentos de la LAN).
  • Reglas de filtrado desde la redes externas a Zentyal (por ejemplo: permitir que cualquier cliente en Internet acceda al módulo de Webmail).
  • Reglas de filtrado para el tráfico saliente de Zentyal (por ejemplo: conexiones desde el propio servidor hacia el exterior o interior).

Se debe tener en cuenta que permitir conexiones desde Internet a los diferentes servicios de Zentyal es potencialmente peligroso. Se recomienda estudiar las implicaciones de seguridad antes de modificar el tercer conjunto de reglas.

Esquema de los diferentes flujos de tráfico en el cortafuegos

Esquema de los diferentes flujos de tráfico en el cortafuegos

Estudiando el esquema podemos determinar en qué sección se encuentra el tipo de tráfico que deseamos controlar. Las flechas indican origen y destino. Todo el tráfico debe atravesar el cortafuegos de Zentyal para poder ser procesado.

Por ejemplo, la flecha Redes Internas que va de la LAN 2 hasta Internet, representa a uno de los equipos de la LAN, que es el origen, y una máquina en Internet como destino. La conexión será inevitablemente procesada por Zentyal dado que es la puerta de enlace de esa máquina.

Zentyal provee una forma sencilla de definir las reglas del cortafuegos. Para ellos usa los conceptos de alto nivel introducidos anteriormente en los Servicios de red para especificar a qué protocolos y puertos se aplican las reglas y los Objetos de red para especificar sobre qué direcciones IP de origen o de destino se aplican.

Lista de reglas de filtrado de paquetes desde las redes internas a Zentyal

Lista de reglas de filtrado de paquetes desde las redes internas a Zentyal

Normalmente cada regla tiene un Origen y un Destino que pueden ser Cualquiera, una Dirección IP o un Objeto en el caso que queramos especificar más de una dirección IP o direcciones MAC. En determinadas secciones, el Origen o el Destino son omitidos ya que su valor es conocido a priori. Por ejemplo, Zentyal siempre será el Destino en Tráfico de redes internas a Zentyal y Tráfico de redes externas a Zentyal como el Origen en Tráfico saliente de Zentyal a redes externas.

Cada regla tiene también asociado un Servicio, que especifica el protocolo y los puertos (o rango de puertos) a que se aplicará dicha regla. Los servicios con puertos de origen son útiles para reglas de tráfico saliente de servicios internos, por ejemplo un servidor HTTP interno. Por otra parte, los servicios con puertos de destino son útiles para reglas de tráfico entrante a servicios internos o tráfico saliente a servicios externos. Zentyal define una serie de servicios genéricos muy útiles como Cualquiera para seleccionar cualquier protocolo y puertos, Cualquiera TCP o Cualquiera UDP para seleccionar cualquier protocolo TCP o UDP respectivamente.

El parámetro de mayor relevancia será la Decisión a tomar con las conexiones nuevas. Zentyal permite tomar tres tipos distintos de decisiones:

  • Aceptar la conexión.
  • Denegar la conexión ignorando los paquetes entrantes y haciendo suponer al origen que no se ha podido establecer la conexión.
  • Registrar la conexión como un evento y seguir evaluando el resto de reglas. Ésto permite, a través de Registros ‣ Cortafuegos, supervisar las conexiones que se están realizando.

Las reglas configuradas aparecen en una tabla y son aplicadas ordenadamente “de arriba a abajo”. Cuando una regla ACEPTAR/DENEGAR es aplicable a una conexión, el paquete es inmediatamente procesado y se comienza desde el principio con el siguiente paquete. Debemos tener en cuenta que cuando se procesa un paquete, el filtrado se detiene, por lo que no se tienen en cuenta las reglas siguientes. Excepcionalmente las reglas de tipo REGISTRAR generan el registro y siguen pasando el paquete por el filtro del resto de reglas hasta encontrar una que sea aplicable.

Lo anterior significa que una regla genérica al principio de la tabla puede hacer que otra regla posterior más específica no sea evaluada. El orden de las reglas en las tablas es muy importante.

Existe la opción de aplicar un no lógico a la evaluación de miembros de una regla con Coincidencia Inversa para la definición de políticas avanzadas.

Creando una nueva regla en el firewall

Creando una nueva regla en el firewall

La decisión por defecto es denegar las conexiones, por lo que tendremos que añadir las reglas que las autoricen explícitamente. Hay una serie de reglas que se añaden automáticamente durante la instalación para definir una primera versión de la política del cortafuegos: se permiten todas las conexiones salientes hacia las redes externas (Internet) desde el servidor Zentyal (en Tráfico de Zentyal a redes externas) y también se permiten todas las conexiones desde las redes internas hacia las externas (en Tráfico entre redes internas y de redes internas a Internet). Además cada módulo instalado añade una serie de reglas en las secciones Tráfico de redes internas a Zentyal y Tráfico de redes externas a Zentyal normalmente permitiendo las conexiones desde las redes internas pero denegándola desde las redes externas. Ésto ya se hace implícitamente, pero facilita la gestión del cortafuegos puesto que de esta manera, para permitir el servicio, sólo hay que cambiar el parámetro Decisión no siendo necesario crear una regla nueva. Hay que tener en cuenta que estas reglas son añadidas durante el primer proceso de instalación de cada módulo y no son automáticamente modificadas posteriormente.

Finalmente, existe un campo opcional Descripción para comentar el objetivo de la regla dentro de la política global del cortafuegos.