Rsyslog · 8 min read · Nov 15, 2025

Instalar un Servidor de Registros Centralizado con Rsyslog en Debian 9

En Linux, los archivos de registro son archivos que contienen mensajes sobre las funciones del sistema que son utilizados por los administradores del sistema para identificar problemas eventuales en las máquinas. Los registros ayudan a los administradores a visualizar los eventos que ocurrieron en el sistema a lo largo de períodos de tiempo. Por lo general, todos los archivos de registro se mantienen en el directorio /var/log en Linux. En esta ubicación, hay varios tipos de archivos de registro para almacenar diversos mensajes, como un archivo de registro para registrar eventos del sistema, un archivo de registro para mensajes relacionados con la seguridad, otros archivos de registro dedicados al kernel, usuarios o trabajos cron. El propósito principal de los archivos de registro es solucionar problemas del sistema. La mayoría de los archivos de registro en Linux son controlados por el servicio rsyslogd. En versiones más nuevas de distribuciones de Linux, los archivos de registro también son controlados y gestionados por el servicio del sistema journald, que es parte del programa de inicialización systemd. Los registros almacenados por el demonio del journal se escriben en un formato binario y son principalmente volátiles, almacenados en RAM y en un búfer circular en /run/log/journal/. Sin embargo, el servicio del journal también se puede configurar para almacenar permanentemente los mensajes de Syslog.

En Linux, el servidor rsyslog se puede configurar para ejecutar un administrador de registros central, en un modelo de servicio-cliente, y enviar mensajes de registro a través de la red mediante protocolos de transporte TCP o UDP o recibir registros de dispositivos de red, servidores, enrutadores, conmutadores u otros sistemas o dispositivos embebidos que generan registros.

El demonio Rsyslog se puede configurar para funcionar como cliente y servidor al mismo tiempo. Configurado para funcionar como servidor, Rsyslog escuchará en el puerto 514 TCP y UDP por defecto y comenzará a recopilar mensajes de registro que se envían a través de la red por sistemas remotos. Como cliente, Rsyslog enviará a través de la red los mensajes de registro internos a un servidor Ryslog remoto a través de los mismos puertos TCP o UDP.

Rsyslog filtrará los mensajes syslog de acuerdo con las propiedades y acciones seleccionadas. Los filtros de rsyslog son los siguientes:

  1. Filtros de instalación o prioridad
  2. Filtros basados en propiedades
  3. Filtros basados en expresiones

El filtro de instalación está representado por el subsistema interno de Linux que produce los registros. Se categorizan como se presenta a continuación:

  • auth/authpriv = mensajes producidos por procesos de autenticación
  • cron = registros relacionados con tareas cron
  • daemon = mensajes relacionados con servicios del sistema en ejecución
  • kernel = mensajes del kernel de Linux
  • mail = mensajes del servidor de correo
  • syslog = mensajes relacionados con syslog u otros demonios (el servidor DHCP envía registros aquí)
  • lpr = mensajes de impresoras o servidores de impresión
  • local0 - local7 = mensajes personalizados bajo control del administrador

Los niveles de prioridad o severidad se asignan a una palabra clave y un número como se describe a continuación.

  • emerg = Emergencia – 0
  • alert = Alertas – 1
  • err = Errores – 3
  • warn = Advertencias – 4
  • notice = Notificación – 5
  • info = Información – 6
  • debug = Depuración – 7 nivel más alto

También hay algunas palabras clave especiales de Rsyslog disponibles, como el signo asterisco ( *) para definir todas las instalaciones o prioridades, la palabra clave none que especifica ninguna prioridad, el signo igual ( =) que selecciona solo esa prioridad y el signo de exclamación ( !) que niega una prioridad.

