[ES] – Tutorial CDN-WAF (Content Distribution Network – Web Application Firewall)

Tutorial CDN-WAF

CDN, red de entregas de contenido o Content Distribution Network, es una red de servidores distribuidos en distintos puntos del mundo. Estos servidores guardan la información de la web a la que se desea acceder y la suministran desde el punto más cercano donde se encuentre el usuario. Así se facilita que la conexión sea más rápida para todos los usuarios.Con esto se consigue evitar que todos los usuarios traten de acceder a un mismo servidor central que pueda llegar a colapsar.

Además , esta aplicación contiene reglas de WAF (Web Application Firewall) para segurizar el contenido a ser distribuido.

Los primeros pasos como utilizar el cdn-app se explica en el siguiente enlace https://soporte.planisys.net/general/introduccion-cdn-app/. La página web de cdn de Planisys esta dividida en diferentes secciones. En este tutorial se explicarán diferentes secciones y sus funcionalidades.

Tener en cuenta que la cdn de Planisys aún no soporta TLS v1.3 por la falta de consolidación de openssl-1.1.1 que se espera para principios 2019

La página principal de la cdn de Planisys (https://cdn-app.planisys.net/) se ve de esta manera:

La página principal presenta todas las cdn’s, clicando en la lupa podemos acceder a la configuración de cada cdn.
En la parte derecha, clicando el botón del menú aparecen algunas configuraciones de la página web. Estas configuraciones se explicaran detalladamente más adelante.

Explicación de cada cdn

Clicando sobre la lupa de un cdn en concreto, se nos abre una nueva ventana con toda la información general y configuración de este cdn.

Como podemos ver en página principal de cada cdn se explica un poco sobre la cdn, el nombre del cdn-host que usa, el tráfico. Pero también hay más herramientas para cada cdn, como se puede ver en la misma página arriba hay un lista de opciones, que se explicará a continuación.

Importante: cada vez que se haga un cambio hay que guardar ese cambio.

General Info

Explicación general sobre la cdn, como el nombre de esta, las Ip’s con que esta conectada,etc.

General Configuration

En este apartado se pueden crear y borrar diferentes sitio. Cada sitio tiene 6 configuraciones definidas (domains, protocol, upstream, rules, global flags y custom).

Domains

En este apartado se presentan todos los dominios relacionados a un sitio en concreto. Se puede añadir dominios para el mismo sitio.
El redirect sirve cuando hay más de un dominio podemos escoger el principal. Es decir tenemos dos dominios y escogemos uno con redirect, lo que pasará es que entrando con el segundo dominio se nos redirige al primero.

Protocol

Se presentan dos protocolos para la transferencia de hipertexto, se puede escoger cualquier de los dos.

El segundo protocolo que es el https, presenta una manera de poder securizar la página con el certificado y la clave privada, siendo que la clave privada es secreta, y la clave pública es parte del certificado SSL.

CDN-WAF de Planisys opera en HTTP/2 cuando se trata de HTTPS, lo que permite un importante grado de paralelismo y por lo tanto aceleración al cargar las páginas.

Upstream

Esta configuración nos permite crear diferentes upstreams para un sitio. En la creación del upstream definimos el nombre de ese mismo, el puerto y en el servidor escribimos el servidor del cual queremos hacer el upstream.

Por ejemplo podemos servir contenido HTTPS , pero tomar contenido de un upstream en HTTP.

Rules

La expresiones regulares se usan para poder comparar e igualar el texto. Esas reglas se definen para permitir que diferentes formatos, archivos se usan en la página web.

Global Flags

En este apartado se explicará cuales son los flags y su funcionalidad. Los flags presentados a continuación tienen la actividad de permitir o bloquear algunas funcionalidades

Bloquear SQL injection: en principio estos ataques son combinaciones de técnicas para conocer sobre la configuración de un servidor y de su base de datos. Es decir por medio de inserción de este código el atacante puede hacer modificaciones, borrar datos, etc. Este flag nos permite bloquear estos ataques mediante los análisis de patterns en el query_string.

Bloquear File Injection: inclusión de archivos permite a los atacantes acceder a los ficheros no autorizados o sensibles presentados en el servidor web. También este proceso permite  ejecución de maliciosos ficheros. Básicamente esta vulnerabilidad ocurre cuando la aplicación web permite subir fichero a su página. Cuando se pone el flag a ‘Yes’, este bloquea la inclusión de ficheros mediante análisis de patterns en el query_string.

Bloquear exploits: un exploit es un tipo de malware. Se trata de programas maliciosos que contienen datos o códigos ejecutables. Estos se aprovechan de las vulnerabilidades del software en un equipo local o remoto.  Este flag permite bloquear exploits mediante un análisis de patterns en el query_string.

Bloquear User-Agent peligrosos: una agente de usuario es una aplicación informática que funciona como cliente en un protocolo web. Dicho de otra manera el User Agent es la aplicación que se encarga de conectarnos a la web a la que deseamos acceder. El flag bloquea a los User Agents sospechosos de herramientas de hacking o bandwith-hogging, es decir programas destinados a consumir ancho de banda sin que sea para fines útiles o fines del negocio.

Usar el Hostheader del request: las cabeceras HTTP son los parámetros que se envían en una petición o respuesta de HTTP al cliente o al servidor para proporcionar información sobre transacción en curso. Poniendo el flag a ‘yes’ este permite utilizar el encabezado Host que viene con el request, o sinó forzar uno específico. El default es pasarle al upstream el encabezado Host que parte del request del navegador de usuario.

Ignore Query String en URL: El flag ignora la query_string, sólo que esta se almacenará en la caché como una copia del contenido de la URI antes de signo ‘?’. Si en cambio no se ignora el query-string (todo lo que viene en la URL después del signo “?” , se cacheará la URL completa incluyendo el query-string.

Force Caché: al activar este flag, se activa el Force-caché. Donde se fija un TTL (Time to Live es un parámetro que permite definir el momento en que los datos se conservan en la memoria caché del navegador) y no se toman en cuenta los encabezados del upstream. Uno de los encabezados de upstream es X-Accel Expires Cache-Control Vary. Al forzar caché , se ocultan los encabezados que vienen del upstream, y se fuerza un cacheado en el navegador.

Detect cookie: si decide detectar cookie, deberá especificar el nombre de la misma y el cache se segmentará de acuerdo a los diferentes valores que tenga esta cookie en el navegador del usuario final. Una cookie es un archivo creado por el sitio web que contiene pequeñas cantidades de datos y que se envían entre un emisor y un receptor.

Detect WEBP: webp es un formato gráfico en forma de contenedor que soporta tanto compresión con pérdida como sin ella. Este flag permite mantener una doble caché para lo navegadores que soportan  o no este formato. Esto depende de que el navegador , al pedir la imagen a la CDN, especifique que acepta p.ej. jpg , pero también webp.

Activar GEOIP: al activar este flag, se puede mantener diferenciados por código de país detectado según la IP que se conecta a CDN. De esta manera, el caché queda automáticamente particionado por país.

Nota: en una versión futura, se permitirá segmentar por ciudad, si es que el contenido varía según ciudad. Sin embargo, debe tenerse en cuenta que las direcciones IP geolocalizadas no siempre representan la localidad exacta del navegador, sino la localidad que declara el proveedor de conectividad.

Segurizar WordPress: en el caso de que el upstream sea un sitio de WordPress. En el WordPress existe un fichero xmlrpc.php, este fichero es muy vulnerable a ataques. Es muy débil a los ataques como de fuerza bruta o ataques offline como por ejemplo ataques DDoS. Este flag permite bloquear los accesos  archivos .php en wp-includes y wp-content, y contiene en general reglas de protección ya que WordPress out-of-the-box o después de instalar algún plugin es conocido por dejar vulnerabilidades.

Clickjacking,Sniffing and XSS Protection:clickjacking es una técnica maliciosa para engañar a usuarios de Internet con el fin de que revelen información confidencial o tomar control de su ordenador cuando hacen clic en páginas web que desde primera vista son inocentes. Sniffing es el robo de información basado en la técnica por la cual se puede escuchar todo lo que circula por la web. XSS ocurre cuando un atacante es capaz de inyectar un script, normalmente Javascript, en el output de una aplicación web de forma que se ejecuta en el navegador del cliente. Activando este flag nos permite la protección contra Cross-Site Scripting, inyección de scripts maliciosos, Clickjacking en frames ocultos y sniffing de contenido (OWASP Headers).
Strict Transport Security: permite setear el header HSTS para mantener la conexión en HTTPS y evitar downgrades a HTTP que permitan sniffing de cookies y captura de sesiones (OWASP Headers, RFC 6797). 
Content Security Policy: este flag nos presenta tres diferentes perfiles para evitar inyección de código Javascript externo. El  primer perfil se denomina Estricto donde se evita la inyección de scripts que no sean del mismo dominio que el del sitio. Otro perfil llamado Google permite la inyección del contenido de Google como fonts, analytics, etc. Último perfil es el Relaxed que permite la inyección del contenido Javascript de Google, Facebook y Zendesk.
Activar hotlinking: hotlinking es el robo de información o de links de otro sitio web. Activando este flag, se permite bloquear enlace externo de contenido propio.
Detect Mobile: permite redirigir a otra URL si se detecta mobile (FQDN Mobile), o segmentar el cache en desktop/mobile (Mobile Content).
Custom

Este apartado nos permite crear diferentes respuesta en el caso si algún error ocurre. Puede copiar y pegar una página custom HTML a ser mostrada , en caso que el upstream dé error y la CDN no tenga contenido para mostrar (no tenga “stale content”).

Purge cache
Purgar el cache significa eliminar las copias de objetos cacheados del caché. En el text box definimos la página donde queremos purgar la cache, una vez definimos la página clicamos en ‘Purge’ y las copias de objetos cacheados se eliminarán en tiempo real.
Historial

Aquí se definen todos los cambios realizados sobre un sitio. Cada cambio se identifica por un hash, el autor y cuándo se hizo el cambio.

Testing

En este apartado se hace el testeo de diferentes dominios con diferentes cdn-host, mediante los métodos Get y Post. Para hacer el testeo, definimos qué método usar, el protocolo, el dominio y en ‘send request to’ definimos el cdn-host.

Cuando clicamos el botón de ‘send’ en la parte derecha aparece la respuesta del testing, donde se especifica el status, el servidor usado, el contenido,etc. En la siguiente imagen se puede ver un ejemplo de la respuesta.

Billing

Esta apartado nos proporciona la información sobre el pago.

Barra de menú

Como se comentó en el principio hay una barra de menú en la parte derecha de la página principal. Este menú presenta tres opciones diferentes.

1.- Support: clicando sobre esta opciones se nos abre una ventana nueva donde podemos escribir los problemas que tenemos con el uso.

2.- Control panel: muestra el tráfico y lo que ha consumido cada cdn.

3.- SSL Tools: son las herramientas de las SSL. Explicación mas detallada esta en los tutoriales de ‘Generate new CSR and KEY con el link https://soporte.planisys.net/general/generate-new-csr-key/, y Chequear el par de CSR Y la clave privada con link https://soporte.planisys.net/general/chequear-el-par-de-csr-y-la-clave-privada/.