gestion et surveillance du reseau syslogng

13
Gestion et surveillance de réseau 0.1 Objectifs 0.2 Notes 1 Exercices 2 Configurez votre routeur virtuel afin qu'il envoie des messages 3 Éditez /etc/syslog-ng/syslog-ng.conf 4 Créez le répertoire /var/log/network/ 5 Redémarrez syslog-ng: 6 Tester syslog 7 Sur votre PC, regardez si des messages commencent à apparaître sous 8 En cas de problÚme % Utilisation de syslog-ng pour la gestion des journaux 0.1 Objectifs Apprendre utiliser syslog-ng pour gérer les journaux syslogs 0.2 Notes Les commandes précédées de "$" signifient que vous devez exécuter la commande en tant qu'utilisateur général - et non en tant qu'utilisateur root. Les commandes précédées de "#" signifient que vous devez travailler en tant qu'utilisateur root. Les commandes comportant des lignes de commande plus spécifiques (par exemple "rtrX>" ou "mysql>") signifient que vous exécutez des commandes sur des équipements à distance, ou dans un autre programme. 1 Exercices Veuillez identifier les participants qui utilisent le même routeur que vous, s'il y'en a. Constituez un groupe et faites ensemble l'exercice suivant. Il s'agit de désigner une personne pour se connecter au routeur de votre groupe, mais chacun d'entre vous participera à la configuration effective. 2 Configurez votre routeur virtuel afin qu'il envoie des messages syslog à votre serveur :

Upload: kiemde-franck

Post on 11-Jul-2015

112 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Gestion et surveillance du reseau  syslogng

Gestion et surveillance de réseau

0.1 Objectifs 0.2 Notes

1 Exercices 2 Configurez votre routeur virtuel afin qu'il envoie des messages

3 Éditez /etc/syslog-ng/syslog-ng.conf 4 Créez le répertoire /var/log/network/ 5 Redémarrez syslog-ng:

6 Tester syslog 7 Sur votre PC, regardez si des messages commencent à apparaître sous

8 En cas de problÚme

% Utilisation de syslog-ng pour la gestion des journaux

0.1 Objectifs

Apprendre utiliser syslog-ng pour gérer les journaux syslogs

0.2 Notes

Les commandes précédées de "$" signifient que vous devez exécuter la

commande en tant qu'utilisateur général - et non en tant qu'utilisateur root. Les commandes précédées de "#" signifient que vous devez travailler en tant

qu'utilisateur root. Les commandes comportant des lignes de commande plus spécifiques (par exemple

"rtrX>" ou "mysql>") signifient que vous exécutez des commandes sur des

équipements à distance, ou dans un autre programme.

1 Exercices

Veuillez identifier les participants qui utilisent le même routeur que vous, s'il y'en a.

Constituez un groupe et faites ensemble l'exercice suivant. Il s'agit de désigner une personne pour se connecter au routeur de votre groupe, mais chacun d'entre vous participera à la configuration effective.

2 Configurez votre routeur virtuel afin qu'il

envoie des messages

syslog à votre serveur :

Page 2: Gestion et surveillance du reseau  syslogng

Vos routeurs sont capables d'envoyer des messages syslog à de multiples destinations, ainsi

un routeur peut envoyer des messages à 4 voire 5 destinations différentes. Nous devons donc configurer le routeur pour qu'il envoie des messages à chacun des PC de votre groupe.

Vous allez vous connecter en SSH au routeur de votre groupe et effectuer les opérations

suivantes :

$ ssh [email protected]

rtrX> enable

rtrX# config terminal

Répétez la commande "logging 10.10.X.Y" pour chaque PC de votre groupe. En d'autres termes, si votre groupe est sur le routeur 6 et que vous utilisez les PC 21, 22, 23 et 24 vous

répéterez la commande à quatre reprises avec l'IP de chaque machine (10.10.6.21, 10.10.6.22, et ainsi de suite).

rtrX(config)# logging 10.10.X.Y

...

rtrX(config)# logging facility local0

rtrX(config)# logging userinfo

