Cortafuegos¶
Introducción al sistema de 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 de redirección de conexiones.
[2] | http://www.netfilter.org/ |
Configuración de un cortafuegos con Zentyal¶
El modelo de seguridad de Zentyal se basa en intentar proporcionar la máxima seguridad posible en su configuración predeterminada, intentando a la vez minimizar los esfuerzos a realizar tras añadir un nuevo servicio.
Cuando Zentyal actúa de cortafuegos, normalmente se instala entre la red interna y el router conectado a Internet. La interfaz de red que conecta la máquina con el router debe marcarse como Externo en Red -> Interfaces de red para permitir al cortafuegos establecer unas políticas de filtrado más estrictas para las conexiones procedentes de fuera.
La política para las interfaces externas es denegar todo intento de nueva conexión a Zentyal mientras que para las interfaces internas se deniegan todos los intentos de conexión excepto los que se realizan a servicios definidos por los módulos instalados. Los módulos añaden reglas al cortafuegos para permitir estas conexiones, aunque siempre pueden ser modificadas posteriormente por el administrador. Una excepción a esta norma son las conexiones al servidor LDAP, que añaden la regla pero configurada para denegar las conexiones por motivos de seguridad. La configuración predeterminada tanto para la salida de las redes internas como desde del propio servidor es permitir toda clase de conexiones.
La definición de las políticas del cortafuegos se hace desde Cortafuegos ‣ Filtrado de paquetes.
Se pueden definir reglas en 5 diferentes secciones según el flujo de tráfico sobre el que serán aplicadas:
- Tráfico de redes internas a Zentyal (ejemplo: permitir acceso al servidor de ficheros desde la red local).
- Tráfico entre redes internas y de redes internas a Internet (ejemplo: restringir el acceso a todo Internet o determinadas direcciones a unas direcciones internas o restringir la comunicaciones entre las subredes internas).
- Tráfico de Zentyal a redes externas (ejemplo: permitir descargar ficheros por HTTP desde el propio servidor).
- Tráfico de redes externas a Zentyal (ejemplo: permitir que el servidor de correo reciba mensajes de Internet).
- Tráfico de redes externas a redes internas (ejemplo: permitir acceso a un servidor interno desde Internet).
Hay que tener en cuenta que los dos últimos tipos de reglas pueden crear un compromiso en la seguridad de Zentyal y la red, por lo que deben utilizarse con sumo cuidado.
Zentyal provee una forma sencilla de definir las reglas que conforman la política de un cortafuegos. La definición de estas reglas usa los conceptos de alto nivel introducidos anteriormente: 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.
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; será siempre Zentyal tanto el Destino en Tráfico de redes internas a Zentyal y Tráfico de redes externas a Zentyal como el Origen en Tráfico de Zentyal a redes externas.
Además cada regla siempre tiene asociado un Servicio para especificar el protocolo y los puertos (o rango de puertos). Los servicios con puertos de origen son útiles para reglas de tráfico saliente de servicios internos, por ejemplo un servidor HTTP interno, mientras que los servicios con puertos de destino son útiles para reglas de tráfico entrante a servicios internos o tráfico saliente a servicios externos. Cabe destacar que hay una serie de servicios genéricos que son muy útiles para el cortafuegos 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. De esta manera, a través de Registros -> Consulta registros -> Cortafuegos podemos ver sobre qué conexiones se están produciendo.
Las reglas son insertadas en una tabla donde son evaluadas desde el principio hasta el final, una vez que una regla acepta una conexión, no se sigue evaluando el resto. Una regla genérica al principio puede hacer que otra regla más específica posterior no sea evaluada, es por esto por lo que 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 la regla con Inversa para la definición de políticas más avanzadas.
Por ejemplo, si queremos registrar las conexiones a un servicio, primero tendremos la regla que registra la conexión y luego la regla que acepta la conexión. Si estas dos reglas están en el orden inverso, no se registrará nada ya que la regla anterior ya acepta la conexión. Igualmente si queremos restringir la salida a Internet, primero explícitamente denegaremos los sitios o los clientes y luego permitiremos la salida al resto, invertir el orden daría acceso a todos los sitios a todo el mundo.
Por omisión, la decisión es siempre denegar las conexiones y tendremos que explícitamente añadir reglas que las permitan. 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. Esto ya se hace implícitamente, pero facilita la gestión del cortafuegos puesto que de esta manera para permitir el servicio solamente hay que cambiar el parámetro Decisión y no es necesario crear una regla nueva. Destacar que estas reglas solamente son añadidas durante el proceso de instalación de un módulo por primera vez y no son modificadas automáticamente en el futuro.
Finalmente, existe un campo opcional Descripción para comentar el objetivo de la regla dentro de la política global del cortafuegos.
Redirección de puertos con Zentyal¶
Las redirecciones de puertos de destino se configuran en Cortafuegos ‣ Redirecciones de puertos.
Para configurar una redirección hay que establecer la Interfaz donde se recibe el tráfico sobre el que se va a hacer la traducción, el Destino original (que puede ser el servidor Zentyal, una dirección IP o un objeto), el Puerto de destino original (que puede ser Cualquiera, un Puerto determinado o un Rango de puertos), el Protocolo y el Origen (que también puede ser Cualquiera, una Dirección IP o un Objeto). Además estableceremos la dirección IP de Destino y finalmente, el Puerto donde la máquina destino recibirá las peticiones, que puede ser el mismo que el original o no. Existe también un campo opcional de Descripción para aclarar el propósito de la regla.