lnav - Mira y analiza los registros de Apache desde una terminal de Linux


Hace menos de dos semanas, el ataque de Wannacry ransomware comprometió miles de computadoras, causando pérdidas considerables a grandes compañías y personas por igual. Eso, junto con otras vulnerabilidades generalizadas encontradas en los últimos años (como el error Shellshock), resalta la importancia de mantenerse al tanto de sus sistemas de misión crítica.

Aunque las vulnerabilidades a menudo se dirigen a un sistema operativo o componente de software específico, examinar el tráfico que entra y sale de su red puede ser una ayuda importante para proteger los activos de los que es responsable.

Como estoy seguro de que ya sabe, los registros del sistema son el primer lugar donde debemos buscar esta información. Para facilitar esta tarea, en este artículo explicaremos cómo instalar y utilizar lnav , un visor de archivos de registro avanzado. Con lnav, podrá ver varios tipos de registros simultáneamente, navegar a través del archivo utilizando teclas de acceso rápido y generar un histograma resumido de accesos y errores. Así que sigue leyendo!

Instalación y lanzamiento de lnav en Linux

Para instalar lnav , use el sistema de administración de paquetes de su distribución.

# aptitude install lnav          [Debian and derivatives]
# yum install epel-release lnav  [CentOS 7 and similar]

Una vez que se complete la instalación, inicie lnav seguido de la ruta absoluta al directorio donde se encuentran los registros a examinar. Dado que esto normalmente será /var/log , hagamos lo siguiente:

# lnav /var/log/httpd

para inspeccionar los registros del servidor web Apache en un CentOS 7 :

Examinemos brevemente la salida que se muestra en la imagen anterior:

  • The top right corner shows the files currently being inspected (access_log-20170519 and access_log). As you scroll down or up, you will note that the file names may change as you go from one to another.
  • 40x HTTP responses (for example, Not Found or Forbidden) are displayed in bold, whereas 20x responses are shown in regular text.
  • IP addresses appear in bold green.

Eso ciertamente se ve bien, ¿no es así? Pero ahora profundicemos un poco más, y veremos que lnav proporciona mucho más que una salida de colores bonitos.

Si tiene curiosidad por saber por qué no se muestran los registros de errores, encontrará la respuesta más adelante en este artículo. Así que sigue leyendo!

Modificando la salida con opciones y teclas de acceso rápido

Antes de continuar, enumeremos algunas teclas de acceso rápido que nos permitirán avanzar más fácilmente a través de la salida de lnav y las vistas disponibles:

  • e or E to jump to the next / previous error message.
  • w or W to jump to the next / previous warning message.
  • b or Backspace to move to the previous page.
  • Space to move to the next page.
  • g or G to move to the top / bottom of the current view.

Cuando se rotan los registros, los archivos antiguos pueden comprimirse (o no) según la configuración especificada en los archivos de configuración logrotate. Para incluir archivos comprimidos en la salida, inicie lnav de la siguiente manera:

# lnav -r /var/log/httpd

Si desea ver más de cerca la forma en que opera lnav, puede iniciar el programa con la opción -d seguida de un nombre de archivo donde se escribirá la información de depuración, como:

# lnav /var/log/httpd -d lnav.txt

En este ejemplo, la información de depuración que se genera cuando se inicia lnav se escribirá en un archivo llamado lnav.txt dentro del directorio de trabajo actual.

Las primeras líneas de ese archivo se muestran en la siguiente imagen:

El texto resaltado indica que lnav cargó el archivo de formatos predeterminado y, más específicamente, el formato access_log para analizar el registro de acceso de Apache. Además, lnav permite analizar cada línea de salida para que la salida sea más fácil de visualizar y comprender.

Para usar esta función, inicie el programa y elija la línea que desea analizar. La línea seleccionada es siempre la que está en la parte superior de la ventana. Luego presione p y debería ver el siguiente resultado:

Para volver al modo normal, presione p nuevamente.

Ahora, si desea ver un resumen de los registros por fecha y hora, presione i . Por ejemplo, el texto resaltado indica que el lunes 10 de abril, entre las 10 y las 11 pm, hubo 37 solicitudes HTTP con 14 que dieron como resultado errores.

Una vez que haya identificado un problema potencial basado en el histograma como se muestra arriba, puede presionar i para salir de la vista y examinarlo con más detalle utilizando el analizador como se explicó anteriormente. O también puede usar las capacidades de SQL incorporadas escribiendo un punto y coma y escribiendo una consulta estándar. Por ejemplo, hacer:

;.schema

para ver las tablas disponibles en el esquema de la base de datos. Después de identificar la tabla correcta ( access_log en nuestro caso), presionemos q y luego usemos la siguiente consulta para devolver toda la información disponible sobre las solicitudes provenientes de 195.154.230.31:

;SELECT * FROM access_log WHERE c_ip='195.154.230.31'

Tenga en cuenta que también podríamos haber filtrado los resultados por log_time . El punto es, agrega un poco de SQL y el límite del cielo en cuanto a lo que puedes hacer con lnav.

Formatos de registro predeterminados de Apache

Muchos formatos de registro se cargan de forma predeterminada con lnav y, por lo tanto, se analizan sin nuestra intervención. Puede ver la lista en la sección Formatos de registro en la documentación oficial.

Los formatos predeterminados se especifican en ~/.lnav/format/default/default-format.json.sample , y se pueden agregar otros ~/.lnav/formates usando < código> .json extensión.

Sin embargo, la edición de estos archivos requiere un cierto grado de familiaridad con JSON (notación de objetos de Javascript) y con la biblioteca PCRE (expresiones regulares compatibles con Perl).

Entonces, ¿por qué lnav no mostró los archivos de registro de errores de Apache? La razón es que esos registros no coinciden con ninguna expresión regular en los archivos de formato existentes y, por lo tanto, se tratan como archivos de texto normales (es decir, archivos sin un formato de registro determinado).

Como se mencionó anteriormente, puede crear sus propios formatos una vez que esté al menos algo familiarizado con JSON y PCRE. Esto puede ser útil, por ejemplo, si ha definido registros personalizados de Apache.

Aunque usamos el registro de acceso de Apache para demostrar cómo usar lnav, tenga en cuenta que hay otros tipos de registros que se pueden ver y analizar utilizando esta herramienta Si la herramienta no reconoce un registro específico, puede crear formatos adicionales e instalarlos siguiendo las indicaciones proporcionadas aquí.

¿Tiene alguna pregunta o comentario sobre este artículo? Como siempre, no dude en hacérnoslo saber utilizando el formulario a continuación. ¡Esperamos con interés escuchar de usted!