Cómo configurar el servidor de registro central 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, según 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 fuentes (sistemas/aplicaciones) y los genera en múltiples formatos.

Ha evolucionado de un demonio syslog normal 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 de registro central para otros servidores, dispositivos de red y aplicaciones remotas.

Para el propósito de esta guía, usaremos los siguientes hosts:

  • Servidor: 192.168.241.140
  • Cliente: 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 usando su herramienta de administración 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 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 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 usa los módulos imjournal e imusock para importar mensajes de registro estructurados desde systemd journal y para aceptar mensajes syslog 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 utilizará para la recepción de syslog remota, así como el puerto en el que escucha.

Si desea utilizar una conexión UDP, que es más rápida pero poco confiable, busque y descomente las líneas a continuación (reemplace 514 con el puerto en el que desea que escuche, esto debe coincidir con la dirección del puerto al que los clientes envían mensajes, buscaremos en esto más al configurar 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 a continuación.

$ModLoad imtcp
$InputTCPServerRun 514

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

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

facility.severity_level	destination (where to store log)

Dónde:

  • facilidad: es el tipo de mensaje que genera el proceso/aplicación, incluyen auth, cron, daemon, kernel, local0..local7. El uso de * significa todas las instalaciones.
  • severity_level: es el tipo de mensaje de registro: emerg-0, alert-1, crit-2, err-3, warn-4, notice-5, info-6, debug-7. El uso de * significa todos los niveles de gravedad y ninguno implica ningún nivel de gravedad.
  • destino: es un archivo local o un servidor rsyslog remoto (definido en la forma IP: puerto).

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

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

Mirando el conjunto de reglas anterior, la primera regla es “$template RemoteLogs”,/var/log /% HOSTNAME% /% PROGRAMNAME% .log ””.

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

La segunda línea “*. *? RemoteLogs” significa registrar mensajes de todas las instalaciones en todos los niveles de gravedad utilizando la configuración de la plantilla RemoteLogs.

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

Hay muchas otras plantillas que puede utilizar; para obtener más información, consulte la página de manual 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 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 rsyslog según el tipo de socket de 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 ambas conexiones UDP/TCP al servidor rsyslog, ejecutando.

------------- 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 mostró 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á 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, auth, 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 lista larga del directorio de registros principal y verifique si hay un directorio llamado ip-172.31.21.58 (o cualquiera que sea el nombre de host de su 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 del manual de rsyslog relevantes para obtener más ayuda. No dude en enviarnos sus comentarios o hacernos preguntas.