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:
Para .NET existe algo similar? Saludos.
Publicar un comentario