La parte de acción del syslog está representada por la declaración de destino. El destino de un mensaje de registro puede ser un archivo almacenado en el sistema de archivos, un archivo en la ruta del sistema /var/log/, otra entrada de proceso local a través de un pipe nombrado o FIFO. Los mensajes de registro también pueden ser dirigidos a usuarios, descartados a un agujero negro (/dev/null) o enviados a stdout o a un servidor syslog remoto a través del protocolo TCP/UDP. Los mensajes de registro también pueden ser almacenados en una base de datos, como MySQL o PostgreSQL.

Configurar Rsyslog como Servidor

El demonio Rsyslog se instala automáticamente en la mayoría de las distribuciones de Linux. Sin embargo, si Rsyslog no está instalado en su sistema, puede emitir uno de los comandos a continuación para instalar el servicio; necesitará privilegios de root para ejecutar los comandos.

En distribuciones basadas en Debian:

sudo apt-get install rsyslog

En distribuciones basadas en RHEL como CentOS:

sudo yum install rsyslog

Para verificar si el demonio Rsyslog está iniciado en un sistema, ejecute los comandos a continuación, dependiendo de la versión de su distribución.

En distribuciones de Linux más nuevas con systemd:

systemctl status rsyslog.service

En versiones más antiguas de Linux con init:

service rsyslog status
/etc/init.d/rsyslog status

Para iniciar el demonio rsyslog, emita el siguiente comando.

En versiones más antiguas de Linux con init:

service rsyslog start
/etc/init.d/rsyslog start

En las últimas distribuciones de Linux:

systemctl start rsyslog.service

Para configurar un programa rsyslog para que funcione en modo servidor, edite el archivo de configuración principal en /etc/rsyslog.conf. En este archivo, realice los siguientes cambios como se muestra en el ejemplo a continuación.

sudo vi /etc/rsyslog.conf

