ago 12, 2011
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 ... ...

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