Gérer ses logs avec rsyslog sous Linux

Paramétrer différents fichiers de logs avec rsyslog

De base, si rsyslog est installé, vous devriez pouvoir voir son fichier de configuration avec la commande ci-dessous :

cat /etc/rsyslog.conf
Lien vers le fichier : cliquez ici Copier le code

On y voit comment les messages sont dispatchés dans différents fichiers. Exemple :

# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none                /var/log/messages

# The authpriv file has restricted access.
authpriv.*                                              /var/log/secure

# Log all the mail messages in one place.
mail.*                                                  -/var/log/maillog
Lien vers le fichier : cliquez ici Copier le code

Typiquement on peut en déduire que les logs courants peuvent se voir en temps réel avec

tail -f /var/log/messages
Lien vers le fichier : cliquez ici Copier le code

On y voit que le service prend en compte tous les fichiers .conf qui sont dans /etc/rsyslog.d/
via cette commande

$IncludeConfig /etc/rsyslog.d/*.conf
Lien vers le fichier : cliquez ici Copier le code

De même le service de syslog devrait répondre à cette commande :

systemctl status rsyslog.service
Lien vers le fichier : cliquez ici Copier le code

Exemple de retour positif :

On a vu plus haut que de base les logs courants sont dans /var/log/messages ou /var/log/syslog suivant les distribution.
Pour l'exemple on va prendre le cas un peu complexe d'iptables qui déverse de base ses logs dans /var/log/messages ou /var/log/syslog.

Le but ici est de les mettre dans un fichier à part. Pour cela il faut pouvoir les isoler facilement, aussi dans les règles FW que vous allez créer pour iptables on va expressément demander à ajouter le préfix 'iptables:'
Cela se fait en créant une 'chain' nommée ici 'LOGACCEPT'

Exemple de création

#Création d'une new user-defined chain pour pouvoir autoriser ET logger un flux avec le préfixe IPTABLES
iptables -N LOGACCEPT
iptables -A LOGACCEPT -j LOG --log-prefix 'iptables:' -m limit --limit 2/min
iptables -A LOGACCEPT -j ACCEPT
Lien vers le fichier : cliquez ici Copier le code

Ensuite, vous aller utiliser cette chain dans vos règles.

Exemple :

iptables -t filter -A INPUT -p tcp --dport 22 -j LOGACCEPT
Lien vers le fichier : cliquez ici Copier le code

Au niveau de rsyslog, on va maintenant créer un fichier de configuration pour iptables avec la commande

sudo nano /etc/rsyslog.d/iptables.conf
Lien vers le fichier : cliquez ici Copier le code

Placez y ces instructions et enregistrez le fichier

:msg, contains, "iptables:" -/var/log/iptables.log
& ~
Lien vers le fichier : cliquez ici Copier le code

La commande précédente demande à enregistrer tous les messages qui contiennent "iptables:" dans un fichier /var/log/iptables.log

La seconde ligne signifie qu'on arrête le traitement pour ce message, cad qu'il ne sera pas écrit dans un autre fichier de log.
A la place de & ~ on aurait aussi pu avoir l'instruction & stop

Rechargez la configuration de rsyslog en redémarrant le service avec

systemctl restart rsyslog.service
Lien vers le fichier : cliquez ici Copier le code

Je n'ai pas vérifié la commande ci-dessous mais elle pourrait permettre d'éviter de relancer le service rsyslog :

/etc/init.d/rsyslog force-reload
Lien vers le fichier : cliquez ici Copier le code

Maintenant consultez iptables.log avec la commande

tail -f /var/log/iptables.log
Lien vers le fichier : cliquez ici Copier le code

En note je me suis mis de côté le contenu ci-dessous trouvé sur https://blog.stalkr.net/2009/10/logging-iptables-messages-with-rsyslog.html

Il pourrait permettre d'être plus précis pour ne prendre en compte que les lignes de log du type "xxx.xxx.xxx.xxx iptables:" où xxx.xxx.xxx.xxx, vous l'aurez compris, est une adresse ip

:msg, regex, "^\[ *[0-9]*\.[0-9]*\] iptables: " -/var/log/iptables.log
& ~
Lien vers le fichier : cliquez ici Copier le code

Sachant que par défaut les logs se regardent avec :

tail -f /var/log/syslog
#ou
tail -f /var/log/messages
Lien vers le fichier : cliquez ici Copier le code

Pour archiver régulièrement le contenu de /var/log/iptables.log je vous invite à regarder l'article sur logrotate indiqué plus bas.

De même vous verrez aussi des exemples concernant haproxy pour isoler ses logs comme avec iptables.

Publicité