Cómo configurar el servidor central de registro con Rsyslog en Linux


Los registros son un componente crítico de cualquier software o sistema operativo. Los registros generalmente registran las acciones del usuario, los eventos del sistema, la actividad de la red y mucho más, dependiendo de para qué están destinados. Uno de los sistemas de registro más utilizados en sistemas Linux es rsyslog .

Rsyslog es un sistema de procesamiento de registros potente, seguro y de alto rendimiento que acepta datos de diferentes tipos de fuente (sistemas/aplicaciones) y los envía a múltiples formatos.

Ha evolucionado desde un demonio regular syslog a un sistema de registro de nivel empresarial con todas las funciones. Está diseñado en un modelo cliente/servidor, por lo que puede configurarse como cliente y/o como servidor central de registro para otros servidores, dispositivos de red y aplicaciones remotas.

Para los fines de esta guía, utilizaremos los siguientes hosts:

  • Server: 192.168.241.140
  • Client: 172.31.21.58

Cómo instalar y configurar el servidor Rsyslog

La mayoría de las distribuciones de Linux vienen con el paquete rsyslog preinstalado. En caso de que no esté instalado, puede instalarlo utilizando la herramienta del administrador de paquetes de Linux como se muestra.

$ sudo yum update && yum install rsyslog 	#CentOS 7
$ sudo apt update && apt install rsyslog	#Ubuntu 16.04, 18.04

Una vez que se haya instalado rsyslog , debe iniciar el servicio por ahora, habilitarlo para que se inicie automáticamente en el arranque y verificar su estado con el comando systemctl.

$ sudo systemctl start rsyslog
$ sudo systemctl enable rsyslog
$ sudo systemctl status rsyslog

El archivo de configuración principal de rsyslog se encuentra en /etc/rsyslog.conf , que carga los módulos, define las directivas globales, contiene reglas para procesar mensajes de registro y también incluye todos los archivos de configuración en /etc /rsyslog.d/ para varias aplicaciones/servicios.

$ sudo vim /etc/rsyslog.conf

De forma predeterminada, rsyslog utiliza los módulos imjournal y imusock para importar mensajes de registro estructurados desde systemd journal y para aceptar syslog. mensajes de aplicaciones que se ejecutan en el sistema local a través de sockets Unix, respectivamente.

Para configurar rsyslog como un servidor de registro central/de red, debe configurar el protocolo (ya sea UDP o TCP o ambos) que usará para la recepción remota de syslog, así como para puerto que escucha en.

Si desea utilizar una conexión UDP , que es más rápida pero no confiable, busque y descomente las líneas a continuación (reemplace 514 con el puerto que desea que escuche, esto coincida con la dirección de puerto a la que los clientes envían mensajes, veremos esto más cuando configuremos un cliente rsyslog).

$ModLoad imudp
$UDPServerRun 514

Para usar la conexión TCP (que es más lenta pero más confiable), busque y descomente las líneas de abajo.

$ModLoad imtcp
$InputTCPServerRun 514

En este caso, queremos utilizar las conexiones UDP y TCP al mismo tiempo.

A continuación, debe definir el conjunto de reglas para procesar los registros remotos en el siguiente formato.

facility.severity_level	destination (where to store log)

Dónde:

  • facility: is type of process/application generating message, they include auth, cron, daemon, kernel, local0..local7. Using * means all facilities.
  • severity_level: is type of log message: emerg-0, alert-1, crit-2, err-3, warn-4, notice-5, info-6, debug-7. Using * means all severity levels and none implies no severity level.
  • destination: is either local file or remote rsyslog server (defined in the form IP:port).

Usaremos el siguiente conjunto de reglas para recopilar registros de hosts remotos, utilizando la plantilla RemoteLogs Tenga en cuenta que estas reglas deben aparecer antes que las reglas para procesar mensajes locales, como se muestra en la captura de pantalla.

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

Al observar el conjunto de reglas anterior, la primera regla es "RemoteLogs",/var/log /% HOSTNAME% /% PROGRAMNAME% .log ”” .

La directiva le dice al demonio rsyslog que reúna y escriba todos los mensajes remotos recibidos en distintos registros bajo /var/log , basado en el nombre de host ( nombre de la máquina cliente) y la instalación del cliente remoto (programa/aplicación) que generó los mensajes según lo definido por la configuración presente en la plantilla RemoteLogs .

