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.
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
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.
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/.