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