====== Configuration de la collecte de logs avec RSyslog ====== ===== Introduction ===== Ce tutoriel a pour but la mise en œuvre d'une collecte de logs sous Linux via le protocole Syslog. RSyslog est un outil client-serveur permettant d'envoyer et recevoir des logs, généralement intégré par défaut aux distributions Linux modernes. On le configure par le biais du fichier **/etc/rsyslog.conf** que ce soit côté client ou côté serveur. ===== Topologie du lab ===== Dans ce tutoriel, nous aurons 2 machines sous Debian 11. L'une enverra ses logs (le client), et l'autre les recevra (le serveur) : {{ ::rsyslogtutotopo.png?400 |Architecture du lab : client et serveur Rsyslog}} ===== Pré-requis ===== Dans le cadre de ce tutoriel, nous aurons seulement besoin de 2 machines sous Linux (Debian, CentOS, ou RHEL de préférence) sur le même réseau IP. ===== Instructions ===== ==== Configuration côté serveur ==== Ouvrir le fichier **/etc/rsyslog.conf** avec un éditeur de texte pour le modifier : nano /etc/rsyslog.conf Décommenter ou ajouter les instructions suivantes pour activer la réception des logs en UDP : module(load="imudp") input(type="imudp" port="514") Pour garantir l'intégrité des paquets, il est néanmoins plus intéressant d'activer la réception des logs en TCP : module(load="imtcp") input(type="imtcp" port="514") Maintenant, on va définir l'emplacement de destination des logs sur le serveur ainsi que la façon dont ils seront nommés : $template remote-incoming-logs,"/var/log/%HOSTNAME%/%PROGRAMNAME%.log" *.* ?remote-incoming-logs Ci-dessus, on indique que les logs reçus par le serveur seront stockés dans un sous-répertoire spécifique de **/var/log** en fonction de la machine émettrice. La variable **%HOSTNAME%** correspond au nom du client qui envoie les logs et **%PROGRAMNAME%**, à celui du programme qui produit les logs. :?: Par défaut, si rien n'est paramétré, les logs sont stockés dans le répertoire ''/var/log/messages'' du serveur. On peut aussi ajouter des exceptions à la règle. Par exemple, pour envoyer tous les journaux dans **/var/log/** sauf ceux provenants de la machine **debian03** (envoyés alors dans ''/var/log/messages'') : :source, !isequal, "debian03" *.* ?remote-incoming-logs Enfin, pour sécuriser davantage le système, il est possible de whitelister les hôtes, les réseaux, ou les domaines autorisés à envoyer des logs au serveur (une ligne par protocole) : $AllowedSender UDP, 127.0.0.1/24, 192.168.1.0/24, *.nocterie.local $AllowedSender TCP, 127.0.0.1/24, 192.168.1.20/24, *.nocterie.local :?: Il peut y avoir plusieurs hôtes, réseaux, où domaines par ligne. Une fois ceci fait, on peut activer le service rsyslog au démarrage de la machine et le lancer : systemctl enable rsyslog systemctl start rsyslog On peut vérifier s'il y a des erreurs de configuration grâce à la commande suivante : systemctl status rsyslog Le service doit être actif et aucune erreur ne doit ressortir pour passer à la suite. On peut également vérifier que la machine est bien en écoute sur le port 514 en TCP et en UDP : ss tunlp | grep 514 Ce qui donne : {{::rsyslogtuto1.png?800|Vérification que la machine écoute bien sur le port 514 en TCP et en UDP}} ==== Configuration côté client ==== Passons sur la machine cliente. Le paramétrage de l'envoi des logs se fait également par le biais du fichier **/etc/rsyslog.conf** : nano /etc/rsyslog.conf Commençons par lui indiquer l'adresse du serveur (ici 192.168.1.202). Pour l'envoi des logs en UDP il faut l'écrire de cette façon : *.* @192.168.1.202:514 Commençons par lui indiquer l'adresse du serveur (ici 192.168.1.202). Pour TCP, c'est légèrement différent : *.* @@192.168.1.202:514 Puis, pour éviter les pertes de logs, on peut activer la mise en cache des évènements : $ActionQueueFileName queue $ActionQueueMaxDiskSpace 1g $ActionQueueSaveOnShutdown on $ActionQueueType LinkedList $ActionResumeRetryCount -1 Dans l'exemple ci-dessus, le client pourra mettre en cache jusqu'à 1gb d'évènements qui seront envoyés lorsque le serveur sera à nouveau joignable. Enfin, activer le service au démarrage et le lancer comme pour le serveur : systemctl enable rsyslog systemctl start rsyslog ==== Vérifications ==== Afin de s'assurer que la collecte de logs est fonctionnelle, il suffit de regarder le contenu du répertoire où sont stockés les évènements sur le serveur. Dans notre cas **/var/log** : ls /var/log On y trouve bien un sous-répertoire **debian01** qui correspond à notre client : {{::rsyslogtuto2.png?800|Contenu du répertoire /var/logs}} En regardant ce qu'il contient, on constate que des fichiers de log ont déjà été reçus en provenance du client : ls /var/log/debian01 -l {{::rsyslogtuto3.png?550|Les fichiers de log reçus depuis la machine debian01}} Pour visionner l'arrivée des évènements en direct dans un fichier de log, utiliser la commande suivante : tail -f /var/log/debian01/fichier.log :!: Remplacer ''fichier.log'' par le nom du fichier à lire Ici le fichier surveillé est **systemd.log**, qui retrace les démarrages et les arrêts de services sur la machine cliente. On peut y voir que le service Bluetooth vient d'être redémarré (en quasi instantané) : {{::rsyslogtuto4.png?600|Contenu du fichier systemd.log du client en direct}} ===== Sources ===== [[https://www.linuxtechi.com/setup-rsyslog-server-on-debian/|Configuration de rsyslog pour Debian 11]] [[https://www.linuxtricks.fr/wiki/rsyslog-centralisation-des-logs-sous-linux|Ancienne procédure de configuration rsyslog (debian 7) ]]