SIEM : centraliser les logs Linux et Windows dans une base MySQL / MariaDB
Le démon Rsyslog possède de très nombreux modules nous permettant d’envoyer les logs des systèmes et des applications vers les bases de données MySQL / MariaDB, PostgreSQL, ElasticSearch, Redis, MongoDB à des fins d’analyse post-mortem et de Forensics par exemple. Autrement dit, à l’aide de evtsys installé sur les stations et les serveurs Windows (exécutable evtsys.exe à copier dans c:\windows\system32), vous pouvez construire un SIEM très simplement (en moins d’une heure) avec Rsyslog et MariaDB, en redirigeant les journaux d’événements vers un ou plusieurs serveurs Rsyslog eux-mêmes renvoyant vers une base de données ou un cluster Galera.
evtsys -i -h ip_ou_fqdn_machine_linux_rsyslog -l 0 -t win net start evtsys
Installation du module rsyslog-mysql
Après avoir installé au préalable une instance MySQL/MariaDB, nous allons ajouter sur Fedora le paquet rsyslog-mysql :
dnf install rsyslog-mysql
Création de la base Syslog
En installant le module vous disposez d’un script pour créer la base de données Syslog :
mysql -u root -p < /usr/share/doc/rsyslog/mysql-createDB.sql
Le script crée une base Syslog (avec un S majuscule) et lui rattache les tables SystemEvents et SystemEventsProperties. Pensez à créer un utilisateur disposant des droits sur cette base à partir de l’interpréteur mysql :
CREATE USER utilisateur@localhost; SET PASSWORD FOR utilisateur@localhost=PASSWORD('mot_de_passe'); GRANT ALL PRIVILEGES ON Syslog.* TO utilisateur@localhost IDENTIFIED BY 'mot_de_passe' WITH GRANT OPTION;
Configuration du fichier /etc/rsyslog.conf
Pensez à décommenter les lignes du fichier de configuration suivantes Rsyslog nécessaire à la mise en écoute et à la collecte des données :
module(load="imklog") # reads kernel messages (the same are read from journald) module(load="immark") # provides --MARK-- message capability module(load="imudp") # needs to be done just once input(type="imudp" port="514")
Dans Fedora, après installation du paquet rsyslog-mysql, vous devez ajouter le module ommysql au fichier de configuration /etc/rsyslog.conf :
module(load="ommysql")
Redirigez ensuite tous les messages en ajoutant tout à la fin de ce fichier, vers localhost dans l’exemple ci-dessous :
*.* :ommysql:localhost,Syslog,utilisateur,mot_de_passe
Vous pouvez redémarrer le service rsyslog , en faisant attention à configurer/désactiver SELinux/Firewalld :
systemctl restart rsyslog
Requête sur la table SystemEvents
Après vous être connecté à la base Syslog nouvellement créé, tapez, par exemple, la requête pour visualiser les logs :
SELECT ReceivedAt, FromHost, Facility, Priority, Message, SysLogTag FROM SystemEvents
Tables facility et severity
Afin d’établir les correspondances entre les codes des catégories et des niveaux d’erreur des messages, je vous conseille de créer les tables facility et severity :
CREATE TABLE facility ( code INT, keyword VARCHAR(50), description VARCHAR(50) ); INSERT INTO facility(code,keyword,description) VALUES (0,'kern','kernel messages'), (1,'user','user-level messages'), (2,'mail','mail system'), (3,'daemon','system daemons'), (4,'auth','security/authorization messages'), (5,'syslog','messages generated internally by syslogd'), (6,'lpr','line printer subsystem'), (7,'news','network news subsystem'), (8,'uucp','UUCP subsystem'), (9,'cron','clock daemon'), (10,'authpriv','security/authorization messages'), (11,'ftp','FTP daemon'), (12,'ntp','NTP subsystem'), (13,'security','log audit'), (14,'console','log alert'), (15,'solaris-cron','scheduling daemon'), (16,'local0','locally used facilities'), (17,'local1','locally used facilities'), (18,'local2','locally used facilities'), (19,'local3','locally used facilities'), (20,'local4','locally used facilities'), (21,'local5','locally used facilities'), (22,'local6','locally used facilities'), (23,'local7','locally used facilities'); CREATE TABLE severity ( code INT, title VARCHAR(20), keyword VARCHAR(10) ); INSERT INTO severity(code,title,keyword) VALUES (0,'Emergency','emerg'), (1,'Alert','alert'), (2,'Critical','crit'), (3,'Error','err'), (4,'Warning','warn'), (5,'Notice','notice'), (6,'Informational','info'), (7,'Debug','debug');
Comprendre rsyslog
Vous disposez, sur Wikipédia, d’une excellente page consacrée à syslog dans laquelle vous aurez toutes les explications requises sur les valeurs figurant dans les colonnes Facility (la catégorie des messages) et Priority (le niveau de sévérité des messages).