Búsqueda de sitios web

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 suelen registrar las acciones del usuario, eventos del sistema, 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 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 tanto se puede configurar como cliente y/o como servidor de registro central para otros servidores, dispositivos de red y aplicaciones remotas.

Entorno de prueba

Para los fines de esta guía, utilizaremos 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 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 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 diversas aplicaciones/servicios.

sudo vim /etc/rsyslog.conf

De forma predeterminada, rsyslog utiliza los módulos imjournal e 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 servidor de registro central/de red, debe configurar el protocolo (ya sea UDP o TCP o ambos) que utilizará para la recepción remota de syslog, 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 debería coincide con la dirección del puerto al que los clientes envían mensajes, veremos esto más al configurar un cliente rsyslog).

$ModLoad imudp
$UDPServerRun 514

Para utilizar 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 utilizar 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 :

  • instalación: es el tipo de proceso/aplicación que genera mensajes, incluyen autenticación, cron, demonio, kernel, local0..local7. Usar * significa todas las instalaciones.
  • nivel_severidad: es el tipo de mensaje de registro: emerg-0, alerta-1, crítico-2, err-3, advertencia-4, aviso-5, información-6, depuración-7. Usar * 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 el formato IP:puerto).

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

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

Si observamos 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 según lo definido 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 línea final “& ~ ” le 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 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 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 el 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 en 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, utilice 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 rsyslog realmente recibe y registra mensajes del cliente, en /var/log, en el formato nombre de host/nombre de programa.log.

Ejecute un comando ls para obtener 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 que contiene ejecutando.

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

Resumen

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 demuestra en esta guía.

Es posible que también desee consultar las páginas del manual de rsyslog relevantes para obtener más ayuda. No dude en enviarnos cualquier comentario o hacer preguntas.