Cómo crear un servidor de registro centralizado con Rsyslog en CentOS/RHEL 7


Para que el administrador del sistema pueda identificar o solucionar un problema en un sistema de servidor CentOS 7 o RHEL 7, debe conocer y ver los eventos que ocurrieron en el sistema en un período de tiempo específico a partir de los archivos de registro almacenados en el sistema en/var directorio/log.

El servidor de syslog en una máquina Linux puede actuar como un punto de monitoreo central sobre una red donde todos los servidores, dispositivos de red, enrutadores, conmutadores y la mayoría de sus servicios internos que generan registros, ya sean relacionados con un problema interno específico o simplemente mensajes informativos pueden enviar sus registros. .

En un sistema CentOS/RHEL 7, el demonio Rsyslog es el servidor de registro principal preinstalado, seguido de Systemd Journal Daemon (journald).

El servidor Rsyslog está construido como un servicio de arquitectura cliente/servidor y puede lograr ambos roles simultáneamente. Puede ejecutarse como servidor y recopilar todos los registros transmitidos por otros dispositivos en la red o puede ejecutarse como cliente enviando todos los eventos internos del sistema registrados a un servidor syslog de punto final remoto.

Cuando rsyslog está configurado como cliente, los registros se pueden almacenar localmente en archivos en el sistema de archivos local o se pueden enviar de forma remota en lugar de escribirlos en archivos almacenados en la máquina o escribir archivos de registro de eventos localmente y enviarlos a un servidor syslog remoto en al mismo tiempo.

El servidor Syslog opera cualquier mensaje de registro usando el siguiente esquema:

type (facility).priority (severity)  destination(where to send the log)

R. La instalación o el tipo de datos están representados por los procesos internos del sistema que generan los mensajes. En Linux, los procesos internos (instalaciones) que generan registros están estandarizados de la siguiente manera:

  • auth u003d mensajes generados por procesos de autenticación (inicio de sesión).
  • cron u003d mensajes generados por procesos programados (crontab).
  • demonio u003d mensajes generados por demonios (servicios internos).
  • kernel u003d mensajes generados por el propio kernel de Linux.
  • mail u003d mensajes generados por un servidor de correo.
  • syslog u003d mensajes generados por el propio demonio rsyslog.
  • lpr u003d mensajes generados por impresoras locales o un servidor de impresión.
  • local0 - local7 u003d mensajes personalizados definidos por un administrador (local7 generalmente se asigna para Cisco o Windows).

B. Los niveles de prioridad (gravedad) también están estandarizados. A cada prioridad se le asigna una abreviatura estándar y un número como se describe a continuación. La séptima prioridad es el nivel más alto de todos.

  • emerg u003d Emergencia - 0
  • alert u003d Alertas - 1
  • err u003d Errores - 3
  • warn u003d Advertencias - 4
  • aviso u003d Notificación - 5
  • info u003d Información - 6
  • debug u003d Depuración - 7

Palabras clave especiales de Rsyslog:

  • * u003d todas las instalaciones o prioridades
  • ninguna u003d las instalaciones no tienen prioridades determinadas, por ejemplo: mail.none

C. La tercera parte del esquema syslog está representada por la directiva de destino. El demonio Rsyslog puede enviar mensajes de registro para que se escriban en un archivo en el sistema de archivos local (principalmente en un archivo en el directorio/var/log /) o para enviarlos a otro proceso local o para enviarlos a una consola de usuario local (a stdout) , o envíe el mensaje a un servidor syslog remoto a través del protocolo TCP/UDP, o incluso descarte el mensaje en/dev/null.

Para configurar CentOS/RHEL 7 como un servidor de registro central, primero debemos verificar y asegurarnos de que la partición/var donde se registran todos los archivos de registro sea lo suficientemente grande (unos pocos GB como mínimo) para poder almacenar todos los archivos de registro. archivos de registro que serán enviados por otros dispositivos. Es una buena decisión utilizar una unidad separada (LVM, RAID) para montar el directorio/var/log /.

  1. Procedimiento de instalación de CentOS 7.3
  2. Procedimiento de instalación de RHEL 7.3

Cómo configurar Rsyslog en CentOS/RHEL 7 Server

1. De forma predeterminada, el servicio Rsyslog se instala automáticamente y debería ejecutarse en CentOS/RHEL 7. Para verificar si el demonio está iniciado en el sistema, ejecute el siguiente comando con privilegios de root.

# systemctl status rsyslog.service

Si el servicio no se está ejecutando de forma predeterminada, ejecute el siguiente comando para iniciar el demonio rsyslog.

# systemctl start rsyslog.service

2. Si el paquete rsyslog no está instalado en el sistema que pretende utilizar como servidor de registro centralizado, emita el siguiente comando para instalar el paquete rsyslog.

# yum install rsyslog

3. El primer paso que debemos hacer en el sistema para configurar el demonio rsyslog como un servidor de registro centralizado, para que pueda recibir mensajes de registro para clientes externos, es abrir y editar, usando su editor de texto favorito, la configuración principal. archivo de /etc/rsyslog.conf, como se presenta en el siguiente extracto.

# vi /etc/rsyslog.conf

