Cómo enviar logs de Linux a un servidor remoto

Publicado el 01 noviembre 2021 por Ubuntizando

La razón principal para aplicar el registro remoto es la misma razón por la cual se recomienda una partición /var dedicada: una cuestión de espacio. Pero además existe otra buena razón, la seguridad. Al disponer de un dispositivo de almacenamiento dedicado, puedes por un lado evitar que los registros ocupen un espacio inecesario en tus otros servidores, también posibilita que si algo falla o si el servidor cliente queda inutilizado también sabrás exactamente donde comenzar a buscar.  En otras palabras, almacenar logs en un host remoto nos permite centralizar informes para más de un dispositivo y mantener una copia de seguridad del informe para investigar en caso de que algo falle y nos impida acceder a los registros localmente.

¿Qué es Syslog?

Syslog es el acrónimo de System Logging Protocol, que significa protocolo de registro del sistema. Se trata de un protocolo estándar utilizado para enviar mensajes de registro o eventos del sistema a un servidor específico, llamado servidor de syslog. El syslog se utiliza principalmente para recopilar varios registros de dispositivos de diversas máquinas diferentes en una ubicación central para la supervisión y su análisis.

El protocolo está habilitado en la mayoría de equipos de red, como routersswitches, cortafuegos e incluso en algunas impresoras y escáneres. Además, syslog está disponible en sistemas basados en Linux/Unix y en muchos servidores web como Apache. Syslog no está instalado de manera predeterminada en los sistemas Windows, que usan su propio registro de eventos; si bien es capaz de reenviarlos a través de herramientas de terceros u otras configuraciones utilizando el protocolo Syslog.

RFC 5424 define el Protocolo Syslog, haciendo obsoleto el RFC 3164 anterior.

El software utilizado para enviar registros de forma remota es rsyslog, viene de forma predeterminada en Debian y distribuciones de Linux derivadas, en caso de que no lo tenga ejecutado:

Transmisión de Syslog

Tradicionalmente, syslog usa el protocolo UDP en el puerto 514, si bien puede configurarse para usar cualquier otro puerto. Adicionalmente, ciertos dispositivos usan el puerto TCP 1468 para enviar datos de syslog a fin de obtener confirmaciones de entrega de los mensajes.

La transmisión de paquetes de syslog es asíncrona, y los mensajes se generan según se haya configurado en el equipo correspondiente, ya se trate de un router, un switch o un servidor. A diferencia de otros protocolos de supervisión, como SNMP, no existe un mecanismo para sondear los datos de syslog. En determinadas implementaciones, SNMP puede usarse para establecer o modificar parámetros de syslog de forma remota.

El protocolo Syslog puede generar muchos mensajes, y se dedica simplemente a reenviarlos tan rápido como pueda. A causa de ello, la capacidad más importante para un servidor Syslog es la de filtrar correctamente y reaccionar de forma adecuada a los datos de syslog entrantes.

El servidor Syslog

El servidor Syslog también se conoce como el colector o el receptor de syslog.

Los mensajes de syslog se envían desde el dispositivo emisor al receptor. Para ello, debe configurarse en el propio dispositivo emisor la dirección IP del servidor Syslog de destino, ya sea mediante la línea de comandos o a través de un archivo conf. Una vez configurado, todos los datos de syslog se enviarán a ese servidor. Dentro del protocolo Syslog no existe ningún mecanismo para que un servidor diferente solicite la información de syslog a un emisor.

Configurando nuestro servidor Syslog

Rsyslog es un eficiente y rápido sistema de procesamiento de registros de sistema. Ofrece un diseño modular de alto desempeño y niveles de seguridad apropiados. A diferencia de sus predecesores —sysklog y syslog— permite ingreso de datos desde diversas fuentes, trasformación de datos y salida de resultados hacia varios destinos.  El paquete rsyslog es un componente esencial y obligatorio de cualquier distribución de GNU/Linux moderna y por tanto viene instalado de modo predeterminado y el servicio estará activo en todos los niveles de ejecución.

Puedes verificar si rsyslog se encuentra funcionando usando la siguiente instrucción:

sudo service rsyslog status

Si el estado indica que no se encuentra activo deberemos usar sudo service rsyslog start o systemctl start rsyslog

Y, ya por último. En caso de que necesitemos instalar rsyslog bastaría con ejecutar:  sudo apt install rsyslog

El siguiente paso pasa por habilitar el a rsyslog  en el servidor para escuchar eventos a través del puerto 514:

Editamos el fichero de configuración: # nano /etc/rsyslog.conf

Y descomentamos las siguientes líneas como muestra la imagen a continuación:

module(load="imudp")
input(type="imudp" port="514")
module(load="imtcp")
input(type="imtcp" port="514")

Con esto hemos descomentado y agregado recepciones de logs a través de UDP y TCP, podemos permitir y discriminar solo uno de ellos o ambos, una vez descomentado o agregado, deberemos editar las reglas del firewall para permitir registros entrantes, para permitir la recepción de registros a través de la ejecución de TCP:

# ufw permite 514/tcp

Para permitir la ejecución de registros entrantes a través del protocolo UDP:

# ufw permite 514/udp

Ya por ultimo reiniciaremos el servicio rsyslog: # sudo service rsyslog restart

Configurando nuestro cliente Syslog

El siguiente paso es dirigirnos a cada uno de los servidores cliente o dispositivos Linux y habilitar la opción de enviar sus logs al servidor principal o collector.

Editamos el fichero de configuración y añadimos nuestra dirección IP como en la imagen de ejemplo: # nano /etc/rsyslog.conf

*.* @@NUESTRADIRECCIONIP:514

Tras esto salvamos los cambios y reiniciamos el servicio rsyslog:

# sudo service rsyslog restart

Ahora si volvemos al servidor y revisamos los ultimos registros de syslog dentro de /var/log, deberíamos poder observar cómo se ahora aparecen varios nombres de dispositivos además de nuestro propio servidor: