Tabla de Contenidos
Monitorización Web
Monitorización Web clásica
Introducción
En la versión Enterprise es posible monitorizar una web utilizando el componente WEB Server (Goliat Server).
Esta funcionalidad proviene de un antiguo proyecto del fundador de Pandora FMS: Goliat F.I.S.T. Fue un proyecto opensource para realizar auditorías de carga dinámicas sobre servicios web. Todavía se puede encontrar el código fuente (del año 2002); se dejó de mantener en junio de 2010.
En Pandora FMS funciona como un servidor independiente, similar al Servidor de Red, al Servidor WMI o al servidor de plugins remotos. Este sistema opera bajo el principio de transacción web, donde cada transacción completa contra una o varias páginas WEB está definida por uno o más pasos consecutivos, que deben concluir satisfactoriamente para considerar que la transacción ha terminado con éxito. La ejecución de una transacción web reproduce fielmente el proceso de navegación completo, que puede incluir aspectos como autenticar en un formulario, hacer clic en una opción del menú o rellenar un formulario, verificando que cada paso devuelve una cadena de texto concreta.
Cualquier fallo en un punto del proceso daría como resultado un fallo en la comprobación. La transacción completa incluye la descarga de todos los recursos (gráficos, animaciones, etc.) que contempla la navegación real. Además de realizar comprobaciones de funcionamiento y de tiempo de respuesta, es posible extraer valores de las páginas web para luego procesarlos.
Goliat es capaz de monitorizar tanto HTTP como HTTPS de forma transparente para el usuario; soporta gestión de sesiones a través de cookies, paso de parámetros y, por supuesto, la descarga de los recursos asociados a cada página. Tiene limitaciones importantes como son la gestión dinámica de JavaScript en tiempo de ejecución. Para transacciones web más complejas, Pandora FMS dispone de otro componente mucho más potente (y complejo) llamado Monitorización WUX (Web User Experience).
Instalación y configuración
Para poder utilizar Goliat, primero debe activarlo en el servidor Enterprise de Pandora FMS:
webserver 1
En función del número de peticiones que quiera hacer puede que tenga que aumentar el número de hilos y el timeout por defecto:
web_threads 1 web_timeout 60
Existe un token de configuración avanzado que le permitirá cambiar el tipo de librería que Goliat utiliza por debajo, LWP o CURL. Por defecto se utiliza CURL, aunque se puede cambiar en cualquier momento:
web_engine curl
Pandora FMS cuenta con protección contra CSRF y puede ocurrir que los chequeos web, al ser depurados, obtenga este mensaje:
Cannot verify the origin of the request
Tenga en cuenta esta protección para considerar el uso de “Monitorización WUX”.
Creación de módulos web
Para monitorizar de forma remota una página web, una vez creado el agente pulse sobre la pestaña superior de los módulos (Modules). En ella, seleccione crear un nuevo módulo de servidor Web (Webserver module) y pulse el botón Create:
Una vez que se pulse el botón Create, se mostrará un formulario en el que se han de rellenar los campos necesarios para poder monitorizar una web.
Debe seleccionar el tipo de chequeo WEB:
- Remote HTTP module to check latency: Obtiene el tiempo total que transcurre desde la primera petición hasta que se comprueba la última (en una prueba WEB existen una o varias peticiones intermedias que completan la transacción). Si en la definición del chequeo se ha definido que la transacción se realice más de una vez, se utilizará la media del tiempo de cada petición.
- Remote HTTP module to check server response: Obtiene un 1 (
OK
) o un 0 (CRITICAL
) como resultado de comprobar toda la transacción. Si existen varios intentos pero al menos uno de ellos falla, se considera que la prueba en su conjunto, también falla. Precisamente, el número de intentos se utiliza en ocasiones para evitar falsos positivos, para ello utilice el campo reintentos en campos avanzados. - Remote HTTP module to retrieve numeric data: Obtiene un valor numérico, parseando la respuesta HTTP utilizando una expresión regular para obtener ese valor.
- Remote HTTP module to retrieve string data: Análogo al punto anterior pero con una cadena de texto.
- Remote HTTP module to check server status code: Por medio de la herramienta curl debidamente habilitada con el token de configuración
web_engine curl
se puede retribuir las cabeceras HTTP.
Web checks: Este campo esencial define la comprobación WEB que se va a realizar. Esta se define en uno o más pasos, o peticiones simples. Esas peticiones simples se deben escribir en un formato especial en el campo Web checks. Las comprobaciones se inician con la etiqueta task_begin
y finalizan con la etiqueta task_end
.
Un ejemplo completo de transacción sencillo sería el siguiente:
task_begin head https://apache.org/ task_end
Luego de guardar se puede forzar la ejecución del Módulo y visualizar su resultado:
Otro ejemplo con más comandos:
task_begin get https://apache.org/ cookie 0 resource 0 check_string Apache Software Foundation task_end
En este ejemplo básico estamos comprobando si existe una cadena en una página web; para ello está la variable check_string
. Esta variable no permite comprobar HTML en sí, solo busca subcadenas de texto. Estamos buscando “Apache Software Foundation” en la web <https://apache.org>. Si existe esa cadena de texto, el chequeo devolverá OK (si es de tipo Remote HTTP module to check server response).
Para asegurarse de que una cadena no existe en una página web, puede utilizar la variable check_not_string
>
check_not_string Section 3
Los argumentos que toma la sintaxis de check_string
no son cadenas de texto normales, son expresiones regulares. Es decir, si busca la cadena Pandora FMS (4.0)
tendrá que buscarla con una expresión regular, por ejemplo: Pandora FMS \(4.0\)
. Esto le permite hacer búsquedas mucho más potentes, pero debe tener en cuenta que cualquier carácter que no sea una letra o un número tendrá que ser escapado con \
.
Para la comprobación de formularios existen varias variables adicionales:
- resource (1 ó 0): Descarga todos los recursos de la web (imágenes, vídeos, etc.).
- cookie (1 ó 0): Mantiene una cookie, o una sesión abierta para comprobaciones posteriores.
- variable_name : Nombre de una variable en un formulario.
- variable_value: Valor de la variable anterior en el formulario.
Con estas variables se podrá enviar datos a formularios y comprobar que funcionan correctamente.
En algunos casos de redirección de dominios los chequeos podrían no funcionar. Una manera de solucionarlo es modificar el módulo apuntando al dominio final.
Para el caso anterior el comando curl tiene el parámetro:
-L
en su versión corta y
--location
en su versión larga, para cuando reciba redirecciones HTTP 3XX
vuelva a ejecutar de nuevo contra el dominio redireccionado. Sin embargo la flexibilidad de Pandora FMS le permite hacer uso del botón de depurado.
Al momento de crear el Módulo se encuentra inactivo y podrá hacer uso de él luego de que haya hecho el primer chequeo, el cual usted puede forzar su ejecución para ganar tiempo.
Cuando modifique dicho Módulo, haga clic en el botón Debug y podrá entrar en modo de depuración para editar la consulta Query:
Bien puede ejecutar la consulta que tiene el módulo con el botón Execute query así como modificar y volver ejecutar con otros valores hasta que obtenga el resultado deseado.
Comprobar tiempo de carga de una web
Si queremos comprobar el tiempo de respuesta o latencia de una página web solo tenemos que seleccionar el tipo de módulo Remote HTTP module to check latency. Por ejemplo, si queremos conocer la latencia de la carga de la página web <https://pandorafms.com>.
task_begin get https://pandorafms.com task_end
Podemos añadir los token de configuración resource 1
para que el tiempo de descarga que calcule sea descargando todos los recursos (JavaScript, CSS, imágenes, etc), calculando así un dato aproximado a la realidad.
El tiempo de descarga de la web no es el tiempo que tarda en visualizarse una web en un navegador, ya suele depender del tiempo de carga del JavaScript. Aunque Goliat lo descarga, no lo ejecuta.
Chequeos a través de un Proxy
Los chequeos web también soportan el uso de proxy. Para realizar su configuración debe añadir la URL del proxy en la casilla que se encuentra al pulsar en Advanced options:
Por ejemplo:
http://proxy.domain.com:8080
Si el proxy requiere autenticación, debe utilizar el siguiente esquema, donde my-user
es el nombre de usuario y my_pwd
la contraseña:
http://my-user:[email protected]:8080
Obteniendo datos de una página web
Algunas veces la monitorización no consiste en comprobar si una página web específica está funcionando o cuánto tarda, sino que se debe obtener un valor en tiempo real, como por ejemplo el número total de módulos registrados en el mismo servidor PFMS por medio de la API. Para este ejemplo se empleará un módulo denominado Remote HTTP module to retrieve numeric data (“Módulo HTTP remoto para recuperar datos numéricos”) con la expresión regular o regex adecuada:
task_begin get http://127.0.0.1/pandora_console/include/api.php?apipass=1234&user=internal_API&pass=1234&op=get&op2=total_modules&id=0 get_content \d+ task_end
Se obtiene algo similar a:
También es posible especificar una expresión regular más compleja para recoger datos de respuestas HTML con el token de configuración get_content_advanced
. En este ejemplo didáctico se obtiene el año en el pie de página de la documentación oficial de Pandora FMS (para almacenarlo se utiliza un tipo de dato de cadena Remote HTTP module to retrieve string data):
task_begin get https://pandorafms.com/manual/ get_content_advanced \(c\) ([\d]+) Pandora FMS\(tm\) </span> task_end
Nótese que se ha empleado el intervalo inverso: si se recibe una cadena de texto que no sea
2022
el módulo pasará a crítico.
- La parte de la expresión regular definida en
get_content_advanced
debe estar encerrada entre paréntesis. - Si el texto a buscar contiene paréntesis, debe escapar los caracteres de por medio de la barra inversa
\
.
Para configurar los umbrales que dispararán los estados de advertencia o criticidad, utilice la configuración del módulo para comprobar que la cadena recibida coincide con el valor esperado.
Comprobación de formulario en una página web
Una comprobación de formulario es mucho más compleja que la simple comprobación de un texto en una página web. Este ejemplo utiliza la Consola Pandora FMS, inicia sesión y comprueba que, efectivamente, ha sido capaz de ello. Funciona verificando un texto en la sección de Workspace donde muestra los datos del propio usuario que ha iniciado sesión. Si se trata de una consola por defecto, el usuario admin contiene la descripción “Admin Pandora”.
Para poder realizar este tipo de comprobaciones se deben tener las credenciales necesarias. Además, es necesario ir a la página y obtener el código HTML para obtener los nombres de las variables, y luego es preciso tener conocimientos mínimos de HTML para introducir la consulta para Goliat.
El método práctico para diseñar una prueba transaccional WEB con varios pasos es probarlos uno por uno en modo de depuración de errores.
La Consola de ejemplo está en:
http://192.168.70.116/pandora_console/
Analizando su código HTML, se observa que las variables del formulario web de inicio de sesión son:
nick
> nombre del usuariopass
> contraseña para el usuario
Se deberán usar las variables variable_name
y variable_value
conjuntas para poder validar el formulario.La Consola PFMS tiene, por defecto, los valores admin
y pandora
.
El primer paso es acceder al formulario, enviar el usuario y contraseña y autenticar (determinar el éxito de esa autenticación se realiza en un segundo paso).
task_begin post http://192.168.70.116/pandora_console/index.php? login=1 variable_name nick variable_value admin variable_name pass variable_value pandora cookie 1 resource 1 task_end
Se utiliza el token cookie 1
para mantener la persistencia de valores obtenidas en el paso anterior, de haber logrado una autenticación exitosa. A continuación se accede a la página de detalles del usuario para buscar el número de teléfono, que por defecto para el usuario “admin” es 555-555-555. Si lo podemos “ver” entonces indica que ha iniciado sesión correctamente en la Consola (note el uso del comando check_string
):
task_begin get http://192.168.70.116/pandora_console/index.php? sec=workspace&sec2=operation/users/user_edit cookie 1 resource 1 check_string 555-555-5555 task_end
Para finalizar debemos desconectar de la Consola y buscar el mensaje de desconexión Logged out
>
task_begin get http://192.168.70.116/pandora_console/index.php? bye=bye cookie 1 resource 1 check_string Logged out task_end
Comprobación total del script:
Comportamiento de las peticiones WEB
Los campos de las propiedades avanzadas son similares a los de otros tipos de módulos, aunque existen algunos campos diferentes y propios de los chequeos WEB:
Timeout
Tiempo de expiración durante la petición; si se supera este tiempo la petición de comprobación se descartará.
Agent browser id
Identificador de navegador web a utilizar, ya que determinadas páginas solo aceptan algunos navegadores web (para más información: https://www.zytrax.com/tech/web/browser_ids.htm).
Requests
Pandora FMS repetirá la comprobación el número de veces que se indique en este parámetro. Si una de las comprobaciones falla, la comprobación se dará como errónea. Dependiendo de la cantidad de comprobaciones en el módulo se obtendrá un número determinado de páginas; es decir, si el módulo consta de tres comprobaciones se descargarán tres páginas, y si en el campo Requests se ha establecido algún valor, entonces el número de descargas se multiplicará por este. Es importante tener esto en cuenta para calcular el tiempo total que tardará el módulo en completar las operaciones.
Retries
El número de veces que realiza un Request hasta conseguir un resultado exitoso. Ejemplos:
- retries = 2 y Requests = 1: Si la primera prueba fallara reintentará una vez más, y si a la segunda funciona el chequeo es válido.
- Retries = 1 y Requests = 2: Realiza dos chequeos, pero si cualquiera de los dos falla, resultará como chequeo fallido.
Utilizando autenticación HTTP Simple
Algunas páginas pueden requerir autenticación simple HTTP. Generalmente es utilizada como un rápido, un “saludo” de seguridad mínima que permite acceder a comprobaciones de seguridad más avanzadas (cifrado, persistencia de datos, etcétera).
Se puede configurar en las opciones avanzadas del chequeo (o directamente en la definición de la tarea WEB) con los siguientes token de configuración:
Check type
Tipo de chequeo con el servidor HTTP.
http auth (login)
Usuario http.
http auth (password)
Contraseña de usuario http.
Proxy auth realm
Nombre de la zona (realm) de autenticación.
Proxy auth (server)
Dominio web y su puerto.
Proxy URL
Dirección url del proxy.
Proxy auth (login)
Usuario de conexión del proxy.
Proxy auth (pass)
Contraseña de conexión al proxy.
Ejemplo completo:
task_begin get http://artica.es/pandoraupdate4/ui/ cookie 1 resource 1 check_string Pandora FMS Update Manager \(4.0\) http_auth_serverport artica.es:80 http_auth_realm Private area http_auth_user admin http_auth_pass xxxx task_end
El uso de comillas en la contraseña para http_auth_pass
no está soportado. Evite el uso de comillas simples '
Monitorización de webservices y APIs
Con Pandora FMS y Goliat se pueden monitorizar API de tipo REST, exceptuando tipos de API más complejas basadas en protocolos como SOAP o XMLRPC.
Para comprobar una API con este tipo de llamada, por ejemplo, que devuelve un número entero mayor o igual a cero si funciona y ningún caracter si falla (usando credenciales my_user
y my_pass
):
task_begin get http://artica.es/integria/include/api.php?user=my_user&pass=my_pass&op=get_stats¶ms=opened,,1 check_string \n[0-9]+ task_end
Devuelve una respuesta similar a:
HTTP/1.1 200 OK Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Connection: close Date: Mon, 13 May 2013 15:39:27 GMT Pragma: no-cache Server: Apache Vary: Accept-Encoding Content-Type: text/html Expires: Thu, 19 Nov 1981 08:52:00 GMT Client-Date: Mon, 13 May 2013 15:39:27 GMT Client-Peer: 64.90.57.215:80 Client-Response-Num: 1 Client-Transfer-Encoding: chunked Set-Cookie: a81d4c5e530ad73e256b7729246d3d2c=pcasWqI6pZzT2x2AuWo602; path=/ 0
Mediante la comprobación de la salida con una expresión regular, puede verificar que está todo correcto. Para respuestas más complejas, debe usar otras expresiones regulares acordes a cada caso.
Algunos ejemplos más:
task_begin get https://swapi.dev/api/planets/1/ get_content Tatooine task_end
En este caso el módulo creado para mostrar los datos debe estar establecido al tipo Remote HTTP module to retrieve string data (web_content_string).
task_begin get https://pokeapi.co/api/v2/pokemon/ditto/ get_content imposter task_end
Al igual que con el módulo anterior, el tipo de datos deberá ser 'Remote HTTP module to retrieve string data (web_content_string)' para que funcione correctamente.
Se pueden realizar también llamadas con get_content_advanced:
task_begin get https://api.hillbillysoftware.com/Awards/ByYear/1990 get_content_advanced "Nominee":"([A-Za-z ]+)","Year":"1990" task_end
Resultado:
Para verse reflejado en Pandora FMS como:
Es importante definir correctamente los grupos de captura entre paréntesis para que la llamada se realice de manera adecuada.
Al hacer llamadas a la API es importante tener en cuenta que la API destino debe tener permisos para poder ser consultada.
Monitorización https
Goliat puede comprobar tanto http como https. Para poder hacer comprobaciones sobre web segura basta con especificar este protocolo en la URL, por ejemplo:
task_begin get https://www.google.com/accounts/ServiceLogin?service=mail&passive=true&rm=false&continue=https%3A%2F%2Fmail.google.com%2Fmail%2F%3Fui%3Dhtml%26zy%3Dl&bsv=zpwhtygjntrz&ss=1&scc=1<mpl=default<mplcache=2 cookie 1 resource 0 check_string Google task_end
Opciones avanzadas
Modificando cabeceras HTTP
Con la opción header se pueden modificar campos de la cabecera HTTP o crear campos personalizados. Por ejemplo, para cambiar el campo Host de la cabecera HTTP:
task_begin get http://192.168.1.5/index.php header Host 192.168.1.1 task_end
Depurando chequeos web
Se pueden depurar los chequeos web añadiendo la opción debug <log_file>
. Se crearán dos ficheros log_file.req
y log_file.res
con los contenidos de la petición HTTP y la respuesta, respectivamente. Por ejemplo:
task_begin get http://192.168.1.5/index.php debug /tmp/request.log task_end
Utilizando Curl en vez de LWP
La librería LWP puede dar problemas cuando muchos hilos llevan a cabo peticiones HTTPS (debido a una limitación de OpenSSL). La alternativa es utilizar la herramienta curl. Para solucionar este problema, edite el fichero /etc/pandora/pandora_server.conf
y añada la siguiente línea:
web_engine curl
Reinicie el servidor de Pandora FMS, y el binario de Curl se utilizará para llevar a cabo las comprobaciones web en vez de LWP.
Monitorización transaccional avanzada
Además de la funcionalidad que ofrece Goliat, existen otras maneras de realizar una monitorización transaccional web.
- De manera distribuida (UX), desplegada en modo de “agente” en sistemas diferentes al servidor, incluso en redes no accessibles.
- De manera centralizada (WUX).