Administración del servidor

Servidor Syslog de Linux y Log Management

En esta publicación vamos a  hablar sobre el servidor Syslog de Linux y sobre cómo administrar los archivos de registro (logs).

Si deseas que tu sistema esté protegido, debes tener información de lo que sucede en el sistema, esto lo puedes lograr utilizando registros. Con los registros, puede diagnosticar problemas y determinar el estado de tu sistema y aplicaciones.


En una publicación anterior, hablamos acerca de cómo proteger el servidor Linux y mencionamos brevemente cómo proteger los registros. En esta publicación, profundizaremos en el mundo de los registros.

El chequeo de los archivos de registro se puede utilizar para la detección inmediata de intrusos si se maneja de la forma correcta. Aprendamos cual es esa forma.

 

 

El servicio Logging

La mayoría de las distribuciones de Linux vienen con Rsyslog (versión sucesora del servidor syslog) preinstalado, así como también el componente de registro de systemd: systemd  journald (journald).

Independientemente del software, son lo mismo; la diferencia está en algunas características.

 

Demonio Rsyslog la Evolución del Servidor Syslog de Linux

La utilidad rsyslog se utiliza para crear y almacenar mensajes de notificación de eventos legibles para que los administradores del sistema puedan gestionar sus sistemas.

Puedes verificar si este servicio se está ejecutando de la siguiente manera:

$ systemctl status rsyslog

