Configurar un syslog remoto para centralizar logs

Syslogd permite ser configurado para escuchar y aceptar conexiones remotas, lo que implica poder recibir datos y almacenarlos de clientes externos (syslog de otros servidores). Esto es perfecto para crear un servidor syslog central y enviarle todos los logs de otros servidores, con la finalidad de tenerlos y gestionarlos todos en el mismo sitio.

La configuración es bastante sencilla. Vamos a ver los pasos a realizar en el servidor central syslogd y en los clientes.

Syslogd central

En el servidor syslogd que va a recibir todos los logs hay que revisar dos cosas. La primera que esté configurado para aceptar conexiones remotas. Para ello hay que añadir el parámetro «-r» a la línea de arranque. Ya sea en el script de /etc/init.d/syslog o si lo arrancamos a mano. En el script de init.d suele ser en la variable donde se especifican los parámetros:

SYSLOGD_OPTIONS="-r -m 0"

Y si lo arrancaramos a mano:

# syslogd -r -m 0

Una vez arrancado, debería estar escuchando en el puerto UDP 514. Aseguraos que está abierto en el firewall:

syslogd   13819      root    7u     IPv4  660344590      UDP *:syslog

Clientes syslogd

A la hora de configurar los clientes que van a enviar los logs al servidor central, únicamente tenemos que especificar qué logs van a ir al servidor central, lo haremos en el fichero de configuración /etc/syslog.conf.

Una línea estandar es esta por ejemplo, en la que mandamos a /var/log/messages los logs de cron, info, mail, etc:

*.info;mail.none;authpriv.none;cron.none		/var/log/messages

Para que estos logs se dejen de almacenar en el log local y pasen al remoto, únicamente indicamos con @servidor_syslogd el hostname/ip del servidor syslogd. Si por ejemplo el servidor syslogd tiene el hostname syslogd01:

*.info;mail.none;authpriv.none;cron.none	     @syslogd01

Reiniciamos syslogd y comenzaríamos a enviar los logs al servidor central:

# /etc/init.d/syslogd restart

Un ejemplo de como veríamos el log central con varias entradas de distintos servidores (servidor01, servidor02,…):

Aug 12 18:15:58 servidor01 snmpd[27557]: Connection from UDP: [xx.xx.xx.xx]:39892 
Aug 12 18:15:58 servidor01 snmpd[27557]: Received SNMP packet(s) from UDP: [xx.xx.xx.xx]:39892 
Aug 12 18:15:58 servidor02 snmpd[27557]: Connection from UDP: [xx.xx.xx.xx]:56751 
Aug 12 18:15:58 servidor02 snmpd[27557]: Received SNMP packet(s) from UDP: [xx.xx.xx.xx]:56751 
...
...

9 comentarios en “Configurar un syslog remoto para centralizar logs

  1. Una entrada genial, Alex. Hace tiempo que quería echarle un vistazo a esto de los logs remotos, pero nunca encontraba tiempo para ello. Aquí está muy bien explicado y parece realmente simple.

    Pero estoy pensando que este sistema es algo inseguro: abrir el puerto der firewall exponiendo una máquina que permite logear cosas en el disco duro a mi me huele a un ataque DoS llenando el disco duro del servidor de rsyslog. Sabes si el sistema también permita autenticación de algún modo. Ya sea por IP de origen, por sesión, etc… ?

    Un saludo y a seguir así, Jan.

    Nota: Sigo a bastantes blogs. El tuyo es el que tiene la tasa mas alta de posts útiles por número de posts publicados ;) Ánimos!

  2. Me alegro de que te sirvan los posts!

    Igual lo mas sencillo es, a nivel de firewall restringir el puerto UDP unicamente a determinadas IPs o a los rangos privados que vayan a usar el servicio de syslog y apañado.

    De todas formas lo de la autenticacion parece interesante. Lo revisare a ver.

    Saludo

  3. Hola, muchas gracias por la informacion esta buena, me funciona, yo tengo 6 servidores linux, y quisiera que los de casa uno se guardaran por separado, en otro archivo para poder distinguirlo de cada servidor como puedo hacer??
    Gracias.

  4. Saludos…

    Muy valioso tu post, pero, en este caso queria preguntarte si existe la posibilidad de que un servidor replique sus logs hacia varios servidores remotos

    ejemplo de lo que busco hacer: (en el /etc/syslog.conf)

    *.info;mail.none;authpriv.none;cron.none @servidor_remoto_1
    *.err;*.crit;*.alert;*.emerg @servidor_remoto_2

    • lamentablemente se me hace imposible probarlo en la plataforma donde quiero aplicarlo debido a que es 24/7 y no puedo reiniciar el demonio syslogd. Agradeceria lo que esté a tu alcance para disipar la duda.
      Gracias de antemano.

Comments are closed.