rtrX(config)# exit

rtrX# write memory

Regardons le résumé de la configuration des journaux (logs) avec 'show logging'

rtrX# show logging

Déconnectez-vous du routeur (exit)

rtrX# exit

C'est fait. Le routeur devrait maintenant envoyer des paquets UDP SYSLOG à votre PC sur le port 514. Pour vérifier, ouvrez une session sur votre PC et effectuez l'opération

suivante :

$ sudo -s

# apt-get install tcpdump (ne vous inquiétez pas si il est

déjà installé)

# tcpdump -s0 -nv -i eth0 port 514

Puis demandez à une personne de votre groupe de se connecter au routeur et d'entrer les commandes suivantes :

$ ssh [email protected]

rtrX> enable

rtrX# config terminal

rtrX(config)# exit

rtrX> exit

Des informations de TCPDUMP devraient s'afficher sur l'écran de votre PC. Celles-ci devraient ressembler à ce qui suit :

08:01:12.154604 IP (tos 0x0, ttl 255, id 11, offset 0, flags [none], proto

UDP (17), length 138)

Page 3: Gestion et surveillance du reseau  syslogng

10.10.9.254.57429 > 10.10.9.36.514: SYSLOG, length: 110

Facility local0 (16), Severity notice (5)

Msg: 23: *Feb 19 08:01:10.855: %SYS-5-PRIV_AUTH_PASS: Privilege level

set to 15 by cisco on vty0 (10.10.0.117)

08:01:15.519881 IP (tos 0x0, ttl 255, id 12, offset 0, flags [none], proto

UDP (17), length 130)

10.10.9.254.57429 > 10.10.9.36.514: SYSLOG, length: 102

Facility local0 (16), Severity notice (5)

Msg: 24: *Feb 19 08:01:14.215: %SYS-5-CONFIG_I: Configured from console

by cisco on vty0 (10.10.0.117)

Vous pouvez maintenant configurer le logiciel de journalisation sur votre PC afin qu'il reçoive ces informations et les enregistre dans un nouvel ensemble de fichiers :

2. Installez syslog-ng

Ces exercices s'effectuent en tant qu'utilisateur root. Si vous n'êtes pas un utilisateur root sur votre machine, vous pouvez le devenir en tapant :

$ sudo -s

# apt-get install syslog-ng

3 Ã ditez /etc/syslog-ng/syslog-ng.conf

Localisez les lignes

source s_src {

system();

internal();

};

et remplacez-les par :

source s_src {

system();

internal();

udp();

};

Sauvez le fichier et quitter.

Maintant, créez une configuration pour nos logs d'équipement réseau:

# cd /etc/syslog-ng/conf.d/

# editor 10-network.conf

Dans ce fichier, copier et coller les lignes suivantes:

filter f_routers { facility(local0); };

log {

source(s_src);

filter(f_routers);

destination(routers);

Page 4: Gestion et surveillance du reseau  syslogng

};

destination routers {

file("/var/log/network/$YEAR/$MONTH/$DAY/$HOST-$YEAR-$MONTH-$DAY-

$HOUR.log"

owner(root) group(root) perm(0644) dir_perm(0755) create_dirs(yes)

template("$YEAR $DATE $HOST $MSG\n"));

};

Sauvez le fichier et quitter.

4 Créez le répertoire /var/log/network/

# mkdir /var/log/network/

5 Redémarrez syslog-ng:

# service syslog-ng restart

6 Tester syslog

Pour s'assurer qu'il y ait des messages syslog, reconnectez vous au routeur et effectuez des commandes "config", puis déconnectez vous, c'est à dire:

# ssh [email protected]

rtrX> enable

rtrX# config terminal

rtrX(config)# exit

rtrX> exit

Veillez à vous déconnecter du routeur. Si un trop grand nombre de personnes se connectent et oublient de se déconnecter, d'autres ne pourront pas accéder au routeur.

7 Sur votre PC, regardez si des messages

commencent à apparaître sous

/var/log/network/2013/.../

$ cd /var/log/network

