NGFW

NGFW (de sus siglas en inglés: Next Generation FireWall) es, de forma muy resumida, un firewall que es capaz de aplicar control de acceso a nivel 7 (capa de aplicación). Esto significa que estos firewalls entienden las diferentes aplicaciones que generan el tráfico que pasa por ellos, y no se limitan exclusivamente a dejar pasarlo porque tienen una regla de permitir el puerto tcp/80, si no que son capaces de distinguir el tráfico de ese puerto 80 y ver que se tratan de conexiones de Facebook, de Gmail, de Youtube, por poner algunos ejemplos.

Pero un NGFW hace más que eso. De hecho, se trata de un conjunto de funcionalidades de seguridad que en su día estaban en diferentes equipos, y que con el concepto de NGFW se han ido unificando en el mismo equipo: el Firewall. Esto ha sido posible gracias al avance tecnológico de los procesadores y hardware en general, conforme se iba avanzando, se iba dotando de mayor potencia a los firewalls y éstos podían hacer cada vez más cosas.

Si pensamos el motivo sobre porqué se han juntado en el firewall todas esas funcionalidades, resulta casi obvio. El firewall está situado en el punto estratégico de la red: todo el tráfico desde nuestras redes hacia fuera y viceversa, pasa por él. Del mismo modo, el tráfico entre nuestras redes internas, también podrían pasar por él. Es un punto de control ideal para todo el tráfico de nuestra organización, y es lógico que en este punto apliquemos todas las medidas de seguridad necesarias.

Hablar de que funcionalidades NGFW integra FWCloud.

Los plugins que facilitan el proceso de integración de las funcionalidades en los FWs gestionados por FWCloud

El sistema de plugins de FWCloud simplifica en gran medida la integración de funcionalidades NGFW en los firewalls gestionados desde una consola FWCloud

HOWTO

A continuación vamos a describir de forma detallada como activar las funcionalidades NGFW en FWCloud.

En primer lugar lo que tenemos que hacer es montar nuestra consola basada en Elasticsearch y Kibana, la cual nos permitirá visualizar los logs generados por las distintas funcionalidades que vamos a integrar en nuestro firewall.

Atención, estas herramientas precisan de mucha memoria, se recomienda disponer de al menos 8GB de RAM.

Necesitamos tener FWCloud-Agent en su última versión instalado en nuestro firewall. Como ver la versión de FWCloud-Agent, referencia a la documentación de FWCloud-Agent y a la sección de como actualizarlo.

A través de la sección de plugins activamos el plugin Elasticsearch. Podemos utilizar para ello el mismo servidor en donde tenemos instalado FWCloud.

Apuntar los datos que salen al finalizar la instalación de Elasticsearch.

Activamos el plugin Kibana en el mismos servidor y accedemos a la URL del Kibana.

Insertamos el enrollment token y luego tendremos que acceder al servidor donde tenemos instalado el Kibana para ejecutar el siguiente comando:

/usr/share/kibana/bin/kibana-verification-code

E insertar el código de verificación generado.

A continuación se configurará Kibana y luego nos pedirá usuario y contraseña para acceder. Podemos utilizar el usuario elastic con la contraseña que se generó cuando instalamos Elasticsearch.

El siguiente paso es instalar Filebeat.

/etc/docker/daemon.json

Y verificar que la opción iptables está a false o bien añadirla si no existe previamente.

{
  "iptables": false
}

A continuación reiniciamos el servicio Docker para limpiar las reglas que pudiera haber creadas previamente.

sudo systemctl restart docker

Nos aseguramos de que ya no existen reglas generadas por Docker mediante el siguiente comando que nos debería generar una salida similar a la que vemos a continuación.

 

# iptables -nL

Chain INPUT (policy ACCEPT)

target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)

target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)

target     prot opt source               destination 

Si vemos que aún existen reglas generadas por Docker lo mejor es reiniciar el servidor para limpiar estas.

A continuación vamos a utilizar dos contenedores Docker uno basado en la imagen de Ubuntu en el cual ejecutaremos un bash y otro con la imagen de Nginx, exponiendo un puerto TCP para accede al mismo,  de ese modo veremos como permitir el acceso al mismo mediante la política FWCloud.

 

docker run -ti ubuntu /bin/bash

docker run -d -p 8080:80 nginx

Si intentamos hacer un ping a la ip 8.8.8.8 desde el bash que hemos lanzado en el contenedor con imagen ubuntu veremos que no responde. Esto es consecuencia de que hemos deshabilitado el que Docker genere automáticamente las reglas IPTables que permiten dicha comunicación. Por lo tanto, tenemos que generar mediante FWCloud la política necesaria para permitir esto y cualquier otro flujo de comunicación que nos interese.

 

Integración

Veamos a continuación como generar en FWCloud la política de seguridad para permitir que nuestros contenedores Docker puedan acceder a Internet, así como para habilitar el acceso al servicio del contenedor con imagen Nginx.

Para permitir que desde nuestro contenedor con imagen Ubuntu podamos hacer un ping hacia IPs de Internet como la 8.8.8.8 tenemos que añadir dos reglas en la política gestionada a través de nuestra consola FWCloud. La primera de ellas tiene que hacer un SNAT de la IP de nuestro contenedor Docker a la IP de salida del equipo en el cual se está ejecutando el mismo, para que así podamos acceder a Internet desde dicho contenedor.

 

Ahora necesitamos permitir el tráfico en la política de forward, entrando por la interfaz virtual asignada a nuestro contenedor y saliendo por la interfaz de acceso a Internet del servidor en el cual estamos ejecutando el contenedor. 

 

Con estas dos reglas ya deberíamos de poder hacer ping a internet desde el bash que estamos ejecutando desde nuestro contenedor Docker con imagen ubuntu.

 

A continuación, para permitir acceso al servicio Nginx del otro contenedor Docker, expuesto a través del puerto 8080, lo único que tenemos que hacer es permitir dicho servicio en la política de INPUT de nuestro firewall tal y como se muestra en la siguiente captura de pantalla.

 

Como se puede apreciar a través del ejemplo que acabamos de ver, es muy sencillo definir a través de FWCloud la política necesaria para los contenedores Docker ejecutados en nuestro servidor. Además, gestionar la política desde FWCloud en vez de permitir que Docker la genere automáticamente nos proporciona mayor control acerca de los servicios y comunicaciones que nos interesa permitir.