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:
- Filtros de instalación o prioridad
- Filtros basados en propiedades
- 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 rsyslogEn distribuciones basadas en RHEL como CentOS:
sudo yum install rsyslogPara 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.serviceEn versiones más antiguas de Linux con init:
service rsyslog status/etc/init.d/rsyslog statusPara iniciar el demonio rsyslog, emita el siguiente comando.
En versiones más antiguas de Linux con init:
service rsyslog start/etc/init.d/rsyslog startEn las últimas distribuciones de Linux:
systemctl start rsyslog.servicePara 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.confLocalice 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 514Debido 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.comTambié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-logsLos 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 restartsudo systemctl restart rsyslogPara 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 rsyslogTenga 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/tcpfirebase-cmd --permanent --add-port=514/tcpfirebase-cmd –reloadEn distribuciones basadas en Debian con el firewall UFW activo, emita los comandos a continuación:
ufw allow 514/tcpufw allow 514/udpReglas del firewall iptables:
iptables -A INPUT -p tcp -m tcp --dport 514 -j ACCEPTiptables -A INPUT -p udp --dport 514 -j ACCEPTConfigurar 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:514Esta 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:514Para 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:514En 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 -1Para aplicar las reglas anteriores, el demonio Rsyslog necesita ser reiniciado para actuar como cliente.
Recibe nuevas publicaciones en tu bandeja de entrada.
No spam. Cancela la suscripción en cualquier momento.