Información blog

Linux, tutoriales, noticias, sistemas, redes y seguridad informática, entre otras cosas.

lunes, 21 de septiembre de 2015

Cómo centralizar los logs con rsyslog

Anteriormente ya hemos visto como gestionar de forma más eficiente los logs mediante logrotate, pero en el día de hoy vengo a hablaros de un aspecto que, si bien no es útil cuando se tiene un solo equipo, puede resultar de gran ayuda cuando poseemos un entorno con numerosos servidores. Imaginemos que nos encontramos en la situación de que tenemos numerosos servidores cuyos logs queremos revisar para simplemente controlar qué es lo que ocurre en éstos; una opción podría ser ir servidor por servidor, ya sea físicamente o vía ssh e ir comprobando los ficheros uno por uno, cosa poco práctica y tediosa... Es por ello que en ocasiones puede resultarnos útil agrupar todos los logs en un solo punto, tarea en la que intervendría un servicio en concreto denominado rsyslog.

Portada_rsyslog

Este servicio se caracteriza por ser capaz de ser  capaz de recibir logs de otro servidores al mismo tiempo de que también puede enviarlos a través de la red a otro equipo que esté preparado para dicha recepción. Al ser una comunicación que se va a realizar por red, es recomendable consultar nuestro cortafuegos para evitar que el tráfico entrante/saliente no sea bloqueado por éste, con lo que antes de empezar a configurar nada, hay que tener en cuenta que la comunicación se puede realizar a través del puerto 514 y que se puede realizar mediante tcp o udp; cualquiera de las dos es una opción perfectamente viable, pero yo en mi caso me decantaré por la comunicación udp. A sabiendas de dicha información podemos revisar las reglas de nuestro cortafuegos o (en caso de tener uno muy sencillo) escribir simplemente:

En el servidor de logs centralizado:
  1. iptables -A INPUT -p udp --dport 514 -j ACCEPT
En los equipos que enviarán los logs:
  1. iptables -A OUTPUT -p udp --dport 514 -j ACCEPT

Ahora que sabemos que ambos lados van a ser capaces de establecer la comunicación (o al menos deberían), pasaríamos a configurar el servidor que centralizará todos los logs. Dicha configuración es muy sencilla se establece de tal forma que aceptará cualquier log que se envíe al puerto 514, con lo que no habría que volver a configurarlo de nuevo en caso de querer añadir más equipos que queramos que envíen sus logs a éste. Para ello habría que modificar el fichero /etc/rsyslog.conf, el cual aunque ya tiene una serie de configuraciones establecidas por defecto, pero que no está preparado para recibir logs desde más allá del equipo local, es por ello que habría que remover el caracter # de las líneas referentes a la "escucha", además de añadir una nueva línea que se encargará de crear dinámicamente una carpeta para cada "cliente" que se vaya a conectar.

Antes:
  1. #$ModLoad imudp
  2. #$UDPServerRun 514
Después:

  1. $ModLoad imudp
  2. $UDPServerRun 514
  3. template FILENAME,"/var/log/%fromhost-ip%/syslog.log

Como podéis ver el cambio es rápido y eficaz, faltando únicamente reiniciar el servicio mediante el comando:

  1. /etc/init.d/rsyslog restart

Con esto no sería de por sí suficiente; faltaría configurar los clientes para que sus logs apuntes a nuestro servidor de logs centralizado. Para ello habría que añadir una pequeña línea en el fichero /etc/rsyslog.conf de cada cliente. Dicha línea tendría la siguiente estructura:


*.* @ip_servidor:514

Con lo que si por ejemplo la ip de nuestro servidor fuese 192.168.1.7; la línea a añadir sería:

  1. *.* @192.168.1.7:514

Ahora con únicamente reiniciar el servicio rsyslog tal y como hemos hecho en el servidor, ya podríamos disfrutar de nuestra centralización de logs.

Saludos.

No hay comentarios :

Publicar un comentario