Syslog-NG

Sobre Syslog-NG

Syslog-NG es un sistema para el envío de mensajes de registro en una red.

Es útil registrar, por ejemplo:

Un intento de acceso con contraseña equivocada

Un acceso correcto al sistema

Anomalías: variaciones en el funcionamiento normal del sistema

Alertas cuando ocurre alguna condición especial

Información sobre las actividades del sistema operativo

Errores del hardware o el software

También es posible registrar el funcionamiento normal de los programas; por ejemplo, guardar cada acceso que se hace a un servidor web, aunque esto suele estar separado del resto de alertas.

Puede logguear tanto por UDP como por TCP, teniendo compatibilidad con el viejo syslog, soportando a su vez muchas mas opciones y tareas que el syslog comun.

Explicacion tecnica simple

Syslog-NG se compone en capas de funcionamiento

Osea tengo en primer lugar opciopnes generales, luego fuentes de donde obtener datos de los registros, ya sean locales, externos por red (udp, tcp, archivos de texto), y luego tenemos destinos y filtros configurados, uniendolos forman los registros de sistema

Tareas

Se instalo el software syslog-ng dentro de un servidor Debian.

apt-get install syslog-ng

En la instalacion como resultante se tiene el siguiente archivo de configuracion principal

/etc/syslog-ng/syslog-ng.conf

Clientes

En los clientes se procedió a configurar el syslog convencional para que loggueara por UDP hacia el servidor syslog.

syslog-ng.conf

destination syslog_server { tcp( "10.1.1.2" port(514) ); }; filter f_local6 { facility(local6); }; filter f_auth { facility(auth, authpriv); }; log { source(src); filter(f_auth); destination(syslog_server); }; log { source(src); filter(f_local6); destination(syslog_server); };

syslog.conf

auth.*;authpriv.*;auth.notice;auth.error;auth.info;authpriv.none; @10.1.1.2 local6.* @10.1.1.2

/etc/profile.local

Esto es para logguear todos los comandos que ejecutan los usuarios, funciona aunque ejecuten un sudo o un su sin perder el rastro del usuario original, siempre y cuando no modifiquen la variable de entorno.
export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug "$(whoami) [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"'

Configuración del Servidor

Debian GNU/Linux Etch

Archivo /etc/syslog-ng/syslog-ng.conf

Opciones generales, fuentes de donde obtener información, filtros y destinos paracada filtro

options {
long_hostnames(off);
# doesn't actually help on Solaris, log(3) truncates at 1024 chars
log_msg_size(8192);
# buffer just a little for performance
# sync(1); <- Deprecated - use flush_lines() instead
flush_lines(1);
# memory is cheap, buffer messages unable to write (like to loghost)
log_fifo_size(16384);
# Hosts we don't want syslog from
#bad_hostname("^(ctld.|cmd|tmd|last)$");
# The time to wait before a dead connection is reestablished (seconds)
time_reopen(10);
#Use DNS so that our good names are used, not hostnames
use_dns(no);
dns_cache(yes);
#Use the whole DNS name
use_fqdn(no);
keep_hostname(no);
chain_hostnames(no);
#Read permission for everyone
perm(0644);
# The default action of syslog-ng 1.6.0 is to log a STATS line
# to the file every 10 minutes. That's pretty ugly after a while.
# Change it to every 12 hours so you get a nice daily update of
# # how many messages syslog-ng missed (0).
stats(43200000);
};
# Log Interno
source interno {
# message generated by Syslog-NG
internal();
# standard Linux log source (this is the default place for the syslog()
# function to send logs to)
unix-stream("/dev/log");
# messages from the kernel
file("/proc/kmsg" log_prefix("kernel: "));
};
# Create destination to LogZilla
destination d_logzilla {
program("/usr/local/nagios/syslog/scripts/db_insert.pl"
template("$HOST\t$FACILITY\t$PRIORITY\t$LEVEL\t$TAG\t$YEAR-$MONTH-$DAY\t$HOUR:$MIN:$SEC\t$PROGRAM\t$MSG\n")
);
};
source externo {
# use the following line if you want to receive remote UDP logging messages
# (this is equivalent to the "-r" syslogd flag)
# Ampliamos el limite de conexiones para recibir gran cantidad de datos de LOGS externos
udp(ip(0.0.0.0) port(514));
tcp(ip(0.0.0.0) port(514) max-connections(150) );
};
# Tell syslog-ng to log to our new destination
log {
source(externo);
destination(d_logzilla);
};
# Alertas de Nagios Eventdb
destination d_eventdb {
pipe(
"/usr/local/nagios/var/rw/syslog-ng.pipe",
template("$HOST\t$SOURCEIP\t$PRI\t$YEAR-$MONTH-$DAY\t$HOUR:$MIN:$SEC\t$PROGRAM\t$MSG\n")
template_escape(no)
);
};
log {
source(externo);
destination(d_eventdb);
};

PHP-Syslog-ng

Para la visualizacion de los logs via web, busqueda y demas operaciones para su administracion se instalo, configuro y modifico a necesidad parte de codigo del sofware php-syslog-ng que provee de una interfaz web con soporte de busquedas y que servia para cubrir la necesidad planteada.

Una vez instalado se configuro el apache para su puesta en marcha de la siguiente manera (se omitieron las directivas de autenticacion).

Alias /syslog "/usr/local/php-syslog-ng/html"
<Directory "/usr/local/php-syslog-ng/html">
Options All
Order allow,deny
Allow from all
SSLRequireSSL
AllowOverride None
</Directory>

Integración con Nagios