[HowTo] Recibir logs remotos usando Syslog

Al que como yo se encuentre en un punto en donde se le vuelve tedioso ir servidor por servidor, dispositivo por dispositivo revisando los archivos de bitácora (logs) de cada uno, esto le resultará de utilidad.

syslog es un estándar de facto para el envío de mensajes de registro en una red informática IP. Por syslog se conoce tanto al protocolo de red como a la aplicación o biblioteca que envía los mensajes de registro.

Un mensaje de registro suele tener información sobre la seguridad del sistema, aunque puede contener cualquier información. Junto con cada mensaje se incluye la fecha y hora del envío.

Recibir los logs de otros servidores en un servidor Linux:

En mi caso, mi servidor central corre Syslog-NG, pretendo recibir en este servidor todos los logs que generan otros servidores corriendo Linux y Windows, cámaras de seguridad, routers y puntos de acceso inalámbricos que controlo.

Syslog puede enviar información sobre TCP o UDP indistintamente. Por convención se usa el puerto 514 UDP. La mayoría de los dispositivos del tipo access points wireless o cámaras de seguridad no permiten especificar puerto o protocolo así que lo mejor es crear una regla en el firewall que reenvíe todo el tráfico del puerto 514 UDP que es la configuración por defecto a nuestro Syslog server:

iptables -A PREROUTING -t nat -i eth0 -p udp –dport 514 -j DNAT –to 192.168.1.150

Una vez hecho esto, habilitar Syslog-NG para que reciba tráfico por UDP editando el archivo /etc/syslog-ng/syslog-ng.conf:

source src {
unix-stream(«/dev/log» max-connections(256));
internal();
file(«/proc/kmsg»);
udp();
};

Con eso ya tenemos suficiente como para recibir todos los logs de otros servidores y dispositivos en la red o desde internet en nuestro servidor central syslog.

Consultando los Logs:

Todos estos logs se pueden consultar en diferido usando:

less /var/log/messages

O verlos en tiempo real desde una consola:

tail -f /var/log/messages

O traerlos desde tty12 a la tty1 para una cómoda visualización nuevamente editando /etc/syslog-ng/syslog-ng.conf:

# By default messages are logged to tty12…
destination console_all { file(«/dev/tty1«); };

Trayendo logs remotos hasta nuestro servidor syslog:

El paso siguiente es traer todos los logs remotos a nuestro servidor central para poder administrarlos con mas comodidad. A continuación algunos ejemplos para diferentes escenarios.

Windows:

En el caso de servidores que corren windows, bastará con instalar NTsyslog (requiere .NET 2.0 y windows installer 3.0) y configurarlo para que envíe los logs hasta nuestro syslogserver usando el número de IP o el nombre de dominio del mismo.

Linux:

Cuando el servidor remoto corre syslog-ng, agregar en el archivo de configuración:

destination remote { udp(«mi.servidor.com» port(514)); };

Cuando el servidor remoto corre rsyslog o similares, agregar en /etc/rsyslog.conf:

*.*     @mi.servidor.com

Otros dispositivos:

Dependerá del caso pero la gran mayoría de equipamiento de red de calidad permite el reenvío de logs a otros dispositivos, solo es cuestión de acceder a la página web de administración de los mismos y configurarlos según corresponda.

Por último, la frutillita del postre, acceder a estos logs usando un cliente web usando phpsyslogng, (requiere Apache/PHP/MySQL), eso lo dejo para la próxima entrada, que por hoy se me acabó el tiempo:


Sigue en la parte 2: [HowTo] Controlar los logs generados por syslog desde una página web

[TIP] Loguear postfix en un archivo separado usando syslog-ng

Mas que TIP, es una nota mental, ya es la segunda vez que tengo que hacer esto y googlear al respecto por no acordarme como mierdas se suponde que debe uno hablarle a syslog-ng en su críptico idioma como se hace:

Por defecto postfix escupe todo su log en syslog, por costumbre uso como syslog la aplicación syslog-ng, cuando se usa syslog-ng toda la salida de postfix va a parar derecho a /var/log/messages.

Esto no tiene nada de malo cuando no se trata de monitorear /var/log/messages con frecuencia, pero cuando varias aplicaciones vuelcan toda su salida al mismo lugar y hay que estar pendiente del log en cuestión, el asunto se pone denso. Postfix en su versión menos verborrágica inunda el log con mensajes cuando el servidor SMTP tiene mucho tráfico. Por esto es que me interesaba separar el log de postfix a un archivo aparte.

Por convención usé /var/log/mail.log, syslog-ng deberá volcar en ese archivo toda la salida de postfix.

Como se hace:

Editar el archivo /etc/syslog-ng/syslog-ng.conf, agregar las siguientes líneas:

destination mail { file(«/var/log/mail.log»); };

filter mail { facility(mail); };

filter notmail { not facility(mail); };

log { source(src); filter(mail); destination(mail); };

Y no me pregunten que significa cada cosa ni por qué funciona, por que no tengo ni idea, ni ganas de investigar al respecto, ni tiempo para hacerlo, pero funciona, doy fe.