La segunda línea "*. *? RemoteLogs" significa grabar mensajes de todas las instalaciones en todos los niveles de severidad usando la configuración de la plantilla RemoteLogs

La línea final “& amp; ~ ” indica a rsyslog que deje de procesar los mensajes una vez que se haya escrito en un archivo. Si no incluye "& amp; ~ ”, los mensajes se escribirán en los archivos locales.

Hay muchas otras plantillas que puede usar; para obtener más información, consulte la página de configuración de rsyslog ( man rsyslog.conf ) o consulte la documentación en línea de Rsyslog.

Eso es todo con la configuración del servidor rsyslog. Guarde y cierre el archivo de configuración. Para aplicar los cambios recientes, reinicie el demonio rsyslog con el siguiente comando.

$ sudo systemctl restart rsyslog

Ahora verifique los sockets de red rsyslog. Utilice el comando ss (o netstat con los mismos indicadores) y canalice la salida a grep para filtrar las conexiones rsyslogd.

$ sudo ss -tulnp | grep "rsyslog"

A continuación, en CentOS 7 , si tiene SELinux habilitado, ejecute los siguientes comandos para permitir el tráfico de rsyslog según el tipo de socket de la red.

$ sudo semanage -a -t syslogd_port_t -p udp 514
$ sudo semanage -a -t syslogd_port_t -p tcp 514 

Si el sistema tiene un firewall habilitado, debe abrir el puerto 514 para permitir que ambas conexiones UDP/TCP al servidor rsyslog, al ejecutar.

------------- On CentOS ------------- 
$ sudo firewall-cmd --permanent --add-port=514/udp
$ sudo firewall-cmd --permanent --add-port=514/tcp
$ sudo firewall-cmd --reload

------------- On Ubuntu -------------
$ sudo ufw allow 514/udp
$ sudo ufw allow 514/tcp
$ sudo ufw reload 

Cómo configurar el cliente Rsyslog para enviar registros al servidor Rsyslog

Ahora en el sistema cliente, verifique si el servicio rsyslog se está ejecutando o no con el siguiente comando.

$ sudo systemctl status rsyslog

Si no está instalado, instálelo e inicie el servicio como se muestra anteriormente.

$ sudo yum update && yum install rsyslog 	#CentOS 7
$ sudo apt update && apt install rsyslog	#Ubuntu 16.04, 18.04
$ sudo systemctl start rsyslog
$ sudo systemctl enable rsyslog
$ sudo systemctl status rsyslog

Una vez que el servicio rsyslog esté en funcionamiento, abra el archivo de configuración principal donde realizará los cambios a la configuración predeterminada.

$ sudo vim /etc/rsyslog.conf

Para forzar al demonio rsyslog a actuar como un cliente de registro y reenviar todos los mensajes de registro generados localmente al servidor rsyslog remoto, agregue esta regla de reenvío, al final del archivo como se muestra en la siguiente captura de pantalla.

*. *  @@192.168.100.10:514

La regla anterior enviará mensajes desde todas las instalaciones y en todos los niveles de gravedad. Para enviar mensajes desde una instalación específica, por ejemplo, autenticación , use la siguiente regla.

auth. *  @@192.168.100.10:514

Guarde los cambios y cierre el archivo de configuración. Para aplicar la configuración anterior, reinicie el demonio rsyslog.

$ sudo systemctl restart rsyslog

Cómo monitorear el registro remoto en el servidor Rsyslog

El último paso es verificar si el rsyslog está recibiendo y registrando mensajes del cliente, en /var/log , en la forma hostname/programname.log .

Ejecute un comando ls para una larga lista del directorio de registros primarios y verifique si existe un directorio llamado ip-172.31.21.58 (o cualquiera que sea el nombre de host de la máquina cliente).

 
$ ls -l /var/log/

Si el directorio existe, verifique los archivos de registro dentro de él, ejecutando.

$ sudo ls -l /var/log/ip-172-31-21-58/

Rsyslog es un sistema de procesamiento de registros de alto rendimiento, diseñado en una arquitectura cliente/servidor. Esperamos que pueda instalar y configurar Rsyslog como servidor de registro central/de red y como cliente, como se muestra en esta guía.

También puede consultar las páginas de manual de rsyslog relevantes para obtener más ayuda. Siéntase libre de darnos cualquier comentario o hacer preguntas.