Adiscon Rsyslog

De Analyse Développement Hacking
Sauter à la navigation Sauter à la recherche

Glider.png

Le wiki : Accueil - Administrateur - Bureautique - Développeur - Intégrateur - Marketing - Multimédia - Objets numériques - Jeux - We make Hack

Le site : Accueil du site - Annuaire - Blog - Forum - Outils - Utilisateur
Le FTP : Accueil du FTP - Le privatebin : Accueil du privatebin
Le Redmine : Accueil du Redmine

Sommaire

Adiscon Rsyslog

Présentation de Adiscon Rsyslog

# En 2004, Gerhards Rainer propose un nouveau démon syslog pour rivaliser avec syslog-ng.
# Rainer Gerhards a travaillé sur le projet Rsyslog au sein de sa propre entreprise, Adiscon GmbH.
# Selon Gerhards Rainer, "Un nouvel acteur majeur permettra d'éviter les monocultures et offrira une richesse dans le choix".
# Rsyslog est donc un remplaçant direct de syslogd. Il implémente le protocole syslog de base, des fonctionnalités de sécurité et une conception modulaire.
# Rsyslog est un programme open source performant qui permet de transférer les messages de journalisation sur un réseau IP pour les systèmes UNIX et de type Unix.
# Syslog-ng, ng pour New Generation, est une autre solution de journalisation open-source disponible dans les dépôts. Il comporte également une version payante.
# Rsyslog est une solution de journalisation totalement open-source, disponible dans les dépôts.
# Rsyslog et Syslog-ng peuvent être utilisés et configurés en tant que client ou serveur.
# Le client sera configuré pour envoyer ses logs sur le réseau au format syslog.
# Le serveur pourra centraliser les logs les logs d'un ou plusieurs client(s).
# Lors de l'installation d'un nouveau service de journalisation, il remplace automatiquement le service de journalisation présent, de ce fait, syslogd sera automatiquement désactivé.
# Rsyslog permet de stocker les logs dans une base de données MySQL, MariaDB, MongoDB ou PostgreSQL pouvant être configurée avec dbconfig-common pour une configuration facile via debconf.
# Rsyslog ajoute des fonctionnalités de filtrage du contenu, des options de configuration flexibles et ajoute des fonctionnalités tel que l'utilisation de TCP, SSL et RELP pour le transport.
# Les règles de journalisation existantes dans "syslog.conf" peuvent être copiées dans "/etc/rsyslog.conf" ou dans le dossier "/etc/rsyslog.conf.d".
# Consulter les pages de manuel syslogd, syslog.conf et logrotate.
# Les données issues des logs pourront être exploitées par un programme complémentaire, comme par exemple, l'interface Web de Adiscon LogAnalyzer.

Historique du passage de Sysklogd vers Rsyslog

# Sysklogd qui était installé par défaut n'est pas mauvais mais le paquet n'a presque pas été entretenu ses dernières années.
# Le service Rsyslogd est intégré à Debian avec le paquet rsyslog depuis Debian Lenny pour remplacer l'ancien syslog : sysklogd.
# Voir la note d'information partagée de Debian Lenny release notes : https://www.debian.org/releases/lenny/i386/release-notes/ch-whats-new#system-changes

Installation

Prérequis

# Prérequis :
apache2
# Vérifier si le paquet rsyslog est déjà présent avec la commande :
sudo dpkg -l rsyslog
# Vérifier si le paquet apache2 est déjà présent avec la commande :
sudo dpkg -l apache2
# Rsyslog permet le stockage des logs de syslog dans une base de données.
# Si une base de données est configurée, l'interface Web de LogAnalyzer pourra utiliser les données de logs fournies par la base de données.
# Si aucune base de données n'est configurée, l'interface Web de LogAnalyzer pourra utiliser les données de logs fournies par syslog depuis le disque.

Installer la version 8.39.0 de Rsyslog depuis les dépôts officiels pour Mint et Ubuntu

Ajouter un des deux référentiels :
Ajouter le référentiel PPA stable : sudo add-apt-repository ppa:adiscon/v8-stable
Ajouter le référentiel PPA en développement : sudo add-apt-repository ppa:adiscon/v8-devel
sudo apt update
sudo apt-get install rsyslog

Installer la version 8.39.0 de Rsyslog depuis les dépôts officiels pour Debian

Installer la clé PGP dans votre système apt : sudo apt-key adv --recv-keys --keyserver keys.gnupg.net AEF0CF8E
Dépôt Adiscon pour v8-stable sur Debian (7) Wheezy.
Éditer votre /etc/apt/sources.list et ajouter ces lignes à la fin :
deb http://debian.adiscon.com/v8-stable wheezy/
deb-src http://debian.adiscon.com/v8-stable wheezy/
sudo apt update
sudo apt-get install rsyslog

Installer la version 8.39.0 de Rsyslog depuis les dépôts officiels pour Alpine

cd /etc/apk/keys
wget http://alpine.adiscon.com/rsyslog@lists.adiscon.com-5a55e598.rsa.pub
echo "http://alpine.adiscon.com/3.7/stable" >> /etc/apk/repositories
apk update
apk add rsyslog

Installer la version 8.39.0 de Rsyslog depuis les dépôts officiels pour RHEL et CentOS

cd /etc/yum.repos.d/
wget http://rpms.adiscon.com/v8-stable/rsyslog.repo
yum install rsyslog

Installer la version 8.39.0 de Rsyslog depuis les sources officielles

