Recherche de site Web

Comment configurer le serveur de journalisation central avec Rsyslog sous Linux


Les journaux sont un composant essentiel de tout logiciel ou système d'exploitation. Les journaux enregistrent généralement les actions de l'utilisateur, les événements système, l'activité réseau et bien plus encore, en fonction de leur destination. L'un des systèmes de journalisation les plus utilisés sur les systèmes Linux est rsyslog.

Rsyslog est un système de traitement de journaux puissant, sécurisé et hautes performances qui accepte les données provenant de différents types de sources (systèmes/applications) et les génère dans plusieurs formats.

Il a évolué d'un démon syslog classique à un système de journalisation complet au niveau de l'entreprise. Il est conçu selon un modèle client/serveur, il peut donc être configuré en tant que client et/ou en tant que serveur de journalisation central pour d'autres serveurs, périphériques réseau et applications distantes.

Environnement de test

Pour les besoins de ce guide, nous utiliserons les hébergeurs suivants :

  • Serveur : 192.168.241.140
  • Client : 172.31.21.58

Comment installer et configurer le serveur Rsyslog

La plupart des distributions Linux sont livrées avec le package rsyslog préinstallé. S'il n'est pas installé, vous pouvez l'installer à l'aide de votre outil de gestion de packages Linux, comme indiqué.

sudo yum update && yum install rsyslog 	#CentOS 7
sudo apt update && apt install rsyslog	#Ubuntu 16.04, 18.04

Une fois rsyslog installé, vous devez démarrer le service pour le moment, activer son démarrage automatique au démarrage et vérifier son état avec la commande systemctl.

sudo systemctl start rsyslog
sudo systemctl enable rsyslog
sudo systemctl status rsyslog

Le fichier de configuration principal de rsyslog se trouve dans /etc/rsyslog.conf, qui charge les modules, définit les directives globales, contient les règles de traitement des messages de journal et inclut également tous les fichiers de configuration dans /etc /rsyslog.d/ pour diverses applications/services.

sudo vim /etc/rsyslog.conf

Par défaut, rsyslog utilise les modules imjournal et imusock pour importer des messages de journal structurés à partir du systemd journal et pour accepter syslog. messages provenant d'applications exécutées sur le système local via des sockets Unix, respectivement.

Pour configurer rsyslog en tant que serveur de journalisation réseau/central, vous devez définir le protocole (soit UDP ou TCP ou les deux) qu'il utilisera pour la réception syslog à distance ainsi que le port sur lequel il écoute.