Localice y descomente eliminando el hashtag (#) las siguientes líneas para permitir la recepción de mensajes de registro UDP en el puerto 514. Por defecto, el puerto UDP es utilizado por syslog para enviar-recibir mensajes.

$ModLoad imudp   
$UDPServerRun 514

Debido a que el protocolo UDP no es confiable para intercambiar datos a través de una red, puede configurar Rsyslog para enviar mensajes de registro a un servidor remoto a través del protocolo TCP. Para habilitar el protocolo de recepción TCP, abra el archivo /etc/rsyslog.conf y descomente las siguientes líneas como se muestra a continuación. Esto permitirá que el demonio rsyslog se vincule y escuche en un socket TCP en el puerto 514.

$ModLoad imtcp   
$InputTCPServerRun 514 

Ambos protocolos se pueden habilitar en rsyslog para funcionar al mismo tiempo.

Si desea especificar a qué remitentes les permite el acceso al demonio rsyslog, agregue la siguiente línea después de las líneas de protocolo habilitadas:

$AllowedSender TCP, 127.0.0.1, 10.110.50.0/24, *.yourdomain.com

También necesitará crear una nueva plantilla que será analizada por el demonio rsyslog antes de recibir los registros entrantes. La plantilla debe instruir al servidor Rsyslog local dónde almacenar los mensajes de registro entrantes. Defina la plantilla justo después de la línea $AllowedSender como se muestra en el ejemplo a continuación.

$template Incoming-logs,"/var/log/%HOSTNAME%/%PROGRAMNAME%.log"  
**.*  *?Incoming-logs  
& ~

** Para registrar solo los mensajes generados por la instalación del kernel, use la siguiente sintaxis.

kern.*   ?Incoming-logs

Los registros recibidos son analizados por la plantilla anterior y se almacenarán en el sistema de archivos local en el directorio /var/log/, en archivos nombrados según el nombre de host del cliente y la instalación que produjo los mensajes: %HOSTNAME% y %PROGRAMNAME% variables.

La regla de redirección & ~ configura al demonio Rsyslog para guardar los mensajes de registro entrantes solo en los archivos especificados por los nombres de las variables anteriores. De lo contrario, los registros recibidos serán procesados y también almacenados en el contenido de los registros locales, como el archivo /var/log/syslog.

Para agregar una regla que descarte todos los mensajes de registro relacionados con el correo, puede usar la siguiente declaración.

mail.* ~

Otras variables que se pueden usar para generar nombres de archivos son: %syslogseverity%, %syslogfacility%, %timegenerated%, %HOSTNAME%, %syslogtag%, %msg%, %FROMHOST-IP%, %PRI%, %MSGID%, %APP-NAME%, %TIMESTAMP%, %$year%, %$month%, %$day%

A partir de la versión 7 de Rsyslog, se puede usar un nuevo formato de configuración para declarar una plantilla en un servidor Rsyslog.

Un ejemplo de plantilla de versión 7 puede verse como se muestra en las líneas a continuación.

template(name="MyTemplate" type="string"  
         string="/var/log/%FROMHOST-IP%/%PROGRAMNAME:::secpath-replace%.log"  
        )

Otro modo en que puede escribir la plantilla anterior también puede ser como se muestra a continuación:

template(name="MyTemplate" type="list") {  
    constant(value="/var/log/")  
    property(name="fromhost-ip")  
    constant(value="/")  
    property(name="programname" SecurePath="replace")  
    constant(value=".log")  
    } *  
***

Para aplicar cualquier cambio realizado en el archivo de configuración de rsyslog, debe reiniciar el demonio para cargar la nueva configuración.

sudo service rsyslog restart
sudo systemctl restart rsyslog

Para verificar qué sockets de rsyslog en estado de escucha están abiertos en un sistema Debian Linux, puede ejecutar el comando netstat con privilegios de root. Pase los resultados a través de una utilidad de filtro, como grep.

sudo netstat –tulpn | grep rsyslog

Tenga en cuenta que también debe abrir los puertos de Rsyslog en el firewall para permitir que se establezcan conexiones entrantes.

En distribuciones basadas en RHEL con Firewalld activado, emita los comandos a continuación:

firebase-cmd --permanent --add-port=514/tcp
firebase-cmd --permanent --add-port=514/tcp
firebase-cmd –reload

En distribuciones basadas en Debian con el firewall UFW activo, emita los comandos a continuación:

ufw allow 514/tcp
ufw allow 514/udp

Reglas del firewall iptables:

iptables -A INPUT -p tcp -m tcp --dport 514 -j ACCEPT
iptables -A INPUT -p udp --dport 514 -j ACCEPT

Configurar Rsyslog como Cliente

Para habilitar al demonio rsyslog para funcionar en modo cliente y enviar mensajes de registro locales a un servidor Rsyslog remoto, edite el archivo /etc/rsyslog.conf y agregue una de las siguientes líneas:

*. *  @IP_REMOTE_RSYSLOG_SERVER:514
*. *  @FQDN_RSYSLOG_SERVER:514

Esta línea habilita el servicio Rsyslog para enviar todos los registros internos a un servidor Rsyslog distante en el puerto UDP 514.

Para enviar los registros a través del protocolo TCP, use la siguiente plantilla:

*. *  @@IP_reomte_syslog_server:514

Para enviar solo registros relacionados con cron con todas las prioridades a un servidor rsyslog, use la plantilla a continuación:

cron.* @ IP_reomte_syslog_server:514

En casos en que el servidor Rsyslog no sea accesible a través de la red, agregue las siguientes líneas al archivo /etc/rsyslog.conf en el lado del cliente para almacenar temporalmente los registros en un archivo en disco, hasta que el servidor vuelva a estar en línea.

$ActionQueueFileName queue  
$ActionQueueMaxDiskSpace 1g  
$ActionQueueSaveOnShutdown on  
$ActionQueueType LinkedList  
$ActionResumeRetryCount -1

Para aplicar las reglas anteriores, el demonio Rsyslog necesita ser reiniciado para actuar como cliente.

Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

No spam. Cancela la suscripción en cualquier momento.