4. Syslog-NG

Syslog-NG

Fichero de configuración: /etc/syslog-ng/syslog.ng.conf


 

Syslog-NG, de next generation, es una reimplementación de syslog retrocompatible. Las principales ventajas respecto a syslogd son:
· filtrado de mensajes basado en su contenido, no sólo en categorías y prioridades
· se pueden encadenar varios filtros
· sistema más sofisticado de entrada/salida, incluyendo el envío mediante TCP y a subprocesos

 

Configuración:
· Opciones globales (Global options): aplica a todas las fuentes de mensajes de syslog-ng
· Fuentes de mensajes (Message sources): syslog-ng puede leer mensajes de un socket o retransmitidos por UDP como syslogd, pero también, por ejemplo, de ficheros FIFO o sockets TCP. A cada fuente se le asigna un nombre.
· Filtros (Filters): expresoines booleanas basadas en funciones interas que puede referirse al origen, categoría, prioridad o contenido textual del mensaje
· Pozos (Message sinks): syslog-ng incluye todos los de métodos d syslogd y algunos más
· Rutas (Log paths): conecta una o más fuentes, filtros y pozos, si un mensaje llega de la fuente y pasa el filto (o filtros) es enviado al pozo específico

 

Opciones:
Se pueden especificar varias opciones globales que controlan el comportamiento o determinan los valores por defecto de una fuente de mensaje o pozo (las opciones específicas tendrán prioridad sobre éstas).
Si syslog-ng en el host A recibe un mensaje del host B, comprueba la opción keep_hostnames(). Si el valor es sí, B guarda el hostname para el log. Si es no, la salida depende de la opción chain_hostnames(), si esta también es no, A se logeará como hostname, si es sí, se guardará el hosname B/A. Particularmente importante si el log se reenvía a otro host.

 

Fuentes de mensaje:
las fuentes se determinan con la palabra clave source. Para hacer lo mismo que en syslog, se puede incluír la siguiente línea en el fichero de configuración:

 source src { unix-stream("/dev/log"); internal(); };

dice a syslog-ng que escuche en el socket /dev/log. internal(). Se refiere a los mensajes que syslog-ng crea por sí mismo.

Una fuente de syslog-ng correspondiente con la opción remota de syslogd (-r) se parecerá a:

 source s_remote { udp(ip(0.0.0.0) port(514)); };
 dado que es la opción por defecto, también puede ser:
 source s_remote { udp(); };

Con la opción ip() se puede forzar escuchar solamente a una ip. No es posible en syslogd.

La siguiente especificación permite a syslog-ng reemplazar al programa klogd:

 source kmsg { file("/proc/kmsg" log_prefix("kernel: ")); };

Todas las fuentes soportan el parámetro log_msg_size(), que especifica el tamaño máximo en bytes.

 

Filtros:
Usados para cribar o distribuir los logs a varios pozos. Utilizan las funciones internas, que consideran diferentes aspectos de los mensajes. Dichas funciones pueden ser unidas con operadores lógicos tales como and, or y not.
EJEMPLO:
Filtro que acepta todos los mensajes del host «nananana» con el mensaje «Batmaaaaaaaaan»

 filter f_nananana { host("nananana") and match ("Batmaaaaaaaaan"); };

Con las funciones level() o priority() se pueden especificar una o más prioridades separadas por comas, o rangos, como warn, crit, emerg, etc.

 

Pozos:
Al igual que las fuentes, los pozos consisten en varios «drivers» que definen los métodos:

destination d_file { file("/var/log/messages"); };

Se pueden especificar plantillas que describen el formato en que el mensaje deberá ser escrito en el pozo en cuestión. Haciendo esto, se pueden definir «macros» que hacen las diferentes partes del mensaje accesible.
EJEMPLO:

 destination d_file {
 file("/var/log/$YEAR.$MONTH.$DAY/messages"
 template("$HOUR:$MIN:$SEC $TZ $HOST [$LEVEL] $MSG\n")
 template_escape(no)
 create_dirs(yes)
 );
 };

Las macros $YEAR, $MONTH, etc. serán reemplazadas por los valores obvios.
$TZ: time zone
$LEVEL: nivel de prioridad del mensaje
$MSG: el mensaje en sí

La función template_escape() controla si ‘ y » deben ser escapados en la salida (\). Importante si se quiere enviar los logs, por ejemplo, a un servidor SQL.

Como ya hemos dicho, syslog-ng permite el envío de mensajes a otros hosts utilizando TCP, asegurando así que los mensajes son recibidos por el destinatario. Se puede definir un envío mediante TCP de la siguiente forma:

destination d_tcp { tcp("10.11.12.13" port(514); localport(514)); };

La función program() permite el envío de mensajes a programas. Syslog-ng arranca el programa y lo mantiene activo hasta que se detiene al propio syslog-ng o el el programa recibe una seña SIGHUP. No se realiza de esta forma solamente para aumentar la eficiencia, si no que además se evitan ataques DOS (Denial of service), al no abrir múltiples instancias del mismo programa.

 

Rutas de logs:
Sirven para juntar fuentes, filtros y pozos y además evaluar mensajes. Siempre empiezar con la palabra clave log.
EJEMPLO:

# Prerequisites
 source s_all { internal(); unix-stream("/dev/log"); };
 filter f_auth { facility(auth, authpriv); };
 destination df_auth { file("/var/log/auth.log"); };

# auth,authpriv.*
 /var/log/auth.log
 log {
 source(s_all);
 filter(f_auth);
 destination(df_auth);
 };

Esta regla hace que todos los mensajes que tienen que ver con autenticación (facility(auth, authpriv)) sean enviados al fichero /var/log/auth.log

Otro más:

# kern.warn;*.err;authpriv.none
/dev/tty10
filter f_nearly_all {
(facility(kern) and priority(warn .. emerg))
or (not facility(authpriv,kern));
};
destination df_tty { file("/dev/tty10"); };
log {
source(s_all);
filter(f_nearly_all);
destination(df_tty);
};

Todos los mensajes pasan por todos los filtros, y son registrados en todos los coincidentes. Si se quiere que un determinado mensaje no continúe una vez que ha pasado un filtro, puede añadirse la opción flags(final) a esa ruta.

flags(final) no implica que el mensaje sea registrado solamente una vez, ya que puede haber filtros coincidentes anteriores.

Con flags(fallback) se puede declarar una ruta como «ruta por defecto». Esta ruta solamente será considerada para mensajes que no coinciden con ninguna de las rutas que no fueron marcadas con la opción flags(fallback).

 

facility( ⟨category⟩[ , ⟨category⟩ … ] ) Matches messages with one of the listed categories
level( ⟨priority⟩[ , ⟨priority⟩ … ] ) Matches messages with one of the listed priorities
priority( ⟨priority⟩[ , ⟨priority⟩ … ] ) Same as level()
program( ⟨regex⟩ ) Matches messages where the name of the sending program matches ⟨regex⟩
host( ⟨regex⟩ ) Matches messages whose sending host matches ⟨regex⟩
match( ⟨regex⟩ ) Matches messages which match the ⟨regex⟩ themselves
filter( ⟨name⟩ ) Invokes another filtering rule and returns its value
netmask( ⟨IP address⟩ / ⟨netmask⟩ ) Checks whether the IP address is in the given network

Documentación en:
https://www.balabit.com/network-security/syslog-ng

Deja un comentario