Recherche de site Web

Configuration d’un serveur de journaux centralisé avec Rsyslog dans CentOS/RHEL 8


Pour qu’un administrateur système puisse reconnaître ou analyser les problèmes sur un serveur CentOS 8 ou RHEL 8, il est important de connaître et d’afficher les événements qui se sont produits sur le serveur au cours d’une période donnée à partir des fichiers journaux trouvés dans /var/log, le répertoire du système.

Le système Syslog (System Logging Protocol) sur le serveur peut agir comme un point central de surveillance des journaux sur un réseau où tous les serveurs, périphériques réseau, commutateurs, routeurs et services internes qui créent des journaux, qu’ils soient liés à un problème interne particulier ou simplement à des messages informatifs peuvent envoyer leurs journaux.

Sur un serveur CentOS/RHEL 8, le démon Rsyslog est le serveur de journaux le plus important préinstallé par défaut, suivi du démon de journal Systemd (journald).

Rsyslog est un utilitaire open-source, développé en tant que service d’architecture client/serveur et peut remplir les deux rôles indépendamment. Il peut s’exécuter en tant que serveur et rassembler tous les journaux transmis par d’autres périphériques sur le réseau ou il peut s’exécuter en tant que client en envoyant tous les événements système internes enregistrés à un serveur Syslog distant.

Exigences

  1. Installation de « CentOS 8.0 » avec captures d’écran
  2. Installation de RHEL 8 avec captures d’écran

Afin de configurer un serveur de journaux centralisé sur un serveur CentOS/RHEL 8, vous devez vérifier et confirmer que la partition /var dispose de suffisamment d’espace (quelques Go minimum) pour stocker tous les fichiers journaux enregistrés sur le système qui sont envoyés par d’autres périphériques sur le réseau. Je vous recommande d’avoir un lecteur séparé (LVM ou RAID) pour monter le répertoire /var/log/.

Comment configurer le serveur Rsyslog dans CentOS/RHEL 8

1. Comme je l’ai dit, le service Rsyslog est installé et s’exécute automatiquement sur le serveur CentOS/RHEL 8. Afin de vérifier que le démon s’exécute dans le système, exécutez la commande suivante.

# systemctl status rsyslog.service

Si le service ne s’exécute pas par défaut, exécutez la commande suivante pour démarrer le démon rsyslog.

# systemctl start rsyslog.service

2. Si l’utilitaire Rsyslog n’est pas installé par défaut sur le système que vous prévoyez d’utiliser comme serveur de journalisation centralisé, exécutez la commande dnf suivante pour installer le package rsyslog et démarrer le démon.


dnf install rsyslog
systemctl start rsyslog.service

3. Une fois l’utilitaire Rsyslog installé, vous pouvez maintenant configurer rsyslog en tant que serveur de journalisation centralisé en ouvrant le fichier de configuration principal /etc/rsyslog.conf, afin de recevoir des messages de journal pour les clients externes.

# vi /etc/rsyslog.conf

Dans le fichier de configuration /etc/rsyslog.conf, recherchez et décommentez les lignes suivantes pour accorder la réception du transport UDP au serveur Rsyslog via le port 514. Rsyslog utilise le protocole UDP standard pour la transmission des journaux.

module(load="imudp") # needs to be done just once
input(type="imudp" port="514")

4. Le protocole UDP n’a pas la surcharge TCP et rend la transmission de données plus rapide que le protocole TCP. D’autre part, le protocole UDP ne garantit pas la fiabilité des données transmises.

Cependant, si vous souhaitez utiliser le protocole TCP pour la réception du journal, vous devez rechercher et décommenter les lignes suivantes dans le fichier de configuration /etc/rsyslog.conf afin de configurer le démon Rsyslog pour lier et écouter un socket TCP sur le port 514.

module(load="imtcp") # needs to be done just once
input(type="imtcp" port="514")

5. Créez maintenant un nouveau modèle pour recevoir des messages distants, car ce modèle guidera le serveur Rsyslog local, où enregistrer les messages reçus envoyés par les clients du réseau Syslog.


$template RemoteLogs,"/var/log/%HOSTNAME%/%PROGRAMNAME%.log" 
*.* ?RemoteLogs

La directive $template RemoteLogs guide le démon Rsyslog pour collecter et écrire tous les messages de journal transmis dans des fichiers distincts, en fonction du nom du client et de l’application cliente distante qui a créé les messages en fonction des propriétés décrites ajoutées dans la configuration du modèle : %HOSTNAME % et %PROGRAMNAME %.

Tous les fichiers journaux reçus seront écrits dans le système de fichiers local dans un fichier alloué nommé d’après le nom d’hôte de la machine cliente et conservé dans le répertoire /var/log/.

La règle de redirection & ~ indique au serveur Rsyslog local d’arrêter de traiter le message de journal reçu et de supprimer les messages (et non de les écrire dans des fichiers journaux internes).

Le RemoteLogs est un nom arbitraire donné à cette directive de modèle. Vous pouvez utiliser le nom que vous voulez et qui convient le mieux à votre modèle.

Pour configurer des modèles Rsyslog plus complexes, lisez le manuel du fichier de configuration Rsyslog en exécutant la commande man rsyslog.conf ou consultez la documentation en ligne de Rsyslog.

# man rsyslog.conf

6. Après avoir effectué les modifications de configuration ci-dessus, vous pouvez redémarrer le démon Rsyslog afin d’appliquer les modifications récentes en exécutant la commande suivante.

# service rsyslog restart

7. Une fois que vous avez redémarré le serveur Rsyslog, il doit maintenant agir comme un serveur de journaux centralisé et enregistrer les messages des clients Syslog. Pour confirmer les sockets réseau Rsyslog, exécutez la commande netstat et utilisez l’utilitaire grep pour filtrer la chaîne rsyslog.

# netstat -tulpn | grep rsyslog 

Si la commande netstat n’est pas intégrée sur CentOS 8, vous pouvez l’installer à l’aide de la commande suivante.


dnf whatprovides netstat
dnf install net-tools

8. Si vous avez SELinux actif dans CentOS/RHEL 8, exécutez la commande suivante pour autoriser le trafic rsyslog en fonction du type de socket réseau.

# semanage port -a -t syslogd_port_t -p udp 514
semanage port -a -t syslogd_port_t -p tcp 514

Si la commande semanage ne s’installe pas sur CentOS 8, vous pouvez l’installer à l’aide de la commande suivante.


dnf whatprovides semanage
dnf install policycoreutils-python-utils

9. Si vous avez un pare-feu actif sur le système, exécutez la commande suivante afin d’ajouter les règles nécessaires pour autoriser le trafic rsyslog sur les ports de Firewalld.


firewall-cmd --permanent --add-port=514/tcp
firewall-cmd --permanent --add-port=514/udp
firewall-cmd --reload

Vous pouvez également limiter les connexions entrantes sur le port 514 à partir des plages d’adresses IP de la liste blanche, comme indiqué.


firewall-cmd --permanent --add-rich-rule 'rule family="ipv4" source address="123.123.123.0/21" port port="514" protocol="tcp" accept'
firewall-cmd --permanent --add-rich-rule 'rule family="ipv4" source address="123.123.123.0/21" port port="514" protocol="udp" accept'
firewall-cmd --reload

C’est tout! Rsyslog est maintenant configuré comme un serveur de journaux centralisé et peut collecter les journaux des clients distants. Dans le prochain article, nous verrons comment configurer le client Rsyslog sur le serveur CentOS/RHEL 8.

Articles connexes: