Rsyslog
https://wiki.debian.org/fr/Rsyslog https://www.tecmint.com/setup-rsyslog-client-to-send-logs-to-rsyslog-server-in-centos-7/
Installation d'un serveur Rsyslog
Nous sommes ici sur Debian 10.
Base de données
On commence par mettre en place une base de données mariadb.
<source lang="bash">
- En root
apt install mariadb-server apt install rsyslog-mysql </source>
Le package rsyslog-mysql configure tout seul la base de données pour rsyslog; il nous demande juste le mot de passe de l'utilisateur rsyslog. Il créée une base "Syslog", contenant deux tables. Il génère le fichier de configuration dans /etc/rsyslog.d/mysql.conf:
<source lang="bash">
- Configuration file for rsyslog-mysql
- Changes are preserved
module (load="ommysql")
- .* action(type="ommysql" server="localhost" db="Syslog" uid="rsyslog" pwd="Prevert77")
- On peut lui adjoindre des directives concernant les messages à mettre en BDD:
- .emerg >localhost,Syslog,Utilisateur_BDD,Password_BDD
- .alert >localhost,Syslog,Utilisateur_BDD,Password_BDD
- .crit >localhost,Syslog,Utilisateur_BDD,Password_BDD
- .err >localhost,Syslog,Utilisateur_BDD,Password_BDD
- .warning >localhost,Syslog,Utilisateur_BDD,Password_BDD
- .notice >localhost,Syslog,Utilisateur_BDD,Password_BDD
- .info >localhost,Syslog,Utilisateur_BDD,Password_BDD
- .debug >localhost,Syslog,Utilisateur_BDD,Password_BDD
</source>
On va ensuite vérifier le bon fonctionnement:
<source lang="bash"> root@Syslog:~# logger Test root@Syslog:~# mysql -u rsyslog -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 51 Server version: 10.3.18-MariaDB-0+deb10u1 Debian 10
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> use Syslog; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A
Database changed MariaDB [Syslog]> SELECT Message FROM SystemEvents; +-----------------------------------------------------------------------------------------------------------------------+ | Message | +-----------------------------------------------------------------------------------------------------------------------+ | Stopping System Logging Service... | | [origin software="rsyslogd" swVersion="8.1901.0" x-pid="62" x-info="https://www.rsyslog.com"] exiting on signal 15. | | rsyslog.service: Succeeded. | | Stopped System Logging Service. | | Starting System Logging Service... | | Started System Logging Service. | | imuxsock: Acquired UNIX socket '/run/systemd/journal/syslog' (fd 3) from systemd. [v8.1901.0] | | imklog: cannot open kernel log (/proc/kmsg): Permission denied. | | activation of module imklog failed [v8.1901.0 try https://www.rsyslog.com/e/2145 ] | | [origin software="rsyslogd" swVersion="8.1901.0" x-pid="2139" x-info="https://www.rsyslog.com"] start | | Test | +-----------------------------------------------------------------------------------------------------------------------+ 11 rows in set (0.001 sec) </source>
Ecoute du réseau
Le fichier de configuration se trouve dans /etc/rsyslog.conf. Par défaut, il contient des directives pour les fichiers de log du système en lui-même, sur lesquelles je ne vais pass revenir.
Pour configurer l'écoute réseau, il faut rajouter quelques lignes en fonction de ce que l'on veut faire : en effet, on peut configurer l'écoute en TCP ou en UDP. Il existe également un protocole apparement plus fiable nommé RELP: https://fr.wikipedia.org/wiki/Reliable_Event_Logging_Protocol
Les lignes suivantes sont rajoutées en fin de fichier:
<source lang="bash">
- Configuration de l'ecoute reseau
- Configuration UDP
$ModLoad imudp $UDPServerRun 514
- Configuration TCP
- $ModLoad imtcp
- $InputTCPServerRun 1514
- Reseaux autorises a se connecter
$AllowedSender UDP, 127.0.0.1, 192.168.1.0/24 </source>
Suivi d'un redémarrage de rsyslog.
Le serveur est prêt.
Configuration d'un client
On commence par installer le paquet et créer un répertoire de travail:
<source lang="bash"> apt install rsyslog mkdir /var/spool/rsyslog </source>
Puis on ouvre /etc/rsyslog.conf.
<source lang="bash">
- On s'assure d'avoir le bon répertoire de travail
$WorkDirectory /var/spool/rsyslog
- Les lignes suivantes sont à ajouter, à tuner en fonction des besoins
$ActionQueueType LinkedList # Exécuter le traitement de façon asynchrone. $ActionQueueFileName srvrfwd1 # Préfixe de nom unique pour les fichiers spool. Active également le mode disque. $ActionQueueMaxDiskSpace 1g # Limite d'espace de 1 Go. $ActionQueueSaveOnShutdown on # Enregistrer les données sur le disque si Rsyslog est arrêté. $ActionResumeRetryCount -1 # Tentatives infinies en cas d'échec de connexion avec l'hôte.
- jouter les lignes suivantes dans la section RULES :
- Envoyer tous les messages sur le serveur de journalisation distant avec la commande suivante :
- .* @@Cible_IP_serveur_1_LogAnalayzer:514 # Ou 514 est le port d'écoute qui a été défini dans la configuration.
- Concernant cette derniere ligne, la plus importante:
- .* @192.168.1.1 #Un seul @ pour faire de l'UDP
- .* @@192.168.1.2 #Deux @ pour du TCP !
- On peut répéter ce bloc pour avoir des serveurs multiples
</source>
Suivi d'un restart. Le systemctl status doit être au vert ! Si le mauvais type de connexion est configuré par rapport au serveur, le status nous dit qu'il ne peut pas se connecter.
On va ensuite aller voir si nos messages de syslog arrivent bien ua serveur:
<source lang="bash">
- Sur le client
logger -s "Test du client"
- Sur le serveur
tail /var/log/syslog [...] Nov 28 12:05:09 deb-cible ansible: Test du client </source>