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 ... ...
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!
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
Esto que ustedes desean hacer se puede realizar con syslog-ng echenle un vistazo en: http://www.balabit.com/network-security/syslog-ng/opensource-logging-system
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.
no seas brutaa! Yamilet!! RTFM
Ignorante.
Pero si la misma publicación lo dice
Esta ahi… Solo hay que leerlo
RTFM
no seas brutaa! Yamilet!! RTFM
Ignorante.
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.