Servidor de logs con Syslog-ng

Servidor de logs con Syslog-ng

Los registros de logs nos sirven para comprobar la salud del sistema. Puede utilizarse localmente o enviar mensajes a través de la red desde una fuente a otro host de registro. La "buena nueva" se llama Syslog-ng que vino a salvar las falencias de syslog. Si bien éste último se convirtió en un estándar de facto, tiene falencias importantes, a saber:

  • Falta de métodos de autenticación, es decir, Syslogd no puede distinguir entre distintos hosts.
  • Transmisión de mensajes en claro.
  • No registra el orígen de la fuente, es decir, cuando un mensaje pasa por distintos servidores de registros cambia su ip. Syslog no almacena el FQDN. Y en grandes redes, esto se vuelve un poco impráctico.
  • Syslogd solo utiliza mensajes UDP para la transferencia, entonces si un paquete se pierde en la red, el mensaje nunca llegará a destino.

Syslog-ng vino para salvar estas falencias :)

Instalación

En Debian..

apt-get update ; apt-get install syslog-ng

Configuración

El único archivo de configuración se encuentra en /etc/syslog-ng/syslog-ng.conf

En el original syslog teníamos: original y priority. En syslog-ng tenemos: logpaths formado por: source, filter y destination. Los controladores fuentes:

  • file y pipe usadas como fuentes desde las cuales el servicio lee mensajes y no como destino a donde redirigirlos.
  • file abre el archivo especificado.
  • UDP y TCP, escucha mensajes en un perto udp/tcp respectivamente.

Los filtros determinan como syslog-ng deberia filtrar los mensajes que recibe de las diferentes fuentes. Mediante los filtros se organizan y restringen los mensajes para enviarlos a sus correspondientes destinos quedando los registros de logs finalmente ordenaditos.

Los distintos filtros que pueden utilizarce son:

  • facility: utilidad que origina los logs.
  • level / priority
  • program: filtra aquellos mensajes donde el campo "nombre del programa" es coincidente con la expresión regular especificada.
  • host: filtra mensajes donde el campo "nombre del host" coincide con la expresión regular especificada.
  • filter: llama a otra "regla filtro".
  • match: aplica la expresión regular especificada.

Los destinos especifian dónde y porqué medios un mensaje debe ser redirigido y procesado.

Syslog-ng llama al controlador una única vez y lo mantiene ejecutándose hasta que el servicio recibe la señal de "terminar" (SIGHUP). Esto es muy eficiente porque si Syslog-ng lanzace un programa externo por cada mensaje entonces sería muy fácil para un atacante lanzar varios procesos similar a un ataca DOS.

Opciones Globales

vi /etc/syslog-ng/syslog-ng.conf
        chain_hostnames(0);
time_reopen(10);
time_reap(360);
sync(0);
stats(43200);
log_fifo_size(2048);
use_dns(no);
use_fqdn(no);

source s_all {
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: "));

};

Lado cliente

###########
# Destinos
destination df_auth { udp("172.16.0.17");};
destination df_syslog { udp("172.16.0.17"); };

##########
# Filtros

# Todos los mensajes vienen de las utilidades: auth y authpriv
filter f_auth { facility(auth, authpriv); };

# Todos los mensajes vienen EXCEPTO de las utilidades: auth y authpriv
filter f_syslog { not facility(auth, authpriv); };

#########
# Reglas

log {
source(s_all);
filter(f_auth);
destination(df_auth);
};

log {
source(s_all);
filter(f_syslog);
destination(df_syslog);
};

Lado servidor

vi /etc/syslog-ng/syslog-ng
source s_net {
udp(); #los mensajes de logs pueden ser enviados electivamente a través de TCP o UDP
# tcp();
};

filter f_slapd {match("slapd"); };
filter f_dhcp {match("dhcp"); };

destination df_slapd { file("/var/log/slapd.log"); };
destination df_dhcp { file("/var/log/dhcpd3.log"); };

log{
source(s_net);
filter(f_dhcp);
destination(df_dhcp);
};

log{
source(s_net);
filter(f_slapd);
destination(df_slapd);
};

1 comentario:

Kiquenet dijo...

Para .NET existe algo similar? Saludos.