Si vous souhaitez utiliser une connexion UDP, plus rapide mais peu fiable, recherchez et décommentez les lignes ci-dessous (remplacez 514 par le port sur lequel vous souhaitez qu'il écoute, cela devrait correspond à l'adresse du port auquel les clients envoient des messages, nous y reviendrons plus en détail lors de la configuration d'un client rsyslog).

$ModLoad imudp
$UDPServerRun 514

Pour utiliser la connexion TCP (qui est plus lente mais plus fiable), recherchez et décommentez les lignes ci-dessous.

$ModLoad imtcp
$InputTCPServerRun 514

Dans ce cas, nous souhaitons utiliser simultanément les connexions UDP et TCP.

Ensuite, vous devez définir l'ensemble de règles pour le traitement des journaux distants au format suivant.

facility.severity_level	destination (where to store log)

Où :

  • installation : est un type de processus/application générant un message, ils incluent auth, cron, démon, noyau, local0..local7. Utiliser * signifie toutes les installations.
  • severity_level : est le type de message de journal : emerg-0, alert-1, crit-2, err-3, warn-4, notice-5, info-6, debug-7. L'utilisation de * signifie tous les niveaux de gravité et aucun n'implique aucun niveau de gravité.
  • destination : est soit un fichier local, soit un serveur rsyslog distant (défini sous la forme IP:port).

Nous utiliserons le ensemble de règles suivant pour collecter les journaux des hôtes distants, à l'aide du modèle RemoteLogs. Notez que ces règles doivent précéder toute règle de traitement des messages locaux, comme indiqué dans la capture d'écran.

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

En regardant l'ensemble de règles ci-dessus, la première règle est «$template RemoteLogs»,/var/log/%HOSTNAME%/%PROGRAMNAME%.log” ”.

La directive $template indique au démon rsyslog de rassembler et d'écrire tous les messages distants reçus dans des journaux distincts sous /var/log, en fonction du nom d'hôte (nom de la machine client) et l'installation client distante (programme/application) qui a généré les messages tels que définis par les paramètres présents dans le modèle RemoteLogs.

La deuxième ligne « *.* ?RemoteLogs » signifie enregistrer les messages de toutes les installations à tous les niveaux de gravité à l'aide de la configuration du modèle RemoteLogs.

La dernière ligne «& ~» demande à rsyslog d'arrêter de traiter les messages une fois qu'ils sont écrits dans un fichier. Si vous n'incluez pas "& ~", les messages seront plutôt écrits dans les fichiers locaux.

Il existe de nombreux autres modèles que vous pouvez utiliser. Pour plus d'informations, consultez la page de manuel de configuration de rsyslog (man rsyslog.conf) ou reportez-vous à la documentation en ligne de Rsyslog.

C'est tout avec la configuration du serveur rsyslog. Enregistrez et fermez le fichier de configuration. Pour appliquer les modifications récentes, redémarrez le démon rsyslog avec la commande suivante.

sudo systemctl restart rsyslog

Vérifiez maintenant les sockets réseau rsyslog. Utilisez la commande ss (ou netstat avec les mêmes indicateurs) et dirigez la sortie vers grep pour filtrer les connexions rsyslogd.

sudo ss -tulnp | grep "rsyslog"

Ensuite, sur CentOS 7, si SELinux est activé, exécutez les commandes suivantes pour autoriser le trafic rsyslog en fonction du type de socket réseau.

sudo semanage -a -t syslogd_port_t -p udp 514
sudo semanage -a -t syslogd_port_t -p tcp 514 

Si le pare-feu du système est activé, vous devez ouvrir le port 514 pour autoriser les deux connexions UDP/TCP au serveur rsyslog, en exécutant.

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

------------- On Ubuntu -------------
sudo ufw allow 514/udp
sudo ufw allow 514/tcp
sudo ufw reload 

Comment configurer le client Rsyslog pour envoyer des journaux au serveur Rsyslog

Maintenant sur le système client, vérifiez si le service rsyslog est en cours d'exécution ou non avec la commande suivante.

sudo systemctl status rsyslog

S'il n'est pas installé, installez-le et démarrez le service comme indiqué précédemment.

sudo yum update && yum install rsyslog 	#CentOS 7
sudo apt update && apt install rsyslog	#Ubuntu 16.04, 18.04
sudo systemctl start rsyslog
sudo systemctl enable rsyslog
sudo systemctl status rsyslog

Une fois le service rsyslog opérationnel, ouvrez le fichier de configuration principal dans lequel vous apporterez des modifications à la configuration par défaut.

sudo vim /etc/rsyslog.conf

Pour forcer le démon rsyslog à agir en tant que client de journal et à transmettre tous les messages de journal générés localement au serveur rsyslog distant, ajoutez cette règle de transfert à la fin du fichier, comme indiqué dans la capture d'écran suivante.

*. *  @@192.168.100.10:514

La règle ci-dessus enverra des messages de toutes les installations et à tous les niveaux de gravité. Pour envoyer des messages à partir d'une installation spécifique, par exemple auth, utilisez la règle suivante.

auth. *  @@192.168.100.10:514

Enregistrez les modifications et fermez le fichier de configuration. Pour appliquer les paramètres ci-dessus, redémarrez le démon rsyslog.

sudo systemctl restart rsyslog

Comment surveiller la journalisation à distance sur le serveur Rsyslog

La dernière étape consiste à vérifier si rsyslog reçoit et enregistre réellement les messages du client, sous /var/log, sous la forme hostname/programname.log.

Exécutez une commande ls pour afficher une longue liste du répertoire des journaux parent et vérifiez s'il existe un répertoire appelé ip-172.31.21.58 (ou quel que soit le nom d'hôte de votre ordinateur client).

 
ls -l /var/log/

Si le répertoire existe, vérifiez les fichiers journaux qu'il contient en exécutant.

sudo ls -l /var/log/ip-172-31-21-58/

Résumé

Rsyslog est un système de traitement de journaux hautes performances, conçu dans une architecture client/serveur. Nous espérons que vous pourrez installer et configurer Rsyslog en tant que serveur de journalisation central/réseau et en tant que client, comme démontré dans ce guide.

Vous pouvez également vous référer aux pages de manuel rsyslog pertinentes pour plus d'aide. N'hésitez pas à nous faire part de vos commentaires ou à poser des questions.