En el archivo de configuración principal de rsyslog, busque y descomente las siguientes líneas (elimine el signo de hashtag # al principio de la línea) para proporcionar recepción de transporte UDP al servidor Rsyslog a través del puerto 514. UDP es el protocolo estándar utilizado para la transmisión de registros por Rsyslog.

$ModLoad imudp 
$UDPServerRun 514

4. El protocolo UDP no tiene la sobrecarga de TCP, lo que lo hace más rápido para transmitir datos que el protocolo TCP. Por otro lado, el protocolo UDP no asegura la confiabilidad de los datos transmitidos.

Sin embargo, si necesita utilizar el protocolo TCP para la recepción de registros, debe buscar y descomentar las siguientes líneas del archivo /etc/rsyslog.conf para configurar el demonio Rsyslog para enlazar y escuchar un socket TCP en el puerto 514. Los sockets de escucha TCP y UDP para la recepción se pueden configurar en un servidor Rsyslog simultáneamente.

$ModLoad imtcp 
$InputTCPServerRun 514 

5. En el siguiente paso, no cierre el archivo todavía, cree una nueva plantilla que se utilizará para recibir mensajes remotos. Esta plantilla le indicará al servidor Rsyslog local dónde guardar los mensajes recibidos enviados por los clientes de la red syslog. La plantilla debe agregarse antes del comienzo del bloque de DIRECTIVAS GLOBALES como se ilustra en el siguiente extracto.

$template RemoteLogs,"/var/log/%HOSTNAME%/%PROGRAMNAME%.log" 
. ?RemoteLogs & ~

La directiva $template RemoteLogs anterior indica al demonio Rsyslog que recopile y escriba todos los mensajes de registro recibidos en archivos distintos, según el nombre de la máquina cliente y la instalación del cliente remoto (aplicación) que generó los mensajes según las propiedades definidas presentes en la configuración de la plantilla. :% HOSTNAME% y% PROGRAMNAME%.

Todos estos archivos de registro se escribirán en el sistema de archivos local en un archivo dedicado con el nombre del nombre de host de la máquina cliente y se almacenarán en el directorio/var/log /.

La regla de redireccionamiento & ~ indica al servidor Rsyslog local que deje de procesar el mensaje de registro recibido y descarte los mensajes (no los escriba en archivos de registro internos).

El nombre de RemoteLogs es un nombre arbitrario dado a esta directiva de plantilla. Puede utilizar el nombre que mejor se adapte a su plantilla.

Para escribir todos los mensajes recibidos de los clientes en un solo archivo de registro con el nombre de la dirección IP del cliente remoto, sin filtrar la instalación que generó el mensaje, utilice el siguiente extracto.

$template FromIp,"/var/log/%FROMHOST-IP%.log" 
. ?FromIp & ~ 

Otro ejemplo de una plantilla en la que todos los mensajes con el indicador de función de autenticación se registrarán en una plantilla llamada "TmplAuth".

$template TmplAuth, "/var/log/%HOSTNAME%/%PROGRAMNAME%.log" 
authpriv.*   ?TmplAuth

A continuación se muestra un extracto de una definición de plantilla del servidor Rsyslog 7:

template(name="TmplMsg" type="string"
         string="/var/log/remote/msg/%HOSTNAME%/%PROGRAMNAME:::secpath-replace%.log"
        )

El extracto de la plantilla anterior también se puede escribir como:

template(name="TmplMsg" type="list") {
    constant(value="/var/log/remote/msg/")
    property(name="hostname")
    constant(value="/")
    property(name="programname" SecurePath="replace")
    constant(value=".log")
    }

Para escribir plantillas de Rsyslog complejas, lea el manual del archivo de configuración de Rsyslog emitiendo el comando man rsyslog.conf o consulte la documentación en línea de Rsyslog.

6. Una vez que haya editado el archivo de configuración de Rsyslog con su propia configuración como se explicó anteriormente, reinicie el demonio Rsyslog para aplicar los cambios emitiendo el siguiente comando:

# service rsyslog restart

7. A estas alturas, el servidor Rsyslog debería estar configurado para actuar como un servidor de registro centralizado y registrar los mensajes de los clientes syslog. Para verificar los sockets de red Rsyslog, ejecute el comando netstat con privilegios de root y use grep para filtrar la cadena rsyslog.

# netstat -tulpn | grep rsyslog 

8. Si tiene SELinux habilitado en CentOS/RHEL 7, emita el siguiente comando para configurar SELinux para permitir el tráfico rsyslog según el tipo de socket de red.

# semanage -a -t syslogd_port_t -p udp 514
# semanage -a -t syslogd_port_t -p tcp 514 

9. Si el firewall está habilitado y activo, ejecute el siguiente comando para agregar las reglas necesarias para abrir puertos rsyslog en Firewalld.

# firewall-cmd --permanent --add-port=514/tcp
# firewall-cmd --permanent --add-port=514/udp
# firewall-cmd –reload

¡Eso es todo! Rsyslog ahora está configurado en modo servidor y puede centralizar registros de clientes remotos. En el próximo artículo, veremos cómo configurar el cliente Rsyslog en el servidor CentOS/RHEL 7.

Al usar el servidor Rsyslog como un punto de monitoreo central para los mensajes de registro remoto, puede inspeccionar los archivos de registro y observar el estado de salud del cliente o depurar los problemas del cliente más fácilmente cuando los sistemas fallan o están bajo algún tipo de ataque.