$ ls

$ cd 2013

$ ls

... ceci vous montrera le contenu du répertoire pour le mois en cours

... faites 'cd' et le nom de ce répertoire

$ ls

... recommencer au niveau suivant (le jour du mois)

$ ls

Page 5: Gestion et surveillance du reseau  syslogng

8 En cas de problÚme

Si aucun fichier n'apparait sous le répertoire /var/log/network, alors une autre commande à essyer pendant qu'on est loggé sur le routeur, en mode configuration, est de faire un

shutdown / no shutdown sur une interface Loopback (locale), par eemple:

$ ssh cisco@rtrX

rtrX> enable

rtrX# conf t

rtrX(config)# interface Loopback 999

rtrX(config-if)# shutdown

Attendre quelques secondes

rtrX(config-if)# no shutdown

Puis quitter, et sauver la configuration ("write mem"):

rtrX(config-if)# exit

rtrX(config)# exit

rtrX# write memory

rtr1# exit

VÚrifiez les logs sous '/var/log/network'

# cd /var/log/network

# ls

... suivre la hiérarchie des répertoires.

Toujours pas de logs ?

Essayez la commande suivante pour envoyer un message de log en local:

# logger -p local0.info 'Hello World!'

Si aucun fichier n'a été créé sous '/var/log/network', alors vérifier la configuration pour des fautes de frappe. Ne pas oublier de redémarrer le service syslog-ng à chaque fois

que vous changez la configuration.

Quelles autres commandes pouvez vous employer sur le routeur (ATTENTION!) qui provoqueront l'envoi de messages syslog ? Vous pouvez essayer de vous loger sur le router et

taper un mot de passe incorrect pour "enable"

Assurez-vous de faire un "ls" dans le répertoire de vos logs pour voir si des logs ont été créés à un moment ou un autre.

Page 6: Gestion et surveillance du reseau  syslogng

Serveur SYSLOG : Syslog-ng

Linux et de multiples équipements réseaux effectuent une journalisation des événements qui s'opèrent sur leur système. Ces journaux sont stockés localement et basés sur le protocole

Syslog.

L'intérêt d'un serveur Syslog-ng est donc de permettre une centralisation de ces journaux d'événements, permettant de repérer plus rapidement et efficacement les défaillances de

machines présentes sur un réseau.

Avant même d'aller plus loin, je vous invite à lire l'excellent article "Syslog, maîtrisez l'historique" de Vincent Renardias, paru dans le numéro 19 de Linux Magazine.

C'est une excellente base et une approche simple de la journalisation sous Linux qui va

suivre… Syslog-ng est une solution de journalisation sous systèmes Unix et Linux depuis les années 1980.

Pré-requis

Pour la suite des opérations, des pré-requis sont nécessaires :

Disposer des droits d'administration ; Disposer d'une connexion à Internet configurée et activée ; Avoir activé l'accès au dépôt APT 'universe'; Un serveur LAMP (Linux Apache Mysql Php) fonctionnel si vous décidez d'installer php-

syslog-ng.

Qu'est-ce que Syslog-NG ?

Nous nous intéresserons ici à syslog-ng, un remplaçant de syslog. Il permet notamment de dissocier les logs entrants sur d'autres critères que le 'facility' comme par exemple : le nom ou

l'adresse IP de la machine qui émet le log.

Son installation n'est pas très complexe, mais nécessite un peu de rigueur.

1. Installer Syslog-NG

Vous devez au préalable activer le dépot universe ; l'installation de syslog-ng supprimera les paquets klogd et sysklogd, respectivement en charge de la journalisation des évènements liés au noyau et au reste du système. Idem pour le paquet ubuntu-minimal.

Installez le paquet syslog-ng

Editez le fichier /etc/default/syslog-ng

et remplacez

#CONSOLE_LOG_LEVEL=0 par

CONSOLE_LOG_LEVEL=1

Page 7: Gestion et surveillance du reseau  syslogng

Pouvez-vous expliquer pourquoi la valeur par défaut ne convient pas?

Après avoir effectué ces changements, redémarrez syslog-ng avec la commande :

sudo /etc/init.d/syslog-ng restart

Configuration de Syslog-NG

Le fichier de configuration par défaut est situé dans /etc/syslog-ng/syslog-ng.conf

Pour que syslog-ng accepte de recevoir des messages d'une machine distante, vous devez décommenter une ligne ; pour cela remplacer :

# (this is equivalent to the "-r" syslogd flag)

# udp();

Par

# (this is equivalent to the "-r" syslogd flag)

udp();

Pour ma part: J'ai du laisser commenté udp() et ajouter une nouvelle source:

source s_net {

udp();

};

sinon tous les messages venant du réseaux sont re-dirigé vers les fichiers /var/log/messages et

/var/log/syslog en plus du fichier paramétré

Rien de tout ça ne semble fonctionner avec Ubuntu 12.04, vu les changements dans le fichier de

configuration il est possible que l'authentification et le cryptage soit nécessaire pour accepter les logs

distants.

2. Configuration du client Syslog d'une machine

Si vous souhaitez envoyer tous les messages syslog d'une station ou d'un serveur sur le

serveur syslog qui les collectera (plutôt que localement), vous devez Editez le fichier /etc/syslog.conf et ajouter la ligne suivante :

*.* @ip_server_syslog

Maintenant, redémarrez le client syslog de la machine :

sudo /etc/init.d/sysklogd restart

À partir de maintenant, le serveur syslog-ng est fonctionnel : les logs de la machine lui sont envoyés.

3. Configuration de php-syslog-ng

php-syslog-ng est une interface web basée sur un script php qui permet de lire les logs qu'aura stocké dans une base mysql un serveur syslog-ng. Elle n'est pas indispensable mais permet

Page 8: Gestion et surveillance du reseau  syslogng

d'accéder aux logs plus facilement et intuitivement. Vous devez avoir un serveur LAMP de

fonctionnel (Linux Apache MySQL PHP)

Télécharger et installer le logiciel mkdir phpsyslogng

cd phpsyslogng

wget http://php-syslog-ng.googlecode.com/files/php-syslog-ng-2.9.8.tgz

tar -zxvf php-syslog-ng-*

cd ..

sudo mv phpsyslogng /var/www/

cd /var/www/phpsyslogng

Configuration de MySQL

Le moyen le plus rapide est d'utiliser le fichier dbsetup.sql dans le répertoire 'scripts'(/var/www/phpsyslogng/html/scripts). Éditez ce fichier et renseignez les mots de passe des 3 utilisateurs (sysloguser, syslogfeeder, syslogadmin) qui seront créés (en remplaçant PW_HERE). Le script créera une table pour les journaux et une pour l'authentification des

utilisateurs, et affectera des droits sensiblement différents pour chaque utilisateur.

Si vous effectuez d'autres changements comme changer le nom de la base de données ou des tables, assurez-vous de faire correspondre ces changement dans le fichier config.php.

Après avoir modifié le script dbsetup.sql exécutez le simplement avec la commande :

sudo mysql -u root -p < dbsetup.sql

Configuration de syslog-ng

Maintenant vous devez configurer syslog-ng pour rediriger les messages dans la base MySQL. Vous devrez ajouter 2 entrées dans le fichier de configuration de syslog-ng. Le fichier de configuration est habituellement dans /etc/syslog-ng/syslog-ng.conf

Vous devez premièrement ajouter une entrée 'destination'. Ajoutez ceci :

destination d_mysql {

pipe("/var/log/mysql.pipe"

template("INSERT INTO logs

(host, facility, priority, level, tag, datetime, program, msg)

VALUES ( '$HOST', '$FACILITY', '$PRIORITY', '$LEVEL', '$TAG', '$YEAR-

$MONTH-$DAY $HOUR:$MIN:$SEC',

'$PROGRAM', '$MSG' );\n") template-escape(yes));

};

Ceci va prendre vos logs et les formater dans une requête SQL qui pourra être exécutée pour les ajouter dans la base de données.

Vous devrez également ajouter une entrée de type 'log' qui déterminera quels évènements

faire suivre dans la base de données (fonctionnement basé sur le mode First In First Out). Vous voudrez sûrement faire suivre tous les logs dans MySQL et ils seront aussi une entrée de type 'source' pour cela dans votre fichier syslog-ng.conf (habituellement appelés src ou s_all).

Pour rattacher cette source à la destination que vous venez juste de créer, vous devez ajouter le code suivant :

Page 9: Gestion et surveillance du reseau  syslogng

log {

source(s_all);

destination(d_mysql);

};

Configurer syslog-ng pour la redirection vers MySQL

Un exemple de script qui redirige les logs vers la base MySQL est inclus dans le répertoire des scripts (/var/www/phpsyslogng/html/scripts). Le script se nomme syslog2mysql.sh

#!/bin/bash

if [ ! -e /var/log/mysql.pipe ]

then

mkfifo /var/log/mysql.pipe

fi

while [ -e /var/log/mysql.pipe ]

do

mysql -u syslogfeeder --password=PASS_HERE syslog < /var/log/mysql.pipe

>/dev/null

done

Vous devez remplacer PASS_HERE par le mot de passe que vous avez affecté à l'utilisateur 'syslogfeeder'. Vous voudrez aussi probablement que le script soit lancé automatiquement à

chaque démarrage du serveur syslog-ng. Aussi, ajoutez une entrée dans inittab ou démarrez le script via init.d. Mais bien faire attention à lancer le script une fois que Mysql a démarré.

Avec un script init.d Ubuntu : Créez un fichier syslog2mysql dans /etc/init.d/ ayant comme

contenu :

#! /bin/sh

# Do NOT "set -e"

PATH=/usr/sbin:/usr/bin:/sbin:/bin

DESC="Fetch queries from syslog-ng to mysql db"

NAME=syslog2mysql

PIDFILE=/var/run/$NAME.pid

SCRIPTNAME=/etc/init.d/$NAME

# Exit if mysql client is not installed

[ -x "/usr/bin/mysql" ] || exit 0

# Load the VERBOSE setting and other rcS variables

[ -f /etc/default/rcS ] && . /etc/default/rcS

# Define LSB log_* functions.

# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.

. /lib/lsb/init-functions

#

# Function that starts the daemon/service

#

do_start()

{

[ ! -e /var/log/mysql.pipe ] && echo " (Creating $NAME pipe)." &&

mkfifo /var/log/mysql.pipe

if [ -e $PIDFILE ]; then

Page 10: Gestion et surveillance du reseau  syslogng

if ps -p $(cat $PIDFILE) >/dev/null; then

echo -n -e "\nError: $NAME seems to be already running!"

return 1

else

rm -f $PIDFILE

fi

fi

{

while [ -e /var/log/mysql.pipe ]

do

mysql -u syslogfeeder --password=PASS_HERE syslog <

/var/log/mysql.pipe >/dev/null

sleep 1

done

} &

echo $! > $PIDFILE

}

#

# Function that stops the daemon/service

#

do_stop()

{

if [ -e $PIDFILE ]; then

PID=$(cat $PIDFILE)

if ps -p $PID >/dev/null; then

# get PID of child

CPID=$(pgrep -P $PID)

# kill script

kill $PID

# kill child

kill $CPID

rm -f $PIDFILE

return 0

else

echo -e "\nWarning: $NAME was not running."

echo -n -e "\nCleaning PID file"

rm -f $PIDFILE

return 1

fi

else

echo -n -e "\nWarning: $NAME was not running"

return 1

fi

}

case "$1" in

start)

[ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"

do_start

case "$?" in

0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;

2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;

esac

;;

stop)

[ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"

do_stop

case "$?" in

0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;

2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;

Page 11: Gestion et surveillance du reseau  syslogng

esac

;;

restart|force-reload)

#

# If the "reload" option is implemented then remove the

# 'force-reload' alias

#

log_daemon_msg "Restarting $DESC" "$NAME"

do_stop

case "$?" in

0|1)