Code sources et support officiel sur Github : https://github.com/rsyslog/rsyslog/tree/master
Télécharger la source de Rsyslog 8.39.0 : https://www.rsyslog.com/downloads/download-v8-stable/
https://www.rsyslog.com/doc/v8-stable/installation/install_from_source.html

Installer la documentation de Rsyslog

Documentation installée, par défaut sur Debian, avec le service rsyslogd :
man rsyslogd
Installer la documentation complète de Rsyslog au format HTML :
sudo apt install rsyslog-doc
cat /usr/share/doc-base/rsyslog-doc
Document: rsyslog-doc
Title: Rsyslog Documentation
Author: Rainer Gerhards
Abstract: This documentation covers the configuration of rsyslog.
Section: System/Administration

Format: HTML
Index: /usr/share/doc/rsyslog-doc/html/manual.html
Files: /usr/share/doc/rsyslog-doc/html/*.html

Installer rsyslog-mysql pour configurer la base de données MySQL qui va stocker les logs de syslog

Les bases MySQL, MariaDB, MongoDB ou PostgreSQL sont correctement supportées.
sudo apt install rsyslog-mysql
La configuration de rsyslog-mysql se fait automatiquement avec dbconfig-common.
Une base MySQL nommée Syslog contenant deux tables SystemEvents et SystemEventsProperties est créée.
Un utilisateur rsyslog@localhost est ajouté, il possède le contrôle total sur la base de données Syslog.
La configuration de la connexion à la base de données MySQL est disponible depuis le fichier /etc/rsyslog.d/mysql.conf.

Configurer le fichier de connexion mysql.conf

Éditer mysql.conf, le fichier de configuration de MySQL.
Permet de se connecter à la base de données Syslog pour stocker les logs de syslog.
sudo nano /etc/rsyslog.d/mysql.conf
Faire les modifications suivantes pour une version de serveur sous Mint Tara 19 ou Ubuntu 18.04 Lts.
Remarque : Il semble important d’utiliser les espaces de tabulation entre les entrées de la configuration.
# Charger le module et enregistrer tous les messages de syslog en base de données :
module (load="ommysql")
*.* action(type="ommysql" server="localhost" db="Syslog" uid="rsyslog" pwd="Password_BDD")
# Cette commande filtre le niveau d'alertes des messages a enregistrer en base de données :
*.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
#?# Syntaxe a vérifier pour un système Debian Strech 9 :
#?# $ModLoad ommysql
#?# *.* :ommysql:localhost,Syslog,Utilisateur_BDD,Password_BDD

Créer la base de données Syslog pour stocker les données de syslog avec Rsyslog et MySQL

Si le paquet rsyslog-mysql n'a pas été utilisé pour créer la base de données, la base de données peut être créée manuellement.

Première méthode

Créer la structure de base de données avec le script officiel pour stocker les messages de journalisation dans MySQL :
La définition du schéma de base de données donnée est disponible depuis le fichier createDB.sql depuis l’archive de Rsyslog 8.39.0.
Le chemin d'accès au fichier est ./rsyslog-8.39.0/plugins/ommysql/createDB.sql.
Lancer l'import de la base :
mysql -u rsyslog -D Syslog -p < ./rsyslog-8.39.0/plugins/ommysql/createDB.sql

Deuxième méthode

Se connecter à MySQL :
sudo bash
mysql -u root -p
Si besoin, renseigner le mot de passe de l'utilisateur pour la base de données. Continuer avec la touche entrée.
Créer la structure de base de données manuellement pour stocker les messages de journalisation dans MySQL :
CREATE DATABASE Syslog;

USE Syslog;

CREATE TABLE SystemEvents

(
ID int unsigned not null auto_increment primary key,
CustomerID bigint,
ReceivedAt datetime NULL,
DeviceReportedTime datetime NULL,
Facility smallint NULL,
Priority smallint NULL,
FromHost varchar(60) NULL,
Message text,
NTSeverity int NULL,
Importance int NULL,
EventSource varchar(60),
EventUser varchar(60) NULL,
EventCategory int NULL,
EventID int NULL,
EventBinaryData text NULL,
MaxAvailable int NULL,
CurrUsage int NULL,
MinUsage int NULL,
MaxUsage int NULL,
InfoUnitID int NULL ,
SysLogTag varchar(60),
EventLogType varchar(60),
GenericFileName VarChar(60),
SystemID int NULL
);

CREATE TABLE SystemEventsProperties

(
ID int unsigned not null auto_increment primary key,
SystemEventID int NULL ,
ParamName varchar(255) NULL ,
ParamValue text NULL
);

Créer un utilisateur rsyslog pour utiliser la base de données Syslog

Se connecter à MySQL en ligne de commande.
Le mot de passe est vide sur le système local, valider avec la touche entrée pour se connecter.
Il faudra sécuriser MySQL avec un mot de passe pour un système en production.
mysql -u root -p
Si l'utilisateur rsyslog n'existe pas encore, créer l'utilisateur rsyslog pour gérer la base de données.
CREATE USER 'rsyslog'@'localhost' IDENTIFIED BY 'Analyzer';
Donner les droits à l'utilisateur rsyslog.
GRANT ALL PRIVILEGES ON Syslog.* TO rsyslog@localhost IDENTIFIED BY 'Analyzer';
FLUSH PRIVILEGES;
exit;

Optimiser la base de données Syslog

La table MySQL SystemEvents peut se remplir rapidement et devenir très volumineuse.
Un script d’archivage placé dans une tâche Cron permettra d’éviter les mauvaises surprises.

Proposition script Cron 1

# L'archivage semble fonctionner correctement.
# Vérifier la suppression des données en base.
#!/bin/bash
# Archivage mensuel des logs de la base MySQL Syslog
RETENTION=180 # Durée de rétention des logs (en jours)
DESTDIR="/var/backups/syslog" # Répertoire de stockage des archives
ARCHIVE="syslog-$(date '+%Y-%m-%d-%Hh%M').gz"
# Paramètres MySQL
MYSQL_HOST="localhost"
MYSQL_DB="Syslog"
MYSQL_USER="rsyslog"
MYSQL_PASSWD="motdepasse"
# Archivage
sql="SELECT * FROM SystemEvents WHERE DATEDIFF(NOW(), DeviceReportedTime) > $RETENTION"
mysql -h $MYSQL_HOST -u $MYSQL_USER -p$MYSQL_PASSWD -e "$sql" -B -s $MYSQL_DB | gzip > $DESTDIR/$ARCHIVE
# Suppression des enregistrements MySQL
sql="DELETE FROM SystemEvents WHERE DATEDIFF(NOW(), DeviceReportedTime) > $RETENTION"
mysql -h $MYSQL_HOST -u $MYSQL_USER -p$MYSQL_PASSWD -e "$sql" -B -s $MYSQL_DB

Proposition script Cron 2

# Ce script efface les données de plus de deux jours qui sont stockées dans la base de données.
# Les informations texte des lignes echo ne se sont pas affichées dans le terminal lors de mes essais.
#!/bin/bash
# Purge des logs de la base MySQL Syslog
RETENTION=2 # Durée de rétention des logs (en jours)
# Initialisation variables
MYSQL_HOST="localhost"
MYSQL_DB="bddloganalyzer"
MYSQL_USER="Logs"
MYSQL_PASSWD="Analyzer"
TMP_LOG="/tmp/cron.log"

# Comptage des enregistrements à supprimer
sql="SELECT COUNT(*) FROM SystemEvents WHERE DATEDIFF(NOW(), DeviceReportedTime) > $RETENTION"
compteur='mysql -h $MYSQL_HOST -u $MYSQL_USER -p$MYSQL_PASSWD -e "$sql" -B -s $MYSQL_DB'
if [ "$compteur" = "0" ]; then
echo "(I) Il n'y a pas d'enregistrements plus vieux que $RETENTION jours" >> $TMP_LOG
else
echo "(I) Il y a $compteur enregistrements à supprimer" >> $TMP_LOG
# Suppression des enregistrements MySQL
sql="DELETE FROM SystemEvents WHERE DATEDIFF(NOW(), DeviceReportedTime) > $RETENTION"
mysql -h $MYSQL_HOST -u $MYSQL_USER -p$MYSQL_PASSWD -e "$sql" -B -s $MYSQL_DB
cr=$?
if [ $cr -gt 0 ]; then
  echo "(E) Erreur lors de la suppression des enregistrements. Code retour $cr" >> $TMP_LOG
else
  echo "(I) L'opération s'est déroulée correctement" >> $TMP_LOG
fi
fi

Utiliser InnoDB et des tables compressées

# Ce script n'a pas été testé.
# Pour utiliser InnoDB et des tables compressées :
ALTER TABLE SystemEvents
ENGINE=innodb DEFAULT CHARSET=latin1 row_format=COMPRESSED KEY_BLOCK_SIZE=4;

Indexer les champs qui serviront souvent dans les requêtes

# Ce script n'a pas été testé.
# Après quelques mois d’exploitation, les requêtes lancées depuis LogAnalyser peuvent devenir plus lentes, rendant l’outil pénible à utiliser.
# Avec la version du plugin MySQL de rsyslog (v 4.6.4) les index ne sont pas créés dans la table SystemEvents à l’installation.
# Quand les enregistrements se comptent en millions dans la table ce n'est plus adapté.
# La solution est d’indexer les champs qui serviront souvent dans les requêtes, par exemple, Facility, Priority, FromHost, SysLogTag et DeviceReportedTime.
ALTER TABLE `SystemEvents` ADD INDEX(`Facility`);
ALTER TABLE `SystemEvents` ADD INDEX(`Priority`);
ALTER TABLE `SystemEvents` ADD INDEX(`FromHost`);
ALTER TABLE `SystemEvents` ADD INDEX(`SysLogTag`);
ALTER TABLE `SystemEvents` ADD INDEX(`DeviceReportedTime`);

Vérifier que la table MySQL est bien alimentée avec les logs

# Créer une entrée de journal avec la commande suivante :
logger Fonctionne!
# Tester si il existe des enregistrements depuis le terminal avec la commande suivante :
mysql -u rsyslog -p -Bsr -e "SELECT Message FROM SystemEvents LIMIT 0,20" Syslog
# Tester si il existe des enregistrements depuis l'interface en ligne de commande de MySQL avec les commandes suivantes :
mysql -u root -p
# Saisir votre mot de passe utilisateur pour root ou appuyer directement sur entrée si le mot de passe est vide.
# Sélectionner la base de données Syslog sur laquelle la requête va être lancée.
mysql> use Syslog;
mysql> select * from SystemEvents limit 1;
# Cette commande fonctionne également et devrait être plus rapide en sélectionnant moins d'informations.
# mysql> select ReceivedAt,Message from SystemEvents;

Configurer l'écoute du réseau dans la configuration de Rsyslog

# Paramétrer le fichier de configuration de Rsyslog.
sudo nano /etc/rsyslog.conf
# Charger ce module semble indispensable pour réceptionner les données syslog en local depuis le Disque ou la base de données MySQL.
# La commande utilisée sous Mint Tara 19 ou Ubuntu 18.04 Lts :
module(load="imuxsock")
# Charger le module pour les anciennes systèmes :
# $ModLoad imuxsock
# Les informations de syslog peuvent être reçues via UDP ou TCP.
# Les instructions de configuration sont un peu différentes entre UDP et TCP.
# Dans la plupart des cas, UDP Syslog devrait être entièrement suffisant et performant.
# Si la mémoire tampon système pour UDP est saturée lors d'un enchaînement de messages volumineux, les messages seront perdus.
# Ce n'est pas le cas avec TCP syslog car l'expéditeur et le destinataire communiquent à propos de l'arrivée des paquets réseau.
# Certains périphériques, tels que les routeurs, ne peuvent pas envoyer TCP Syslog par conception. Dans ce cas, il faut tout de même utiliser UDP.
# TCP syslog est adapté pour les environnements dans lesquels les messages de journal ne doivent pas être perdus ou qui doivent assurer la conformité PCI, par exemple, les banques.
# Préférer l'utilisation du protocole RELP :
# Sur la (non) fiabilité de plain TCP syslog, utiliser le protocole RELP semblerait être encore plus pertinent.
# On the (un)reliability of plain TCP syslog : https://rainer.gerhards.net/2008/04/on-unreliability-of-plain-tcp-syslog.html
# Activer la réception des logs distants :
# Le syslog UDP est reçu sur le port 514 par défaut.
# Le syslog TCP nécessite un port différent car le service RPC utilise souvent ce port également.
# Syntaxe pour Debian. ( A vérifier ! )
# Fournit une réception UDP syslog :
## $ModLoad imudp
## $UDPServerRun 514
# Fournit une réception TCP syslog :
## $ModLoad imtcp
## $InputTCPServerRun 1514
# Syntaxe pour Ubuntu 16.04 LTS / Ubuntu 18.04 LTS et Mint Tara 19.
# Fournit une réception UDP syslog :
module(load="imudp")
input(type="imudp" port="514") 
# Fournit une réception TCP syslog :
module(load="imtcp")
input(type="imtcp" port="1514")
# Liste des sous réseaux autorisés à se connecter :
# $AllowedSender UDP, 127.0.0.1, 192.168.1.0/24
# $AllowedSender TCP, 127.0.0.1, 192.168.1.0/24
# Le serveur est maintenant configuré pour enregistrer les logs dans la base de données.
# Il écoute sur le port 514 et 1514 les messages entrant.

Exemple de configuration pour Adiscon Rsyslog avec LogAnalyzer

#  /etc/rsyslog.conf    Fichier de configuration pour Rsyslog.
$EscapeControlCharactersOnReceive off

#### MODULES ####
# $ModLoad imuxsock
module(load="imuxsock")

# UDP syslog reception
# module(load="imudp")
# input(type="imudp" port="1514")
# ou
# $Modload imudp
# $UDPServerRun 1514

# TCP syslog reception
# module(load="imtcp")
# input(type="imtcp" port="1514")
# ou
# $ModLoad imtcp
# $InputTCPServerRun 1514

# Support de connexion Kernel et activation des non-kernel klog messages
module(load="imklog" permitnonkernelfacility="on")

# Règles de connexion par défaut : /etc/rsyslog.d/50-default.conf
auth,authpriv.*                 /var/log/auth.log
*.*;auth,authpriv.none          /var/log/syslog
syslog.*                        /var/log/rsyslog.log
cron.*                          /var/log/cron.log
kern.*                          /var/log/kern.log
#daemon.*                       /var/log/daemon.log
#lpr.*                          /var/log/lpr.log
#user.*                         /var/log/user.log
#mail.*                         /var/log/mail.log
#mail.info                      /var/log/mail.info
#mail.warn                      /var/log/mail.warn
#mail.err                       /var/log/mail.err
#news.crit                      /var/log/news/news.crit
#news.err                       /var/log/news/news.err
#news.notice                    /var/log/news/news.notice

# Propriétaires du fichier cron.log passé a syslog:logadmin

# Ajouter une ligne pour faire gérer d'autres logs par Rsyslog (Apache2, Mysql, ...) :
syslog.*                        /var/log/apache2/error.log

#### GLOBAL DIRECTIVES ####
# Semble être obsolète :
# $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat

# Filtre les messages dupliqués :
$RepeatedMsgReduction on

$WorkDirectory /var/spool/rsyslog

# Include all config files in /etc/rsyslog.d/
# $IncludeConfig /etc/rsyslog.d/*.conf
$IncludeConfig /etc/rsyslog.d/mysql.conf

Exemple de configuration pour Adiscon Rsyslog sans LogAnalyzer

# La configuration suivante est fonctionnelle sur un serveur VPS mais elle n'a pas été testé avec Adiscon LogAnalyzer.
# Dans cet exemple, le fichier messages et syslog resteront vide, puisque les logs seront filtrés une seule fois vers d'autres fichiers.
# Éditer la configuration de Rsyslog :
sudo nano /etc/rsyslog.conf
#### Règles pour configurer Rsyslog ####
#################################################################
# Déboguer Rsyslog :
# Observer en détail le nom des programmes qui écrivent dans les logs et leurs entrées.
# *.* /var/log/msgfields.log;RSYSLOG_DebugFormat
# /etc/rsyslog.conf configuration file for rsyslog

#### MODULES ####
module(load="imuxsock") # provides support for local system logging
module(load="imklog")   # provides kernel logging support
#module(load="immark")  # provides --MARK-- message capability

# provides UDP syslog reception
#module(load="imudp")
#input(type="imudp" port="514")

# provides TCP syslog reception
#module(load="imtcp")
#input(type="imtcp" port="514")

#### GLOBAL DIRECTIVES ####
# Use traditional timestamp format.
# To enable high precision timestamps, comment out the following line.
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat

# Set the default permissions for all log files.
$FileOwner root
$FileGroup adm
$FileCreateMode 0640
$DirCreateMode 0755
$Umask 0022

# Where to place spool and state files
$WorkDirectory /var/spool/rsyslog

# Include all config files in /etc/rsyslog.d/
$IncludeConfig /etc/rsyslog.d/*.conf

#################################################################
# Certains fichiers ne sont pas des fichiers utilisés par défaut.
# Vérifier dans logrotate qu'ils soient pris en considération.
# Utiliser de petits fichiers pour faciliter l'écriture.

# Journaliser les messages du kernel contenant DROP IN correspondant à iptables.
:msg,contains,"INPUT:DROP:" /var/log/iptables.log
# Ne plus journaliser ses informations dans aucun autre fichier avec "& stop"
& stop

# Journaliser les messages du kernel avec le mot clé warn ou error :
:msg,contains,"warn" /var/log/kern.warn.log
& stop
:msg,contains,"error" /var/log/kern.warn.log
& stop

# Les logs en erreur pour le kernel :
kern.info				/var/log/kern.info.log
& stop

# Les autres logs du kernel :
kern.*					/var/log/kern.log

# Les logs de connexion et les tentatives de connexion :
auth,authpriv.*				/var/log/auth.log
& stop

# Les logs des tâches cron :
cron.*					/var/log/cron.log
& stop

# Les logs des daemon :
daemon.*				/var/log/daemon.log
& stop

# Les logs lpr concernent le service d'impression :
# lpr.*                                 /var/log/lpr.log
# & stop

# Les logs des utilisateurs du système :
user.*					/var/log/user.log
& stop

# Le fichier mail.log n'est pas utilisé par Exim ni par PHP.
# Ce fichier restera très certainement vide si uniquement Exim et PHP sont utilisés.
# Dovecot, Postfix, Sendmail, écrivent dans ce fichier.
mail.*                                                  /var/log/mail.log
# Je n'arrive pas à loguer le contenu sur le nom du programme Exim.
# Je contourne avec un filtre sur le contenu du message "queued as".
# Ne fonctionne pas non plus pour loguer les logs de Exim.
# :msg, contains, "queued as" /var/log/mailexim.log
# Pareil pour les logs de PHP envoyés avec mail() :
# :msg, contains, "mail() on" /var/log/mailphp.log

# Activer les logs des mails dans 4 fichiers différents :
# mail.info                                             /var/log/mail.info
# mail.warn                                             /var/log/mail.warn
# mail.err                                              /var/log/mail.err
# mail.notice                                           /var/log/mail.notice

# Suite au filtrage, je ne journalise presque plus rien dans messages et syslog :
*.=info;*.=notice;*.=warn;              /var/log/messages
& stop
# Le reste sera journalisé dans /var/log/syslog :
*.*;                                    /var/log/syslog
#################################################################

# Tout enregistrer pour le mode debug. 
*.=debug;\
        auth,authpriv.none;\
        news.none;mail.none     /var/log/debug

# Emergencies are sent to everybody logged in.
*.emerg				:omusrmsg:*
#################################################################

En savoir plus sur les actions de Rsyslog avec RSYSLOG_DebugFormat

# Déboguer Rsyslog :
# Observer en détail le nom des programmes qui écrivent dans les logs et leurs entrées.
# *.* /var/log/msgfields.log;RSYSLOG_DebugFormat

Filtrer par mot clé

# Utiliser un mot clé pour loguer une chaîne, ou, la négation pour ne pas loguer une chaîne contenant le mot clé :
:msg, contains, "error" /var/log/fichier.log
:msg, !contains, "error" /var/log/fichier.log

Exim et Rsyslog

# Le fichier mail.log n'est pas utilisé par Exim ni par PHP.
# Ce fichier restera très certainement vide si uniquement Exim et PHP sont utilisés.
# Dovecot, Postfix, Sendmail, écrivent dans ce fichier.
mail.*                                                  /var/log/mail.log
# Une issue est ouverte sur le Github de Rsyslog pour savoir si Rsyslog peut loguer les paquets de Exim : https://github.com/rsyslog/rsyslog/issues/4303
# Tester de loguer les paquets de Exim :
# Exemple de filtre de la forme facility.severity :
local4.info /var/log/exim4/exim_info.log

# Exemple de filtre basé sur les propriétés :
:programname, contains, "exim" /var/log/exim4/exim_test0.log

# Exemple de filtre basé sur les expressions.
# Les variables sont les mêmes que précédemment :
if $programname == 'exim' then /var/log/exim4/exim_test1.log
# Malgré les trois essais précédents, je n'arrive toujours pas à loguer les logs de Exim avec Rsyslog.
# Au lieu du mot clé Exim, je contourne le problème en utilisant le mot clé "queued as" qui se retrouve dans chaque log de Exim, dans le fichier /var/log/exim/mainlog
# Je n'arrive pas à loguer le contenu sur le nom du programme Exim.
# Je tente de contourne avec un filtre sur le contenu du message "queued as" mais ça ne fonctionnera pas non plus !
:msg, contains, "queued as" /var/log/mail.log
# La facility est LOG_MAIL et la variable programme a pour valeur exim.
# Les contenus des logs mainlog, rejectlog et paniclog se voient attribuer les niveaux respectifs info, notice, alert.
Source : https://www.cadoles.com/blog/gestion-des-logs-en-mode-conteneurs

Utiliser logrotate pour archiver de nouveaux fichiers de journalisation

# Utiliser logrotate pour archiver régulièrement le contenu de /var/log/iptables.log
Exemple pour la rotation d'un nouveau fichier de log iptables.log.

Redémarrer Rsyslog pour appliquer la nouvelle configuration

# Recharger Rsyslog pour appliquer les changements de configurations :
sudo service rsyslog reload
# Redémarrer le démon Rsyslog pour appliquer la nouvelle configuration :
# Anciennes commandes :
sudo service rsyslog restart
sudo /etc/init.d/rsyslog restart
# Nouvelle commande à privilégier :
sudo systemctl restart rsyslog
sudo systemctl restart rsyslog.service

Erreurs rencontrées dans les logs de syslog

Résoudre une erreur action qui boucle plusieurs fois

Cette erreur s'affiche plusieurs fois : action 'action-1-builtin:omfile' resumed (module 'builtin:omfile') [v8.39.0 try http://www.rsyslog.com [More Information] /e/2359 ]
Des messages d'actions à répétition signifient souvent que la configuration n'est pas correcte. Par exemple, un module inutilisé est peut être chargé.
# Je vérifie que les fichiers de logs existent bien, et, ont les bons droits de lecture.
sudo touch cron.log
sudo chown root:root /var/log/cron.log
sudo chmod 666 /var/log/cron.log
# Les propriétaires pour le fichier auth.log sont modifiés de root:logadmin pour syslog:logadmin.
sudo chown syslog:logadmin auth.log
# Si les lignes qui s'affichent sont toujours présentes malgré les changements de droits précédents, tenter le changer de droits récursif du dossier /var/log/.
# Éviter cette commande de préférence, donner des droits chmod aussi élevés ne devrait pas être nécessaire.
sudo chmod 775 /var/log/
# Pour le moment, cette erreur boucle encore, notamment, au démarrage de la machine virtuelle.
# J'ai tout de même pu diminuer le nombre d'alertes en réduisant la configuration au minimum nécessaire.
Une issue Github a été ouverte : https://github.com/rsyslog/rsyslog/issues/3287

Résoudre la NOTICE Syslog : couldn't access control socket

AUTH - NOTICE - MyNameOS - gnome-keyring-daemon - Syslog - couldn't access control socket: /run/user/1000/keyring/control: Aucun fichier ...
Créer un fichier gnome-keyring-daemon.desktop dans le dossier ~/.config/autostart/
Ajouter le code suivant :
[Desktop Entry]
Type=Application
Exec=/usr/bin/gnome-keyring-daemon
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
Name=Gnome Keyring Daemon
Comment=Load gnome keyring daemon

Résoudre un daemon warning depuis une machine virtuelle VirtualBox Mint Tara 19

# Le message d'erreur :
Using degraded feature set (UDP) for DNS server 10.0.2.3.
# Consulter :
systemd-resolve --status
# Les dernières lignes affichent :
Link 2 (enp0s3)
     Current Scopes: DNS
      LLMNR setting: yes
MulticastDNS setting: no
     DNSSEC setting: no
   DNSSEC supported: no
        DNS Servers: 10.0.2.3
         DNS Domain: home
# Notes :
DNS Orange = 91.121.161.184 91.121.164.227 2001:41d0:1:e2b8::1 2001:41d0:1:e5e3::1
DNS Google = 8.8.8.8 8.8.4.4 2001:4860:4860::8888 2001:4860:4860::8844
Modifier le nameserver : sudo nano resolv.conf
# Laisser ou commenter :
# nameserver 127.0.0.53
# Ajouter :
nameserver 10.0.2.3
nameserver 127.0.0.1
nameserver ::1
# Par défaut :
search home
Consulter les logs.
L'alerte ne semble plus être affichée et résolue de façon temporaire.
Le redémarrage de la machine fera disparaître cette configuration.
Le message d'erreur apparaît à nouveau.
Pour une configuration permanente, cliquer droit sur network-manager et modifier la configuration du réseau.
Ma connexion sur la machine virtuelle est considérée comme filaire. Ajouter le DNS secondaire 10.0.2.3.
Le message ne semble plus s'afficher une fois la machine allumée.
Le message d'erreur semble toujours s'afficher une fois par démarrage.

Centraliser les logs sur un serveur de logs avec Rsyslog

Rsyslog en tant que serveur

# Compléter la configuration proposée précédemment pour utiliser Rsyslog comme serveur de logs centralisé.
# Je n'ai pas testé cette possibilité.
# Le fichier de configuration de Rsyslog, serveur ou client, se trouve dans /etc/rsyslog.conf.
# Créer un fichier modèle dans lequel nous créerons un nouveau format de journal personnalisé depuis /etc/rsyslog.d/tmpl.conf
# Autoriser le port par défaut de Rsyslog UDP 514 sur votre pare-feu.
# Autoriser le port modifié de Rsyslog TCP 1514 sur votre pare-feu.
# Les commandes suivantes ouvriront ce port via UFW :
sudo ufw allow 514/udp
sudo ufw allow 1514/tcp
# Redémarrer le service UFW pour prendre en compte les modifications :
sudo ufw reload
# Recharger le service Rsyslog en utilisant la commande suivante :
systemctl restart rsyslog
# Dans le cas ou le serveur de logs se trouve derrière un routeur :
# Penser a activer les règles NAT adaptées aux ports sélectionnés dans la configuration.
# Rediriger le trafic UDP 514->514 vers le serveur de logs.
# Rediriger le trafic TCP 1514->1514 vers le serveur de logs.

Rsyslog en tant que client

# Le fichier de configuration de Rsyslog, client ou serveur, se trouve dans /etc/rsyslog.conf.
Ko.png Rsyslog en tant que serveur : https://phelepjeremy.wordpress.com/2017/06/20/configuration-dun-serveur-syslog-ng/

Ajouter de nouveaux clients Rsyslog

# Configurer les machines clients pour qu'elles puissent envoyer leurs logs à la machine qui aura le rôle de serveur de logs.
# Fonctionne avec syslog ou syslog-ng, avec un paramétrage différent pour syslog-ng.
# Cette fonctionnalité n'a pas été testée lors de la rédaction de ce tutoriel.
# Étape 1 : Installer le paquet rsyslog sur chaque client :
apt-get install rsyslog
# Étape 2 : Créer un répertoire de travail :
mkdir /var/spool/rsyslog
# Étape 3 : Ouvrir le fichier de configuration de Rsyslog :
nano /etc/rsyslog.conf
# Modifier la configuration qui permet l'envoi des logs au serveur de logs :
# Emplacement par défaut pour les fichiers de travail (spool).
$WorkDirectory /var/spool/rsyslog
# Commencer la règle de transfert 1 :
$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.
# Commencer la règle de transfert 2 :
$ActionQueueType LinkedList # Exécuter le traitement de façon asynchrone.
$ActionQueueFileName srvrfwd2 # 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.
# Étape 4 : Redémarrer le service RSyslog
sudo /etc/init.d/rsyslog restart
# Consigner le message en erreur standard (écran), ainsi que le journal système à l’aide de la commande suivante :
logger -s " Ceci est un client Rsyslog "
# Aller sur le serveur Rsyslog sous le répertoire /var/log/client_logs.
# Un nouveau dossier nommé avec le nom d'hôte de votre client Rsyslog devrait être disponible.
/var/log/client_logs/Client01/

Rsyslog et SSL

Le cryptage SSL pour l'échange entre Syslog et Rsyslog.
Encrypting Syslog Traffic with TLS (SSL) [short version] : https://www.rsyslog.com/doc/v8-stable/tutorials/tls.html
Encrypting Syslog Traffic with TLS (SSL) : https://www.rsyslog.com/doc/v8-stable/tutorials/tls_cert_summary.html

Ajouter des plugins pour Rsyslog

apt-cache search rsyslog
rsyslog - démon fiable de journalisation système et noyau
gosa-plugin-rsyslog - greffon rsyslog pour GOsa²
rsyslog-gssapi - Authentification GSSAPI et prise en charge du chiffrement pour rsyslog
rsyslog-mysql - Module de sortie MySQL pour rsyslog
rsyslog-pgsql - Module de sortie PostgreSQL pour rsyslog
fusiondirectory-plugin-rsyslog - rsyslog plugin for FusionDirectory
librelp-dev - Reliable Event Logging Protocol (RELP) library - development files
librelp0 - Reliable Event Logging Protocol (RELP) library
rsyslog-doc - documentation for rsyslog
rsyslog-elasticsearch - Elasticsearch output plugin for rsyslog
rsyslog-gnutls - TLS protocol support for rsyslog
rsyslog-relp - RELP protocol support for rsyslog
uwsgi-core - fast, self-healing application container server (core)

Déboguer Rsyslogd et obtenir ses logs

Méthode DebugFile et DebugLevel

# Ouvrir le fichier de configuration de Rsyslog :
sudo nano /etc/rsyslog.conf
# Ajouter les deux lignes suivantes :
$DebugFile /home/USER/Bureau/debug.txt
$DebugLevel 2
# <0|1|2> - Définir le niveau de débogage :
# 0 correspond au mode débogage désactivé.
# 1 au mode débogage à la demande activé mais le mode débogage désactivé.
# 2 correspond au mode débogage complet.
# Redémarrer Rsyslog :
sudo service rsyslog restart
Documentation : Rsyslog Debug Support : https://www.rsyslog.com/doc/v8-stable/troubleshooting/debug.html
Documentation : Debugging Rsyslogd : https://web.archive.org/web/20191212214536/https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/system_administrators_guide/s1-debugging_rsyslog

Les niveaux d'erreurs avec syslog

# Les fonctionnalités, facilities, sont des catégories de log qui correspondent à un type de service.
# Les facilities permettent principalement de filtrer les logs pour les ranger.
Valeur         	Facility 	Description
1 	        user    	user-level messages
2 	        mail 	        mail system
3 	        deamon  	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 	clock daemon
16 - 23 	local0/local7   locally used facilities (local0-local7)
# Les sévérités, priorities, sont les 8 niveaux de gravité des erreurs de log.
# Plus le niveau de priority est proche de 0, plus l'erreur est grave.
# Plus le niveau de sévérité est haut, proche de 7, plus la machine enverra de log.
Valeur 	Priority 	Description
0      	Emergency 	system is unusable
1      	Alert   	must be taken immediately
2      	Critical 	critical conditions
3      	Error   	error conditions
4      	Warning 	warning conditions
5      	Notice  	normal but significant condition
6      	Informational 	informational messages
7      	Debug   	debug-level messages
Logs-severities.png
# Noter que syslog a été remplacé par journald sur la grande majorité des systèmes d'exploitation Linux.

Ajouter une interface Web avec LogAnalyzer

# Maintenant que Rsyslog est installé et correctement configuré, ajouter une interface Web pour visualiser les logs de façon graphique, comme par exemple, l'interface Web Adiscon LogAnalyzer.

Bibliographie

Sites officiels

Ok.png Site officiel de Rsyslog : https://www.rsyslog.com
Ok.png Le dépôt officiel de Rsyslog sur Github : https://github.com/rsyslog/rsyslog
Ok.png Documentation officielle générale : https://www.rsyslog.com/doc/master/index.html
Ok.png Documentation officielle Version 8 stable : https://www.rsyslog.com/doc/v8-stable/
Ok.png Documentation de configuration Version 8 stable : https://www.rsyslog.com/doc/v8-stable/configuration/index.html
Ok.png Des exemples de configuration Version 8 stable : https://www.rsyslog.com/doc/v8-stable/configuration/examples.html

Arguments en faveur de Rsyslog

Ok.png Changing the default syslog daemon for Lenny : https://lists.debian.org/debian-devel/2008/01/thrd3.html#01002
Ok.png Changing the default syslog daemon for Lenny : https://lists.debian.org/debian-devel/2008/01/msg01002.html
Ok.png Status of default syslog daemon for Lenny : https://lists.debian.org/debian-release/2008/07/msg00117.html

Rsyslog et Loganalyzer

Ok.png Ce contenu de recherche effectué par Visionduweb sur Rsyslog est partagé sur le wiki officiel de Debian : https://wiki.debian.org/Rsyslog -> https://wiki.debian.org/fr/Rsyslog
Ok.png Gestion des logs avec Rsylog, Mysql et Loganalyzer : https://web.archive.org/web/20161211103924/https://journaldunadminlinux.fr/tutoriel-consolidation-des-logs-avec-rsylog-mysql-et-loganalyzer
Ok.png How to Setup LogAnalyzer with Rsyslog On Ubuntu 16.04 LTS / Ubuntu 18.04 LTS : http://yallalabs.com/linux/how-to-setup-loganalyzer-with-rsyslog-on-ubuntu-16-04-lts-ubuntu-18-04-lts/
Ok.png How to Setup A Centralized Log Server Using Rsyslog on Ubuntu 16.04 LTS : http://yallalabs.com/linux/how-to-setup-a-centralized-log-server-using-rsyslog-on-ubuntu-16-04-lts/
Ok.png Consolidation des logs avec rsyslog, MySQL et LogAnalyser : http://tavie.onsenfout.com/2011/07/05/consolidation-des-logs-avec-rsyslog-mysql-et-loganalyser/
Ok.png How to install Rsyslog with loganalyzer in Ubuntu : http://techies-world.com/how-to-install-rsyslog-with-loganalyzer-in-ubuntu/
Ok.png How to Setup LogAnalyzer with Rsyslog and MySQL : https://tecadmin.net/setup-loganalyzer-with-rsyslog-and-mysql/
Ok.png Optimisations LogAnalyser : http://tavie.onsenfout.com/2012/03/08/optimisations-loganalyser/
Ok.png Using the syslog receiver module : https://www.rsyslog.com/using-the-syslog-receiver-module/
Ok.png Gérer ses logs avec rsyslog sous Linux : https://www.tutos.eu/7193
Ok-ko.png Rsyslog propose quatre différents types de conditions de filtrage : https://www.rsyslog.com/doc/v8-stable/configuration/filters.html
Ko.png https://www.youtube.com/watch?v=z1313LUe3xQ
Ko.png Rsyslog en russe : http://www.k-max.name/linux/rsyslog-na-debian-nastrojka-servera/
Ko.png rsyslogd - syslogd fiable et étendu : https://manpages.debian.org/stretch/rsyslog/rsyslogd.8.en.html
Ko.png Install a Centralized Log Server with Rsyslog in Debian 9 : https://www.howtoforge.com/tutorial/rsyslog-centralized-log-server-in-debian-9/
Ko.png How to Setup Centralized Logging Server using Rsyslog : https://tecadmin.net/setup-centralized-logging-server-using-rsyslogd/

Configuration Syslog-ng

Configuration Syslog-ng : https://www.supinfo.com/articles/single/2497-solution-journalisation-rsyslog-syslog-ng

NAVIGATION

PARTICIPER ET PARTAGER

Bienvenue sur le wiki de Vision du Web.
De nombreuses pages sont partagées sur ce wiki.
Créer un compte utilisateur pour participer sur le wiki.
Les pages présentées sur le wiki évoluent tous les jours.
Certaines recherches sont peu abouties et incluent des erreurs.
Utiliser la recherche interne du wiki pour trouver votre contenu.
La page de discussion de Visionduweb vous permet de poser une question.
Utiliser la recherche interne du site pour chercher dans tout le contenu.
Améliorer le contenu des pages avec vos retours depuis l'onglet discussion.
Ce contenu ne doit pas servir à nuire à autrui ou à un système informatique.
Protéger votre système Linux ou Windows avec cette page dédiée à la sécurité.

SOUTENIR CE WIKI

Soutenir le wiki avec un don en monnaie numérique :
AEON - Bitcoins - Bitcoins Cash - Bitcoins Gold - Bitcore - Blackcoins - Basic Attention Token - Bytecoins - Clams - Dash - Monero - Dogecoins - Ğ1 - Ethereum - Ethereum Classique - Litecoins - Potcoins - Solarcoins - Zcash

OBTENIR DE LA MONNAIE NUMERIQUE

Obtenir gratuitement de la monnaie numérique :
Gagner des Altcoins - Miner des Altcoins.