Cómo administrar registros del sistema (configurar, rotar e importar a la base de datos) en RHEL 7 - Parte 5


Para mantener seguros sus sistemas RHEL 7, necesita saber cómo monitorear todas las actividades que tienen lugar en dichos sistemas examinando los archivos de registro. Por lo tanto, podrá detectar cualquier actividad inusual o potencialmente maliciosa y realizar la resolución de problemas del sistema o tomar otra acción apropiada.

En RHEL 7, el demonio rsyslogd es responsable del registro del sistema y lee su configuración de /etc/rsyslog.conf (este archivo especifica la ubicación predeterminada para todos los registros del sistema) y de los archivos dentro de /etc/rsyslog.d, si los hay.

Configuración de Rsyslogd

Una inspección rápida de rsyslog.conf será útil para comenzar. Este archivo está dividido en 3 secciones principales: Módulos (ya que rsyslog sigue un diseño modular), Directivas globales (utilizadas para establecer propiedades globales del demonio rsyslogd) y Reglas. Como probablemente adivinará, esta última sección indica qué se registra o se muestra (también conocido como selector) y dónde, y será nuestro enfoque a lo largo de este artículo.

Una línea típica en rsyslog.conf es la siguiente:

En la imagen de arriba, podemos ver que un selector consta de uno o más pares Facility: Priority separados por punto y coma, donde Facility describe el tipo de mensaje (consulte la sección 4.1.1 en RFC 3164 para ver la lista completa de facilidades disponibles para rsyslog) y Prioridad indica su gravedad, que puede ser una de las siguientes palabras autoexplicativas:

  1. depurar
  2. información
  3. aviso
  4. advertencia
  5. err
  6. crit
  7. alerta
  8. emerg

Aunque no es una prioridad en sí misma, la palabra clave none significa que no hay ninguna prioridad en la instalación dada.

Nota: Que una prioridad dada indica que todos los mensajes de dicha prioridad y superiores deben registrarse. Por lo tanto, la línea del ejemplo anterior indica al demonio rsyslogd que registre todos los mensajes de información de prioridad o superior (independientemente de la instalación) excepto los que pertenecen a los servicios de correo, authpriv y cron (no se tendrán en cuenta los mensajes que provengan de estas instalaciones ) a/var/log/messages.

También puede agrupar varias instalaciones utilizando el signo de dos puntos para aplicar la misma prioridad a todas ellas. Por lo tanto, la línea:

*.info;mail.none;authpriv.none;cron.none                /var/log/messages

Podría reescribirse como

*.info;mail,authpriv,cron.none                /var/log/messages

En otras palabras, las instalaciones mail, authpriv y cron están agrupadas y la palabra clave none se aplica a las tres.

Para registrar todos los mensajes del demonio en /var/log/tecmint.log, necesitamos agregar la siguiente línea en rsyslog.conf o en un archivo separado (más fácil de administrar) dentro de /etc/rsyslog.d:

daemon.*    /var/log/tecmint.log

Reiniciemos el demonio (tenga en cuenta que el nombre del servicio no termina con una d):

# systemctl restart rsyslog

Y verifique el contenido de nuestro registro personalizado antes y después de reiniciar dos demonios aleatorios:

Como ejercicio de autoaprendizaje, le recomendaría que juegue con las instalaciones y prioridades y registre mensajes adicionales en los archivos de registro existentes o cree otros nuevos como en el ejemplo anterior.

Rotar registros usando Logrotate

Para evitar que los archivos de registro crezcan sin cesar, la utilidad logrotate se utiliza para rotar, comprimir, eliminar y, alternativamente, enviar registros, lo que facilita la administración de sistemas que generan una gran cantidad de archivos de registro.

Logrotate se ejecuta a diario como un trabajo cron (/etc/cron.daily/logrotate) y lee su configuración de /etc/logrotate.conf y de los archivos ubicados en /etc/logrotate.d, si los hay.

Al igual que en el caso de rsyslog, incluso cuando puede incluir configuraciones para servicios específicos en el archivo principal, la creación de archivos de configuración separados para cada uno ayudará a organizar mejor sus configuraciones.

Echemos un vistazo a un logrotate.conf típico:

En el ejemplo anterior, logrotate realizará las siguientes acciones para/var/loh/wtmp: intenta rotar solo una vez al mes, pero solo si el archivo tiene al menos 1 MB de tamaño, luego crea un nuevo archivo de registro con permisos establecidos a 0664 y la propiedad se otorga al usuario root y al grupo utmp. A continuación, solo mantenga un registro archivado, según lo especificado por la directiva de rotación:

Consideremos ahora otro ejemplo que se encuentra en /etc/logrotate.d/httpd:

Puede leer más sobre la configuración de logrotate en sus páginas de manual (man logrotate.conf). Ambos archivos se proporcionan junto con este artículo en formato PDF para su comodidad de lectura.

Como ingeniero de sistemas, dependerá básicamente de usted decidir durante cuánto tiempo se almacenarán los registros y en qué formato, dependiendo de si tiene/var en una partición/volumen lógico separado. De lo contrario, realmente desea considerar eliminar los registros antiguos para ahorrar espacio de almacenamiento. Por otro lado, es posible que se vea obligado a mantener varios registros para futuras auditorías de seguridad de acuerdo con las políticas internas de su empresa o cliente.

Por supuesto, examinar los registros (incluso con la ayuda de herramientas como grep y expresiones regulares) puede convertirse en una tarea bastante tediosa. Por esa razón, rsyslog nos permite exportarlos a una base de datos (los RDBMS compatibles con OTB incluyen MySQL, MariaDB, PostgreSQL y Oracle.

Esta sección del tutorial asume que ya ha instalado el servidor y el cliente MariaDB en el mismo cuadro RHEL 7 donde se administran los registros:

# yum update && yum install mariadb mariadb-server mariadb-client rsyslog-mysql
# systemctl enable mariadb && systemctl start mariadb

Luego use la utilidad mysql_secure_installation para establecer la contraseña para el usuario root y otras consideraciones de seguridad:

Nota: Si no desea utilizar el usuario raíz de MariaDB para insertar mensajes de registro en la base de datos, puede configurar otra cuenta de usuario para hacerlo. Explicar cómo hacerlo está fuera del alcance de este tutorial, pero se explica en detalle en la base de conocimientos de MariaDB. En este tutorial usaremos la cuenta root por simplicidad.

A continuación, descargue el script createDB.sql de GitHub e impórtelo a su servidor de base de datos:

# mysql -u root -p < createDB.sql

Finalmente, agregue las siguientes líneas a /etc/rsyslog.conf:

$ModLoad ommysql
$ActionOmmysqlServerPort 3306
*.* :ommysql:localhost,Syslog,root,YourPasswordHere

Reinicie rsyslog y el servidor de la base de datos:

# systemctl restart rsyslog 
# systemctl restart mariadb

Ahora realice algunas tareas que modificarán los registros (como detener e iniciar servicios, por ejemplo), luego inicie sesión en su servidor de base de datos y use comandos SQL estándar para mostrar y buscar en los registros:

USE Syslog;
SELECT ReceivedAt, Message FROM SystemEvents;

Resumen

En este artículo, hemos explicado cómo configurar el registro del sistema, cómo rotar los registros y cómo redirigir los mensajes a una base de datos para facilitar la búsqueda. Esperamos que estas habilidades sean útiles mientras se prepara para el examen RHCE y también en sus responsabilidades diarias.

Como siempre, sus comentarios son más que bienvenidos. No dude en utilizar el formulario a continuación para comunicarse con nosotros.