La fonctionnalité de concentration des logs passe par l’écoute par le démon en charge des logs des trames syslog en provenance du réseau. Deux options sont ici possibles :
- modification du script « /etc/init.d/sysklogd » pour permettre l’écoute réseau du démon « syslogd » à l’aide de l’option « -r »,
- mise en place du démon « syslog-ng » qui est considéré comme la nouvelle génération du démon syslog.
Dans le cadre de la maquette l’installation du package syslog-ng (version 1.5.15-1) est retenue.
è apt-get install syslog-ng
Le démon « syslog-ng » est configuré à l’aide du fichier de configuration « /etc/syslog-ng/syslog-ng.conf ». Le fichier de configuration de PetiteOurse est donné ci-dessous :
#
# Emplacement : Maquette de test SGA
# Description : Fichier de configuration de syslog New Generation
# Serveur : PetiteOurse
# Copyright : marc.boget@gendarmerie.org
# Definition des options generales
options {
long_hostnames(off); # Utilisation des noms longs
time_reopen(10); # Attend 10 secondes avant de se
# reconnecter si la connexion est tombée
sync(0); # Nombre d'evenements avant d'ecrire ds
#les journaux
owner("syslog"); # Proprietaire des journaux
group("syslog"); # Groupe des journaux
perm(0640); # Permission des fichiers
keep_hostname(yes);
create_dirs(yes); # Creation des repertoire de stockage des
# journaux
use_time_recvd(no); # L'heure utilisée ds les journaux =
# heure locale
gc_idle_threshold(100); # Le "garbage collector" est lancé au
# bout de 100 evenements si syslog-ng est
# inactif
gc_busy_threshold(3000); # Le "garbage collector" est lancé au
# bout de 3000 evenements si syslog-ng
# est actif
};
# Definition des sources d'approvisionnement des logs
source src-interne
{
unix-stream("/dev/log");
internal();
file("/proc/kmsg");
};
source src-reseau
{
udp(ip(0.0.0.0) port(514)); # Port reseau utilisé = UDP 514
};
# Definition des differentes destinations
# Les destinations "standards"
destination debug { file("/var/log/debug.log"); };
destination messages { file("/var/log/messages.log"); };
destination auth { file("/var/log/auth.log"); };
destination syslog { file("/var/log/syslog.log"); };
destination cron { file("/var/log/cron.log"); };
destination daemon { file("/var/log/daemon.log"); };
destination kern { file("/var/log/kern.log"); };
destination mail { file("/var/log/mail.log"); };
destination user { file("/var/log/user.log"); };
destination lpr { file("/var/log/lpr.log"); };
destination uucp { file("/var/log/uucp.log"); };
# Config specifique Eridan
# destination apacheerror { file("/var/esentry/apache/logs/error_log"); };
destination hosts
{
file ("/var/log/RESEAU/$HOST/$FACILITY/$YEAR/$MONTH/$DAY/$FACILITY$YEAR$MONTH$DAY"
owner("syslog")
group("syslog")
perm(0600)
dir_perm(0700)
create_dirs(yes));
};
# Definition des filtres
# On peut filtrer :
# par facility (filtrage par type) : facility(facility[,facility]),
# par level(filtrage par priorités) : level(pri[,pri1..pri2[,pri3]]),
# par program (sur le nom du programme generant le message) :
# program(exp.reg.),
# par host(filtrage sur une expression reguliere de l'expediteur) :
# host(exp.reg.),
# par match(filtrage du message sur une expression reguliere) :
# match(exp.reg.),
# par filter(utilisation d'un autre filtre) :
# filter(nom_filtre)
# Tous les mots cles peuvent etre utilises plusieurs fois et separes
# par des booleens : AND, OR, NOT
filter f_all {level(debug..emerg); };
filter f_authpriv { facility(auth, authpriv); };
filter f_syslog { not facility(auth, authpriv); };
filter f_cron { facility(cron); };
filter f_daemon { facility(daemon); };
filter f_kern { facility(kern); };
filter f_lpr { facility(lpr); };
filter f_mail { facility(mail); };
filter f_user { facility(user); };
filter f_uucp { facility(uucp); };
filter f_news { facility(news); };
filter f_debug { not facility(auth, authpriv, news, mail); };
filter f_messages { level(info .. warn)
and not facility(auth, authpriv, cron, daemon, mail, news); };
filter f_emergency { level(emerg); };
filter f_info { level(info); };
filter f_notice { level(notice); };
filter f_warn { level(warn); };
filter f_crit { level(crit); };
filter f_err { level(err); };
filter f_cnews { level(notice, err, crit) and facility(news); };
filter f_cother { level(debug, info, notice, warn) or facility(daemon, mail); };
filter ppp { facility(local2); };
# Definition de la gestion des logs (permet de decider ou envoyer quoi
# et suivant quel critere)
log { source(src-interne); filter(f_authpriv); destination(auth); };
log { source(src-interne); filter(f_syslog); destination(syslog); };
log { source(src-interne); filter(f_cron); destination(cron); };
log { source(src-interne); filter(f_daemon); destination(daemon); };
log { source(src-interne); filter(f_kern); destination(kern); };
log { source(src-interne); filter(f_lpr); destination(lpr); };
log { source(src-interne); filter(f_mail); destination(mail); };
log { source(src-interne); filter(f_user); destination(user); };
log { source(src-interne); filter(f_uucp); destination(uucp); };
log { source(src-interne); filter(f_debug); destination(debug); };
log { source(src-interne); filter(f_messages); destination(messages); };
log { source(src-reseau); filter(f_all); destination(hosts); };
NB : syslog-ng offre la possibilité d’être mis en cage (cf. paragraphe 8.2.2.B - ). Le fichier de démarrage « /etc/init.d/syslog-ng » doit alors être modifié pour lancer le démon à l’aide des options « -C répertoire_de_cage -u utilisateur_possedant_le_process_demon -g groupe_utilisateur »
La configuration du démon « syslog-ng » sur PetiteOurse définit la destination des logs en provenance du réseau vers « /var/log/RESEAU … ». Ce rangement est très pratique pour retrouver les logs des différents serveurs mais rend l’utilisation de « logrotate » délicate ou tout au moins fastidieuse.
Le script ci-dessous inclus dans la « crontab » journalière permet de compresser les différents fichiers de logs :
#!/bin/sh
#
# Emplacement : Maquette de test SGA
# Description : Script permettant de compresser les logs de syslog-ng
# Serveur : PetiteOurse
# Copyright : marc.boget@gendarmerie.org
#
/usr/bin/find /var/log/RESEAU ! -name "*.bz2" -type f ! -path "*`/bin/date +%Y/%m/%d`*" -exec /usr/bin/bzip2 {} \;
logger "`date +%d/%m/%Y` : Compression des logs terminee"
Il nécessite l’installation du package « bzip2 » (version 1.0.2-1) :
è apt-get install bzip2
Ce package dépend des packages suivants :
- libbz2-1.0
- libc6 (version >= 2.2.4-4)
L’installation du serveur SSH est décrite dans le paragraphe 8.2.3.E - .
Le paramétrage de l’authentification des utilisateurs sur l’annuaire GrandeOurse est décrit au paragraphe 8.2.6.D - .