Rsyslog puedes enviar tu salida a varios destinos de esta forma:

  • Archivos de texto como archivos /var/log/*
  • Bases de datos SQL
  • Diferentes hosts

Las bases de datos compatibles son MySQL, PostgreSQL, Oracle, SQLite, Microsoft SQL, Sybase, Firebird y mSQL.

Cada entrada del registro contiene la fecha, hora, nombre de host, nombre del proceso, PID y el mensaje de registro.

 

Configurando Rsyslog

El archivo de configuración del demonio Rsyslog es  /etc/rsyslog.conf.

Algunas distribuciones de Linux como Ubuntu o Linux Mint, puedes encontrar estas líneas en el archivo  /etc/rsyslog.d/default.conf

Cada línea contiene un selector y una acción.

kern.*        /var/log/messages

El kernel es el recurso y la prioridad es el asterisco (*), por lo que todos los mensajes del kernel se registrarán en /var/log/messages.

Necesitamos saber qué tipo de instalaciones tenemos en nuestro sistema y cuáles son las otras prioridades.

[sta_anchor id=”port”]



Puerto Rsyslog

Rsyslog utiliza TCP en el puerto 514. Y es TCP debido al signo @@.

Puedes asegurar tu puerto rsyslog utilizando el comando netstat:

$ netstat -tnlp | grep rsyslog

 

Instalaciones Rsyslog

La fuente del mensaje Rsyslog se llama instalación. Hay algunas funciones de Linux, demonios y otras aplicaciones que tienen instalaciones asociadas.

La siguiente lista son las instalaciones de rsyslog en Linux:

auth                                      Mensajes relacionados con la seguridad.

auth-priv                              Mensajes de autenticación privada.

cron                                      Mensaje generado por el subsistema cron.

daemon                                Mensajes de servicios.

kern                                      Mensajes del kernel

mail                                     Mensajes de correo

syslog                                   Mensajes Syslog

Tienes dos instalaciones especiales el asterisco (*) que significa todas las instalaciones y (none) que significa ninguna.

Mira los siguientes ejemplos para entender estas instalaciones especiales.

*.emerg    /var/log/emerg

Esta línea dice que envíe todos los mensajes de la prioridad de emergencia al archivo /var/log/emerg0.

mail.none /var/log/maillog

Esto le indicará a rsyslog que no registre ningún mensaje de correo en el archivo /var/log/maillog.

 


Niveles de Rsyslog (Prioridades)

Las prioridades del servidor syslog de Linux son la escala de importancia. Tenemos notice, debug, info, warning, err, crit, alert y emerg.

Puedes utilizar el asterisco para utilizar todas las prioridades (*) y none para ninguna.

Además, puedes utilizar el signo igual (=) y el signo de exclamación (!).

Por ejemplo,  kern.=crit  significa que los mensajes críticos del kernel están seleccionados.

kern.!crit significa seleccionar todos los mensajes del kernel excepto los de prioridad crítica.

 

Acciones de Rsyslog

Cada notificación de evento recibida por el servidor syslog de Linux va a la acción especificada, vimos que los registros van a los archivos en los ejemplos anteriores, pero se pueden hacer más acciones.

Rsyslog puede hacer las siguientes acciones:

  • Escribir entradas del registro en un archivo.
  • Escribir entradas de registro en el archivo de un dispositivo.
  • Enviar mensajes a la pantalla del usuario.
  • Enviar mensajes a un pipe con nombre.
  • Mandar mensajes a un host remoto.

Observa los siguientes ejemplos para entender la diferencia:

auth.err               /var/log/messages

daemon.*           /dev/lpr2

auth-priv             root,likegeeks

kern.crit              | /var/log/mypipe

mail                    @@ likegeeks.local

auth. *                 > dbhost, dbname, dbuser, dbpassword; dbtemplate

En la 1ra línea, todos los mensajes de autenticación de la prioridad err se registran en el archivo /var/log/messages.

La segunda línea envía todos los mensajes de demonios de todas las prioridades a una impresora local lpr2.

La tercera línea envía mensajes de autenticación privados a los usuarios root y likegeeks si están conectados.

La cuarta línea envía todos los mensajes del kernel de prioridad crit a la tubería con nombre /var/log/mypipe, puedes crear tu propia tubería con nombre utilizando el comando mkfifo.

La 5 línea envía todos los mensajes de correo al host likegeeks.local en el puerto TCP 514. Esto requiere que el daemon Rsyslog comience con la opción -r; de lo contrario, el puerto no se abrirá.

Debes utilizar un doble signo de @@, @@ likegeeks.local, esto significa que los registros se transmitirán utilizando el protocolo TCP.

La sexta línea envía todos los mensajes de autenticación a una tabla de base de datos con los parámetros especificados. El campo dbtemplate es opcional.

Ten en cuenta que abrir el puerto 514 en tu sistema es peligroso, algún atacante podría inundar tu sistema con mensajes.

Si deseas un registro remoto, se recomienda utilizar syslog-NG, el cual veremos más adelante en esta publicación.

Puede observar una línea como la siguiente en  /etc/rsyslog.conf

mail.*    -/var/log/maillog

Esto le dice a Rsyslog que cancele la sincronización de archivos después de escribir los registros, pero puedes perder datos si el proceso de escritura no se completa correctamente.

 

Combinación de selectores de Rsyslog

La instalación y la prioridad en conjunto juntos hacen el selector.

Puedes combinar selectores en el archivo rsyslog.conf  de la siguiente forma:

mail,kern.emerg           /var/log/log

Creo que es fácil entender esta línea.

Todos los mensajes de correo y todos los mensajes kern con prioridad emerg o superior se enviarán al archivo /var/log/log.

 


Filtros Rsyslog

Puedes utilizar selectores para filtrar, pero ¿qué ocurre si quieres filtrar los mensajes?

Tus mensajes pueden ser filtrados utilizando propiedades de esta manera:

:property, compare-operation, "value"

Los siguientes ejemplos muestran cómo filtrar mensajes que contienen error:

:msg, contains, "error"

Las operaciones de comparación son:
contains, isequal, startswith, regex, ereregex .

:msg, regex, "login .* failed"

Este filtro dice capturar cualquier mensaje que contenga las palabras “login” y “failed” y cualquier texto entre ellos.

 

Servicio Systemd-Sytemd

Systemd-Journald es un componente de systemd que se ejecuta como un servicio para recopilar datos de registro al igual que Rsyslog.

Systemd-journald almacena los datos de registro en diarios indexados, lo cual hace más rápida a la herramienta que otras.

Muchas distribuciones de Linux vienen con systemd-journald integrado junto con Rsyslog.

Puede ejecutarlos simultáneamente en el mismo sistema e incluso alimentar los datos de uno a otro.

La herramienta principal para interactuar con archivos journald journalctl.

Journalctl se utiliza para consultar y visualizar los contenidos de los datos de registro recopilados por el servicio systemd-journald.

$ journalctl

Linux Syslog Server journalctl

Puedes utilizar tu teclado para navegar por los mensajes y presionar q para salir.

Algunas de las líneas de salida son de color y otras son en negrita. El color rojo para la prioridad de crit [2], alerta [1] y emerg [0].

El color rojo y negrita para la prioridad de warn [4], crit [2], alert [1] y emerg [0].

Las líneas de debug prioridad (7) e indo [6] se muestran normalmente.

Lo mejor del comando journalctl es que puedes filtrar los mensajes con algunas opciones flexibles.

Puedes mostrar un número específico de líneas como se muestra a continuación:

$ journalctl -n 3

Linux Syslog Server journalctl -n

También puedes mostrar mensajes en tiempo real generados así:

$ journalctl -f

Además, puedes mostrar mensajes desde cierta cantidad de días:

$ journalctl --since="3 days ago"

O puedes mostrar mensajes entre días como este:

$ journalctl --since="5 days ago" --until="2 days ago"

Además, puede especificar la fecha que desea:

$ journalctl --since="2017-03-14"

Tal vez quieras en un momento específico:

$ journalctl --since="2017-03-14 15:00" --until="2017-03-14 15:30"

Y puede especificar la prioridad que desea:

$ journalctl --since="2017-03-14 15:00" --until="2017-03-14 15:30" -p warning

Puedes mostrar también mensajes asociados con un usuario específico:

$  journalctl _UID=1001

Se pueden ver los mensajes generados por un programa como /sbin/init:

$ journalctl /sbin/init

Además, puede verificar los mensajes en el disco:

$ journalctl /dev/sda1

 


Syslog-ng

Otro sucesor de syslog es syslog-ng. Esta herramienta es mejor y más segura.

Además, syslog-ng permite un filtrado, manipulación e interacción de mensajes más avanzados.

Algunas personas prefieren syslog-ng porque tiene una sintaxis más limpia que Rsyslog.

El archivo de configuración es  /etc/syslog-ng/syslog-ng.conf.

Este archivo contiene los siguientes bloques:

options{}                              Opciones globales

source{}                               Definir la fuente de los mensajes.

destination{}                        Define el destino de los mensajes (donde se guardará).

filter{}                                  Define un filtro para filtrar los mensajes.

Log{}                                    Escribe los registros de la fuente en el destino especificado a partir de las sentencias anteriores.

La idea en syslog-ng es escribir la fuente (source {}), el destino (destination {}) y el filtro (filter {}), luego los utilizas en la sentencia log {}. Veremos cómo escribir cada uno de ellos y cómo escribir el enunciado del registro final.

Sentencia source de Syslog-ng

Puede escribir las sentencias source de esta manera:

source my_udp { udp(ip(1.2.3.4) ;};

La línea muestra la fuente fuente de los mensajes que es la dirección IP 1.2.3.4.

También puedes especificar un archivo como fuente de registro:

source my_file { file("/proc/kmsg"); };

Además, puedes especificar una tuberia con nombre como fuente:

source my_pipe { pipe("/var/mypipe"); };

Sentencia destination de Syslog-ng

Puedes escribir sentencias de destino así:

destination my_dest { file("/var/log/mylogs" owner(likegeeks) group(likegeeks) perm(0644)); };

Estaras especificando el nombre del archivo y su propiedad.

El destino se puede escribir asi:

destination my_dest { pipe("/var/mypipe"); };

Puedes utilizar las macros de expansión de archivos, como la que se muestra a continuación:

destination my_dest { file("/var/log/hosts/$HOST/$FACILITY$YEAR$MONTH$DAY"); };

El destino puede ser un usuario conectado como este:

destination my_dest { usertty("root"); };

Sentencia Filters de Syslog-ng

Puedes definir un filtro especificando las instalaciones y las prioridades que deseas seleccionar de esta manera:

filter my_filter { facility(kern); priority(notice .. crit) };

La sentencia filter anterior selecciona todos los mensajes del kernel con prioridades de notice a crit.

El rango de prioridad está separado por dos puntos (..)

Puedes filtrar por host:

filter my_filter { host(likegeeks); };

O por programa específico:

filter my_filter { program("telnet.*") };

O incluso puedes utilizar expresiones regulares para filtrar mensajes:

filter my_filter { match("YOUR REGEX"); };

E incluso negar las expresiones regulares:

filter my_filter { not match("YOUR REGEX"); };

Sentencia Log de Syslog-ng

Ahora que tenemos las sentencias de source, destination y filter, debemos escribir la sentencia log que escribirá el registro real.

Las sentencias log no necesitan ser nombradas, a diferencia de otras declaraciones, ya que no se usarán en ningún otro lugar.

log { source(my_src); destination(my_dest); };

Esta línea envía los mensajes de my_src a my_dest.

No está limitado a una fuente, puedes combinar múltiples fuentes.

log { source(my_src); source(my_kern); filter(my_filter); destination(my_dest); };

¡¡Increíble!!

 

Escritura syslog-ng Mensajes en la base de datos SQL

Syslog-ng admite muchas bases de datos como back-end, usaremos MySQL en el siguiente ejemplo.

Este ejemplo envía los mensajes de registro a una base de datos MySQL que se ejecuta en el localhost.

El syslog-ng crea automáticamente las tablas y columnas necesarias.

Luego puedes utilizar este destino en cualquier sentencia log que desees.

 

Ubicaciones de los archivos de registros (Logs)

Las ubicaciones predeterminadas de los archivos de registro que puedes necesitar para ver son:

/var/log/messages                            Contiene mensajes generales del sistema.

/var/log/kern.log                              Registros del kernel

/var/log/cron                                    Mensajes del demonio cron.

/var/log/btmp                                   Contiene intentos fallidos de inicio de sesión.

/var/log/mail.log                              Contiene registros para el servidor de correo .

/var/log/wtmp                                  Contiene todos los intentos de inicio y cierre de sesión.

/var/log/dmesg                                 Contiene mensajes del kernel.

/var/log/secure                                  Los mensajes de seguridad se registrarán aquí.

/var/log/mariadb                              Directorio de registro MariaDB.

/var/log/mysql                                  Directorio de registro de MySQL

/var/log/httpd/                                 Directorio de registro del servidor web Apache .

para CPanel los registros de apache están en esta ubicación

/usr/local/apache/logs/               Registros del servidor Apache.

/usr/local/apache/domlogs/       Registros específicos del dominio.

/var/log/exim/                               Exim registros del servidor de correo.

/var/log/yum.log                               Registros del administrador de paquetes de Yum.

/var/log/boot.log                               Contiene información sobre inicio del sistema.

 

Usando Logrotate en el servidor Syslog de Linux

Es muy importante mantener tu archivo de registro en un tamaño manejable para que puedas controlarlo.

Si necesitas almacenar mensajes de registro a largo plazo, es preferible utilizar una base de datos como vimos.

Puedes usar la herramienta logrotate para la rotación de registros, por lo que mantiene tus archivos de registro en tamaños manejables.

la configuración de logrotate está en el archivo /etc/logrotate.conf.

Esta configuración rota los registros semanalmente y después de 4 rotaciones, el archivo de registro se elimina y luego crea nuevos archivos de registro.

Puedes modificar el proceso de rotación de registros de la manera que desee. Además, puede incluir tus archivos de registro.

Las siguientes opciones se pueden usar en tu archivo logrotate.conf:

daily                                     rota a diario

weekly                                  rota semanalmente

monthly                               rota mensualmente

compress                             comprimir viejos registros rotados.

include                                 A incluir más archivo conf.

Puedes verificar el script de shell que se ejecuta diariamente para la rotación de registros en  /etc/cron.daily/logrotate.

Espero que encuentres útil la publicación. El servidor syslog de Linux y las herramientas utilizadas para administrar los registros facilitan la vida de los administradores del sistema.

Gracias.

Mokhtar Ebrahim
Estoy trabajando como administrador de sistemas Linux desde 2010. Soy responsable de mantener, proteger y solucionar problemas de servidores Linux para múltiples clientes de todo el mundo. Me encanta escribir guiones de shell y Python para automatizar mi trabajo.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *