INSTALLATION ET CONFIGURATION SERVEUR RSYSLOG

Transcription

INSTALLATION ET CONFIGURATION SERVEUR RSYSLOG
INSTALLATION ET CONFIGURATION
SERVEUR RSYSLOG
Table des matières
1.
Préambule ............................................................................................................................................. 2
2.
Pré-requis .............................................................................................................................................. 2
3.
Installation et configuration du serveur ................................................................................................ 3
3.1.
Installation ......................................................................................................................................... 3
3.1.1.
Rsyslog ........................................................................................................................................... 3
3.1.2.
php-syslog-ng ................................................................................................................................ 3
3.2.
Configuration ..................................................................................................................................... 4
3.2.1.
4.
Déviation vers une base de données mysql .................................................................................. 4
Installation et configuration du client ................................................................................................... 6
4.1.
Machine cliente Linux........................................................................................................................ 6
4.2.
Machine cliente Windows ................................................................................................................. 6
4.3.
Périphériques réseaux ....................................................................................................................... 7
5.
Tests de la configuration ....................................................................................................................... 7
6.
Pour aller plus loin ................................................................................................................................. 7
6.1.
Mise en place de filtres ..................................................................................................................... 7
6.2.
Utilisation de TCP comme méthode d'échange ................................................................................ 8
6.3.
Mise en place de rotation des logs.................................................................................................... 9
7.
Sources ................................................................................................................................................ 11
1. Préambule
Rsyslog est un serveur de journalisation vous permettant de centraliser l'ensemble de
vos journaux sur un serveur afin de les rendre consultables plus confortablement ainsi que
d'effectuer des opérations de tri, supervision, classement.
rsyslog fonctionne en 2 partie. Un serveur ainsi qu'un client. Le client peut-être soit à
installer manuellement soit déjà implémenté dans certains systèmes tel que les routeurs,
téléphones IP et autres périphériques réseaux.
Dans ce tutoriel nous installerons rsyslog ainsi que php-syslog-ng qui va nous permettre
d'obtenir une interface de gestion de nos logs qui seront stockés dans une base de données
MySql
2. Pré-requis
Voici la liste des éléments nécessaires dans ce tutoriel
- 1 Serveur Linux (debian Squeeze dans le cadre ce tutoriel) avec un LAMP fonctionnel
- 1 machine Linux cliente
- 1 Périphérique réseau avec syslog d'implémenté (un téléphone IP dans le cadre de ce
tutoriel)
2|Page
http://www.webprk.net
3. Installation et configuration du serveur
3.1.
Installation
3.1.1.Rsyslog
sudo aptitude install rsyslog rsyslog-mysql
3.1.2. php-syslog-ng
Afin d'installer php-syslog-ng récupérez le package à l'adresse suivante
(http://www.webprk.net/index.php?tgt=scr) puis décompresser la tarball dans le répertoire
web de votre apache2 (par défaut : /var/www/).
Créez une base de données au préalable dans Mysql qui sera dédié à php-syslog-ng
Une fois décompressé, ouvrez votre navigateur web pour passer à l'installation de phpsyslog-ng en vous plaçant dans le répertoire http://[ip_de_votre_serveur]/html/install/
Suivez les étapes de l'installation. Aucune particularité n'est à signaler dans ce processus.
N'oubliez pas comme indiqué dans la dernière étape de l'installation de supprimer le répertoire
install.
3|Page
http://www.webprk.net
3.2.
Configuration
La configuration de base du serveur est assez simple. Editez le fichier /etc/rsyslog.conf :
Supprimez les commentaires sur les entrées suivantes afin de permettre la réception de syslog
via le protocole TCP et UDP.
#provide UDP syslog reception
$ModLoad imudp
$UDPServerRun 514
# provide TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514
Votre serveur est désormais prêt à recevoir des paquets syslog via le port TCP/UDP 514.
Nous activerons ces 2 protocoles car en fonction de l'implémentation de syslog, il ne vous sera
pas toujours possible de recourir au protocole TCP.
3.2.1. Déviation vers une base de données mysql
Nous allons maintenant nous attaquer au plus intéressant. La déviation des logs
récupérés dans la base de données Mysql de php-syslogg-ng.
Pour se faire, rsyslog offre un système de template que l'on peut enclencher dès lors
qu'un log correspond à la règle où vous souhaitez appliquer le template.
Dans un premier temps nous allons éditer le fichier /etc/rsyslog.d/mysql.conf
Supprimez la ligne suivante :
*.* :ommysql:[server],[dbname],[user],[passwd]
Ajoutez le template suivant :
$template syslogNg," insert into
4|Page
http://www.webprk.net
logs(host,facility,priority,level,tag,datetime,program,msg)
VALUES ('%HOSTNAME%', '%syslogfacility-text%',
'%syslogpriority-text%', '%syslogseverity-text%',
'%syslogtag%','%timereported:::date-mysql%','%programname%',
'%msg%')",SQL
Puis on ajoute la règle de déviation en utilisant le template syslogNg :
*.* >[server],[dbname],[user],[password];syslogNg
On redémarre le service syslog
sudo /etc/init.d/rsyslog restart
Vous devriez voir dès à présent des lignes dans votre interface php-syslog-ng. Si ce n'est pas le
cas générez du log en démontant remontant votre carte réseau par exemple :
sudo ifdown eth0
sudo ifup eth0
Si vous n'avez toujours pas de log dans votre base vérifiez bien la syntaxe du template.
(j'ai rencontré beaucoup de soucis mais celui que je vous fourni est fonctionnel. Je préconise
d'insérer le template sur une seule ligne).
Pensez à vous aider des logs ;).
Exemple :
sudo cat /var/log/syslog | grep rsyslog
Vous devriez pouvoir apprendre beaucoup de choses via cette commande.
5|Page
http://www.webprk.net
4. Installation et configuration du client
4.1.
Machine cliente Linux
Une fois que votre serveur est prêt nous allons passer à la configuration du client.
Si le fichier /etc/rsyslog.conf n'est pas présent dans votre système installez-le :
sudo aptitude install rsyslog
Editez le fichier /etc/rsyslog.conf puis ajoutez à la fin du fichier :
*.* @[ip_serveur]:[port]
Cette directive va indiquer à rsyslog de forwarder tous les logs qu'il acquiert au serveur
mentionné via le port indiqué.
Il est possible d'appliquer des filtres afin de ne pas tout rediriger. Ce point sera abordé plus loin
dans ce document.
Redémarrez le service rsyslog après avoir enregistré vos modifications.
4.2.
Machine cliente Windows
Afin de pouvoir remonter des journaux d'évènement d'un système Windows sur notre
serveur syslog il existe différentes applications. Ayant réellement testé EventReporter mais qui
est toutefois payant, je préfère compléter cette partie plus tard une fois que j'aurais trouvé un
freeware ou un soft openSource pour une tâche équivalente.
Voici toutefois les liens nécessaires que j'ai suivis pour l'installation :


http://www.eventreporter.com/en/
http://www.mwagent.com/sub-articles/centralized-logging-in-a-hybrid-environmentwindowslinux-step-3/
6|Page
http://www.webprk.net
4.3.
Périphériques réseaux
Concernant les périphériques réseaux, la possibilité d'émettre les logs du matériel
vers un serveur peut varier d'un constructeur à un autre. Toutefois la plupart des routeurs et
téléphones
IP proposent cette fonctionnalité. Les équipements Cisco implémentent eux aussi le
protocole syslog afin de pouvoir centraliser les logs sur un serveur dédié.
5. Tests de la configuration
Afin de tester notre configuration nous allons générer du log à partir de notre machine
cliente pour cela exécutez simplement la commande suivante :
sudo ifdown eth0
sudo ifup eth0
Consultez dès lors vos logs depuis phpsyslog-ng et vérifiez que des logs de votre machine
cliente sont présents.
Si ce n'est pas le cas vérifiez que vous avez bien activé l'écoute des ports sur votre
serveur (point 3) et que votre client est bien configuré (point 4).
6. Pour aller plus loin
6.1.
Mise en place de filtres
En enregistrant tous les logs dans votre base de données vous allez vous apercevoir que
le volume va croître très rapidement surtout si votre serveur est la référence de nombreux
périphériques (routeurs, téléphones, serveurs, stations clientes).
La mise en place de filtres permet en plus de réduire le volume de votre base de données
permet aussi de ne remonter à votre serveur que certains types de logs que l'on peut
sélectionner par :

Type d'application
7|Page
http://www.webprk.net

Criticité de l'événement
Ainsi il est par exemple possible de remonter uniquement les événements dont la criticité
est supérieure ou égale à un avertissement.
Les événements d'information qui ne sont pas source potentielle de problème ne seront
donc pas remontés.
Il est toutefois recommandé de conserver les journaux d'un système sur un seul système.
Pour plus de détails sur la mise en place de filtres consultez le lien suivant :
http://www.rsyslog.com/doc/rsyslog_conf_filter.html
Voici un exemple simple de mise en place de filtre sur notre prédicat précédent :
*.warn @[ip_de_votre_serveur]
6.2.
Utilisation de TCP comme méthode d'échange
Il est possible de modifier dans rsyslog le protocole de communication à utiliser. Par
défaut rsyslog se base sur des échanges en UDP (port 514). Il est toutefois possible de basculer
en TCP.
Il faut veiller au préalable que votre serveur syslog puisse accepter la communication en
TCP. Cette vérification se fait par le biais des directives suivantes dans rsyslog.conf
# provide TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514
A ce stade le serveur est opérationnel pour écouter en TCP sur le port défini dans son fichier de
configuration.
Maintenant il faut configurer le client pour qu'il transmette en mode TCP ses paquets :
Editez le fichier /etc/rsyslog.conf :
# rsyslog va forwarder ses logs en UDP
*.* @[ip_serveur]:[port]
8|Page
http://www.webprk.net
# rsyslog va forwarder ses logs en TCP
*.* @@[ip_serveur]:[port]
Il est important de noter que certains périphériques réseaux n’implémentent pas le dialogue en
TCP. Par conséquent il est préférable de toujours écouter le port 514 en UDP.
Si vous souhaitez remonter des journaux depuis des périphériques propriétaires. Si ce n'est pas
le cas et que vous avez la main sur la configuration de syslog vous pouvez le désactiver.
6.3.
Mise en place de rotation des logs
Une base de données qui contient des logs de plusieurs système va grossir indéfiniment
c'est indéniable. C'est pourquoi il existe dans le package de php-syslog-ng un script
logrotate.php
Ce script va vous permettre de réaliser une purge de vos données de la base afin de ne
pas altérer les performances de votre base de données.
En fonction de votre utilisation des logs il est peut-être préférable de les sauvegarder
dans un script ou dans une requête SQL avant de les perdre définitivement.
Pour configurer ce script 2 étapes sont nécessaires
9|Page
http://www.webprk.net
Il faut d'abord configurer le fichier config.php de php-syslog-ng situé dans le répertoire config :
define('LOGROTATERETENTION', 90);
Cette directive indique le nombre de jour à partir duquel un enregistrement sera
considéré comme obsolète et sera traité par le script logrotate.php
Une fois votre valeur définie il vous faut planifier le rythme d'exécution du script
logrotate.php
La planification de tâche sous linux s'effectue par le biais du package cron
(http://unixhelp.ed.ac.uk/CGI/man-cgi?crontab+5 )
Exécuter la commande suivante :
sudo crontab -e
Créer un dossier php-syslog-ng dans /var/log/ pour le stockage de journaux du script
Ajouter la ligne suivante à la fin du fichier cron :
@daily php [chemin_vers_php_syslog_ng]/scripts/logrotate.php >>
/var/log/php-syslog-ng/logrotate.log
@daily find [chemin_vers _php_syslog_ng]/jpcache/ -atime 1 -exec rm -f
'{}' ';'
*/5 * * * * php [chemin_vers_php_syslog_ng]/scripts/reloadcache.php >>
/var/log/php-syslog-ng/reloadcache.log
Expliquons un peu les lignes fraichement ajoutées :
La première ligne exécute de manière journalière le script logrotate.php puis dévie la
sortie (message de retour du script affiché dans le terminal) vers un fichier .log
La seconde a pour vocation de supprimer de manière journalière le cache que génère
php_syslog_ng afin d'accélérer la génération des résultats de vos requêtes.
La dernière exécute un script permettant de générer un nouveau cache aussitôt toutes
les 5 minutes.
10 | P a g e
http://www.webprk.net
Ainsi votre base sera régulièrement purgée afin de ne pas faire croitre sa taille indéfiniment.
7. Sources
- http://wiki.rsyslog.com/index.php/Php-syslog-ng
- http://www.rsyslog.com/doc/manual.html
- http://www.deimos.fr/blocnotesinfo/index.php?title=Php-syslogng_:_Interpr%C3%A9tation_des_logs_Syslog-ng_dans_une_interfa%C3%A7e_web
11 | P a g e
http://www.webprk.net

Documents pareils