do_start

case "$?" in

0) log_end_msg 0 ;;

1) log_end_msg 1 ;; # Old process is still running

*) log_end_msg 1 ;; # Failed to start

esac

;;

*)

# Failed to stop

log_end_msg 1

;;

esac

;;

*)

echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2

exit 3

;;

esac

:

Pensez à modifier le pwd de syslogfeeder dedans

Créez le lien pour lancer le script au démarrage

sudo update-rc.d syslog2mysql defaults

Maintenant démarrez le service syslog2mysql :

sudo /etc/init.d/syslog2mysql start

ou si vous préférez ne pas utiliser init.d et utiliser directement le script :

sudo ./syslog2mysql.sh &

Note : ce script doit toujours s'exécuter en tache de fond parce qu'en l'utilisant tout les messages sont redirigés dans la base de données MySQL.

Il est maintenant temps de redémarrer le démon syslog-ng et d'envoyer les logs dans la base

de données :

sudo /etc/init.d/syslog-ng restart

Page 12: Gestion et surveillance du reseau  syslogng

Modification du fichier config.php

Si vous utilisez la base de données par défaut initialisée par le fichier dbsetup.sql, tout ce que vous avez à faire est d'entrer le mot de passe pour les utilisateurs sysloguser et syslogadmin,

définir l'hote et le port du serveur de base de données s'il n'est pas sur le même serveur que le serveur web, et saisir une URL valide.

Sinon, parcourez le fichier config.php et configurez les paramètres dont vous avez besoin.

Toutes les options sont expliquées dans le fichier.

sudo vi /var/www/phpsyslogng/config/config.php

php-syslog-ng est maintenant accessible à l'adresse : http://votre_webserver/phpsyslogng Un compte administrateur (admin) a été créé par dbsetup.sql avec le mot de passe admin

Si après la connexion vous obtenez le message "Query failed: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax

to use near '' at line 1", c'est parce que votre base mysql n'est pas encore alimentée. Pour les plus pressés, vous pouvez créer un enregistrement factice via la requête SQL suivante :

INSERT INTO `search_cache` ( `tablename` , `type` , `value` ,`updatetime` )

VALUES ('logs', 'HOST', 'localhost', NOW( ) );

4. Configuration de la rotation des journaux

La rotation permet d'archiver et/ou purger les plus anciens évènements des journaux afin

d'éviter que leur stockage ne devienne trop volumineux

Rotation des journaux de la base MYSQL

Il est préférable d'utiliser le service de rotation des logs plutôt que de supprimer les enregistrements directement dans la table principale de la base de données. Ceci évite de causer des problèmes de performance. Déplacer les logs de la table principale améliore aussi

les performances car la table qui contient les anciens logs est statique et peut donc être optimisée.

Vous devez éditer le fichier logrotate.php dans le répertoire 'scripts' pour spécifier le chemin

d'installation de php-syslog-ng.

Si vous choissiez d'utiliser le script logrotate.php, ajoutez simplement celui-ci dans votre crontab et exécutez le aussi souvent que vous le souhaitez (le maximum est actuellement

d'une fois par jour).

Pour cela, éditez la crontab du superutilisateur…

sudo crontab -e

… pour y ajouter une entrée :

00 22 * * 0 php /var/www/phpsyslogng/scripts/logrotate.php

Page 13: Gestion et surveillance du reseau  syslogng

Ici, la rotation des logs se fera tout les lundis (0) à 22h00

Si vous activez le paramètre LOGROTATERETENTION du fichier config.php, alors les logs plus anciens que ce paramètre seront supprimés à l'exécution du fichier 'logrotate.php'. (activé par défaut à 90 jours)

5. Résolution des problèmes

Si vous rencontrez le messages d'erreur "Query failed: Can't find file: 'all_logs' (errno: 2)" après vous être identifié, il vous faut exécuter la commande suivante :

php /var/www/phpsyslogng/scripts/logrotate.php

La commande ne résout que temporairement le problème !

Contributeurs : sidney_v