Lo hice y lo entendí

El blog de Vicente Navarro
08 dic

Configurar el syslogd para que acepte mensajes de sistemas remotos

Ya he comendao alguna vez que el router que uso para conectar a Internet es un Zyxel 660HW-61. Este router permite enviar sus mensajes al syslog de una máquina UNIX remota:

Zyxel syslog

El puerto de red asignado al syslog es el 514/UDP:

# grep syslog /etc/services
syslog          514/udp

Sin embargo, el proceso syslogd de Debian no se conecta a ese puerto porque no escucha mensajes de la red por defecto. Si queremos que lo haga, tenemos que editar el fichero /etc/default/syslogd, que en la configuración estándar no contiene ninguna opción:

# For remote UDP logging use SYSLOGD="-r"
#
SYSLOGD=""

Si queremos que escuche de la red, hemos de especificar la opción -r:

# For remote UDP logging use SYSLOGD="-r"
#
SYSLOGD="-r"

que sirve precisamente para esto:

       -r     This option will enable the facility to receive message from the
              network using an internet domain socket with the syslog  service
              (see  services(5)).   The default is to not receive any messages
              from the network.

y reiniciar el proceso con “/etc/init.d/sysklogd restart“. Tras esto, podremos comprobar que el demonio funciona con la opción deseada

# ps -ef | grep syslog
root      4547     1  0 17:35 ?        00:00:00 /sbin/syslogd -r

y que el proceso está escuchando en el puerto 514/UDP:

# netstat -a | grep syslog
udp        0      0 *:syslog                *:*

Puesto que los mensajes del Zyxel van a llegar por la facility local2, podemos querer establecer un fichero de log específico para él en el /etc/syslog.conf (para que se relea después de modificarlo, haremos un “/etc/init.d/sysklogd reload“):

local2.* /var/log/zyxel.log

Si quisiéramos que fuera un sistema Linux (por ejemplo, una Debian) el que mandara ciertos mensajes a un syslog remoto, podríamos hacerlo simplemente poniendo en el syslog.conf una línea como:

local3.* @sistemaremoto.dominio

Tras releer la configuración, con una sencilla prueba con el comando logger:

logger -p local3.info "Mensaje de prueba"

veremos que, efectivamente, el mensaje aparece en el sistema remoto en varios logs configurados para recibir mensajes de la prioridad formada por la pareja facility/level que hemos especificado:

# grep "Mensaje de prueba" /var/log/*
/var/log/messages:Dec  8 18:18:15 ordenador logger: Mensaje de prueba
/var/log/syslog:Dec  8 18:18:15 ordenador logger: Mensaje de prueba

Recordemos que las facilities son:

  • auth, security 1
  • authpriv
  • cron
  • daemon
  • ftp
  • kern
  • lpr
  • mail
  • mark (sólo para uso interno)
  • news
  • sys-log
  • user
  • uucp
  • local0 → local7

y los levels:

  • debug
  • info
  • notice
  • warning, warn 1
  • error, err 1
  • crit
  • alert
  • emerg, panic 1

1. En los casos en que aparecen dos etiquetas juntas, la segunda es equivalente a la primera y está obsoleta.

Si tomamos una traza de red vemos que el protocolo (BSD syslog Protocol) es extraordinariamente sencillo (RFC 3164):

wireshark syslog trace

Podemos ver que la prioridad es un byte que contiene la facility (5bits) y el level (3bits).

Con un simple netcat también podemos mandar mensajes a un syslogd remoto que esté escuchando la red, aunque no pongamos la cabecera con la prioridad y la fecha del evento:

# echo "Nuevo mensaje de prueba con el netcat" | netcat -q 0 -u 192.168.1.20 514

y en el /var/log/syslog remoto encontramos el mensaje:

Dec  8 18:39:15 ordenador Nuevo mensaje de prueba con el netcat

:wq

Entradas relacionadas

9 Comentarios a “Configurar el syslogd para que acepte mensajes de sistemas remotos”

  • Bytecoders dice:

    Gracias Super Coco, como siempre la explicación con todo lujo de detalles.
    Hecha la prueba con un Comtrend :)

    Saludos

  • @Bytecoders ¡Gracias a ti por la visita! ¡Me alegro de que te haya resultado útil!

  • Iván dice:

    Voy a ver si yo también pruebo con mi d-link. Como ya ha dicho bytecoders, muy bien explicado (como siempre).

    Saludos, Iván.

  • adriana dice:

    buenas! muy bueno el “pique”, de todos modos estoy probando habilitar el syslog de un debian para un equipo remoto,pero en la distribución no aparece el /etc/default/syslogd, suspuestamente debería soportar tanto el logueo normal como el remoto. A no ser que por defecto no escuche mensajes de red y que haya que habilitarlo. Sabría decirme alguien cómo? No estoy pudiendo mandar los logs desde un router cisco al debian.
    Support of both internet and unix domain sockets enables this utility package to support both local and remote logging.

    gracias!!
    saludos,
    adriana

  • @adriana El paquete sysklogd contiene el fichero /etc/default/syslogd:

    # dpkg -L sysklogd | grep default                                                  
    /etc/default
    /etc/default/syslogd

    Así que si dicho paquete está instalado deberías de tener ese fichero de configuración. Si no, prueba a reinstalar el paquete. También puede ser que estés usando un syslogd alternativo.

  • Mario dice:

    Hola,

    El post ha sido de mucha utilidad. Me gustaría saber qué es una “facility” y cómo puedo saber de forma sencilla que “facility” utiliza my router para ponerlo en un log aparte.

    Gracias,

  • @Mario La facility es el área temática a la que se asocia el mensaje. Del “man syslog.conf“:

           The facility is one of the following keywords:  auth,  authpriv,  cron,
           daemon, ftp, kern, lpr, mail, mark, news, security (same as auth), sys‐
           log, user, uucp and local0 through local7. 

    Para saber qué facility usa tu router, busca la documentación o captura todas las facilities para ver cuál está usando.

Trackbacks y pingbacks:

Tema LHYLE09, creado por Vicente Navarro