Maquinaria X : servidor web alterno y su monitorización artesanal.

En el mercado de servidores web no existe monopolio alguno y Maquinaria X ( Nginx ) viene a suplir ciertas deficiencias del Apache 2 para nuestros blogs.

Maquinaria X: Nginx logotipo (tomado de Wikipedia https://commons.wikimedia.org/wiki/File:Nginx_logo.svg)
Maquinaria X: Nginx logotipo (tomado de Wikipedia https://commons.wikimedia.org/wiki/File:Nginx_logo.svg)

Maquinaria X, tal como se pronuncia en inglés Engine X, origina el nombre de la herramienta que aprenderemos a monitorizar desde lo básico en este artículo: Nginx. Si creen que es gracioso lo de los juegos de nombres revisen el origen del nombre de la otra herramienta competidora Apache y sobre la cual publicamos un magistral artículo sobre su monitorización con PandoraFMS. Para Nginx también hemos publicado un complemento de código abierto y otro para ambas versiones empresariales (Pandora FMS y Nginx Plus); el software libre aunque es todos, no necesariamente es gratuito en sus servicios e implementaciones.

Nginx está presente en al menos 22% de los dominios (mayo de 2018), destacando en el segundo lugar por su capacidad de lidiar con diez mil o más conexiones (que no peticiones) por lo que es preferido para ciertos tipos de tarea.  Ahora bien, si ya tenemos todo cubierto en la monitorización profesional con Pandora FMS ¿qué nos falta por aprender? Pues como dice el refrán anglosajón «el diablo está en los detalles» y en esta era que todo viene empaquetado y listo para usar siempre es bueno diseccionar e ir al hueso, a la médula de todo. No pretendemos convertiros en un profesional en una serie de artículos, eso tarda como 10 años por vuestra cuenta y al menos 5 si asistís a una universidad pero acá lo presentaremos sin mayor complicación para que tengáis una información básica al respecto.

Instalación de la Maquinaria X, Nginx.

Ejemplarizaremos con un servidor Ubuntu 18 en una red de área local virtual, al cual con derechos de administrador actualizaremos sus repositorios para su posterior instalación:

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install nginx
sudo nginx -t
sudo apt-get install nginx
sudo apt-get install nginx

Así de fácil, o podemos instalarlo para Pandora FMS sobre CentOS o para cualquier otra plataforma GNU/Linux. En la última línea de comandos anterior permite comprobar su funcionamiento y conocer dónde está ubicado el registro de eventos y sucesos o simplemente «logs».

sudo nginx -t
sudo nginx -t

Esencialmente hay tres clases de métricas a recoger (acá solo veremos lo básico, access.log):

  • Métricas de actividad básica.
  • Métricas de errores (error.log).
  • Métricas de desempeño (Pandora FMS Enterprise).

En cuanto el formato de estos registros, los tres principales servidores web (Apache, Nginx y Microsoft IIS) utilizan la normativa del mismo Apache y con un comando simple podremos visualizar -y monitorizar en tiempo real- qué ocurre en nuestros equipos (esto es lo que llamamos artesanal):

sudo tail -f /var/log/nginx/access.log

sudo tail -f /var/log/nginx/access.log
sudo tail -f /var/log/nginx/access.log

Dejar de trabajar con las uñas: ngxtop

Ya este momento quisiéramos tener instalado Pandora FMS en una pantalla extensa y con maravillosos gráficos de la consola web pero no nos dejéis llevar por la tentación 😉, sigamos con nuestra ventana terminal y dejemos atrás las herramientas que todo administrador GNU/Linux conoce y comencemos con una nueva basada en lenguaje Python: ngxtop.

Si el nombre os suena conocido, pues sí, es la contracción de Nginx y el legendario comando top y forma parte del repositorio especial del lenguaje Python. El lenguaje como tal viene incluido en el 99% de las distribuciones GNU/Linux pero dada la cantidad de material escrito para ese entorno lo más sensato es instalar un gestor de paquetes llamado pip (ngxtop también la podremos instalar desde el código fuente con git clone ):

Por favor, lea también   Extensiones de seguridad para el sistema de nombres de dominio (DNSSEC)
ngxtop info
ngxtop info

Una vez instalado podremos echar mano de ngxtop y verificar si quedó instalado con la orden «ngxtop info» (ver figura anterior). Podremos visualizar cuáles son las direcciones IP (agrupadas) que más demandan solicitudes hacen y los ficheros exactos solicitados, todo esto en tiempo real:

ngxtop top remote_addr
ngxtop top remote_addr
ngxtop -n 20
ngxtop -n 20

Combinando condiciones

En programación una variable representa una cifra o cadena de texto que cambia a nuestra voluntad o por eventos y en ngxtop tenemos las siguientes:

  • http_referer: la dirección IP que tenga asignada el servidor web en ese momento.
  • http_user_agent: nombre del navegador web que visita nuestra página.
  • remote_addr: dirección IP del visitante.
  • status: estado de cada una de las peticiones (cabeceras HTTP).
  • body_bytes_sent: bytes enviados.

Lo interesante es que podremos combinar los parámetros que le pasemos a ngxtop, por ejemplo el siguiente caso:

ngxtop --no-follow -i 'status == 200' print http_user_agent

Con el parámetro»-i» filtramos las peticiones a ficheros que fueron exitosas, el comando «print» se encarga de mostrarnos el nombre de los navegadores web. El parámetro –no-follow sirve para mirar el pasado, lo que está registrado, con este paso entramos en modo de monitorización:

ngxtop --no-follow -i 'status == 200' print http_user_agent | grep Kindle
ngxtop –no-follow -i ‘status == 200’ print http_user_agent | grep Kindle

Como vemos en la figura anterior, la clara ventaja del uso de la terminal es el poder combinar múltiples herramientas: con ngxtop y el comando grep somos capaces de detectar si un dispositivo tal como un Kindle ha visitado alguna de nuestras páginas web.

Para los parámetros básicos contamos con:

  • «-t«: para cambiar el número de segundos, por defecto dos, para refrescar la información.
  • «-d«: muestra líneas de depuración de código.
  • «–version«: muestra la versión instalada.
  • «-h«: ayuda, exhibe el resto de los parámetros disponibles.
  • top, avg, sum: permite realizar operaciones de máximo valor, promedio y suma sobre los bytes enviados.

Con los últimos comandos podemos calcular el número de bytes enviados por nuestro servidor:

ngxtop --no-follow sum body_bytes_sent

O discriminar cuántos bytes fueron consultas de elementos válidos y cuántos bytes de ficheros que no tenemos en nuestro servidor:

Bytes totales enviados y discriminados según su estado de cabecera HTTP.
Bytes totales enviados y discriminados según su estado de cabecera HTTP.

Si vuestro servidor web se encuentra detrás de un balanceador de carga o proxy inverso (como puede ser otro servidor nginx) deberemos agregar la siguiente línea «real_ip_header X-Forwarded-For;» en el fichero de configuración «/etc/nginx/conf.d/default.conf» para poder recibir la dirección IP verdadera de nuestros visitantes; luego deberemos reiniciar el servicio con «/etc/init.d/nginx restart». Si queréis ampliar vuestros conocimientos hacia el campo de la informática forense os recomendamos estudiar la herramienta LORG, la cual necesita lenguaje PHP para su funcionamiento.

Extendiendo el uso hasta Apache

Como os comentamos, al utilizar nginx la misma estructura de registro, podremos utilizar ngxtop para monitorizar un servidor Apache al especificar de dónde obtendrá los datos para convertirlo en información:

tail -follow /var/log/apache2/access.log | ngxtop -f common
  • tail: el comando que nos entrega las diez últimas líneas de un fichero de texto.
  • -follow: le indica a tail que «siga» el archivo, es decir, que si le es agregado datos  procese dichas líneas.
  • /var/log/apache2/access.log: ubicación del archivo de registros del servidor web Apache .
  • «|»: comando «tubería» que «pasa» el resultado del comando tail al próximo comando, en este caso nxgtop.
  • -f: especifica el formato utilizado en el registro, en este caso el formato común, «common».

Más allá de nginx y NGINX

Como os dijimos  esto es apenas un abreboca de las capacidades de esta aplicación Nginx: otras características incluyen el funcionar como proxy inverso tanto web como para correo electrónico y su monitorización tiene otras aristas. Si necesitáis monitorizar no solo a la Maquinaria X, sino cualesquiera dispositivos conectados a Internet, ¡con toda certeza tenéis que contactarnos!

https://www.ochobitshacenunbyte.com/2017/06/12/monitoriza-nginx-web-server-con-ngxtop/
https://www.linuxito.com/seguridad/718-analisis-forense-de-un-log-de-apache-nginx
http://web.archive.org/web/20150710085239/https://www.datadoghq.com/blog/how-to-monitor-nginx/
https://www.keycdn.com/support/nginx-error-log/
https://www.linuxito.com/seguridad/718-analisis-forense-de-un-log-de-apache-nginx
https://wiki.apache.org/httpd/InternalDummyConnection
http://systemadmin.es/2012/04/apache-internal-dummy-connection
https://www.cyberciti.biz/faq/linux-unix-nginx-access-file-log-real-ip-address-of-visitor/
https://web.archive.org/web/20140928210841/http://xmodulo.com/monitor-nginx-web-server-command-line-real-time.html
https://www.ochobitshacenunbyte.com/2017/06/12/monitoriza-nginx-web-server-con-ngxtop/