Skip to Content

Configuration de Syslogd (Gestion des logs sous Linux)

But de ce document

Ce document me sert de mémo pour Configurer Syslogd sur un système Linux (Testé sur Mandrake et Debian).

Je rappelle que syslogd est un démon permettant de rediriger vers des fichiers ou des terminaux les messages envoyés par d’autres démons, services ou par le noyau Linux.

Par exemple les messages d’informations ou d’erreurs émis par le système de messagerie (ex : Postfix), sont enregistrés grâce à syslogd dans le fichier « /var/log/mail.info ».

Il est également possible avec syslogd de centraliser sur un seul serveur les logs en provenance de routeurs ou d’autres serveurs sous Linux ou sous Windows.

Configuration de /etc/syslog.conf

Le fichier « /etc/syslog.conf » est le principal fichier de configuration du démon «  syslogd  ».

Syntaxe générale

Chaque ligne de ce fichier indique le type du message (appelé Service ou Facility en anglais), le niveau de gravité (appelé Priorité) et sa Destination (fichier, terminal,...).

Par exemple, la ligne suivante permet d’envoyer les messages d’information des programmes de messagerie dans le fichier « mail.info » :

mail.info        /var/log/mail.info

Chaque ligne est de la forme :

Service.Priorité       Destination

  •  Service correspond au type de programme (Démon, Noyau,...) et doit être l’un de ces mots-clés : auth, authpriv, cron, daemon, kern, lpr, mail, mark, news, security (identique à auth), syslog, user, uucp et local0 à local7.
  •  Priorité représente le niveau de gravité du message et doit être l’un de ces mots clés : debug, info, notice, warning, warn (identique à warning), err, error (identique à err), crit, alert, emerg, panic (identique à emerg). ATTENTION : En indiquant un niveau, syslog enverra les messages de ce niveau et tous les messages des niveaux plus importants. Donc en mettant « debug », syslog enverra tous les messages (de debug à panic).
  •  Destination représente la destination du message est peut être un chemin vers un fichier texte (ex : /var/log/mail.info) ou le nom d’une console pour envoyer les messages à l’écran (ex : /dev/tty8) ou un autre serveur (ex : @MonAutreServeur).

    Remarque  : Chaque programme détermine les «  Services  » et les «  Priorités  » qu’il utilise et il est rarement possible de les modifier. Par exemple, les programmes Postfix et Fetchmail utilisent la Service « mail »

    Le signe «  ; » pour séparer plusieurs « Services »

    Il est possible de mettre plusieurs services pour une même destination en utilisant le «  ; » :

    Service1.Priorité1; Service2.Priorité2     Destination

    Le signe « , » pour plusieurs « Services » avec une même « Priorité »

    Il est possible d’indiquer plusieurs « Services » pour le même niveau de « Priorité » avec le signe « , ». La ligne suivante envoie dans le fichier « mail_news » les messages en provenance des « Services » « mail » et « new » dont la « Priorité » est supérieure ou égale à « info ». :

    mail,news.info  /var/log/mail_news

    Le signe « = » pour ne traiter que la « Priorité » indiquée

    Il est possible de n’envoyer que les messages d’une seule « Priorité » (sans les « Priorités » de niveaux supérieures) avec le singe « = ». Exemple :

    mail.=err  /var/log/mail.err

    Le signe « * » pour traiter toutes les « Services »

    La commande suivante permet d’envoyer les messages d’erreurs de toutes les « Services » dans le fichier « error »

    *.error  /var/log/error

    Le signe « * » pour traiter toutes les « Priorités »

    Le signe « * » permet d’indiquer que l’on souhaite toutes les « Priorités » (Le résultat est le même qu’en mettant « debug », mais c’est plus lisible). Exemple :

    mail.*  /var/log/mail

    Le signe « * » pour envoyer des messages sur toutes les consoles ouvertes

    La ligne suivante, permet d’envoyer tous les messages d’erreurs sur toutes les consoles ouvertes grâce au signe « * » placé en destination à la fin de la ligne :

    *.alert  *

    Le signe «  ! » pour exclure les niveaux supérieurs ou égaux à la « Priorité » indiquée

    Le signe «  ! » permet d’indiquer que l’on souhaite exclure le niveaux indiqué et tous les niveaux supérieurs à celui indiqué. La ligne suivante, permet d’envoyer dans le fichier « mail » tous les messages sauf ceux supérieurs ou égaux à la « Priorité » « warn » :

    mail.*;mail.!warn  /var/log/mail

    La ligne suivante permet d’envoyer dans le fichier « mail » tous les messages supérieurs ou égaux à la « Priorité » « notice » et inférieure à la « Priorité » « crit » :

    mail.notice;mail.!crit  /var/log/mail

    Le signe « - » pour améliorer les performances en écriture

    Le signe « - » est utilisé devant les chemins de fichiers les moins critiques pour améliorer les performances en écriture au risque de perdre des données en cas de crash du système (pas de synchronisation des fichiers). Cette ligne enregistre tous les messages de la « Service » « mail » dans le fichier « mail » :

    mail.*  -/var/log/mail

    Le signe « \ » pour écrire une instruction sur plusieurs lignes

    La commande suivante écrite sur deux lignes grâce au signe « \ », permet d’envoyer tous les messages de mails ou de news dans le fichier « mail_news » :

    mail.*;\
    news.*   /var/log/mail_news

    Envoyer les logs dans une console

    La ligne suivante permet d’envoyer tous les logs dans la console « tty8 » (CTRL+ALT+F8) :

    *.*  /dev/tty8

    Les lignes suivantes permettent d’envoyer les logs des mails dans le fichier « mail » et en même temps sur la console « tty8 »

    mail.*  /var/log/mail
    mail.*  /dev/tty8

    Le signe @ pour envoyer les logs sur un autre serveur

    La ligne suivante permet d’envoyer tous les logs sur un autre serveur nommé « pgdebian » :

    *.* @pgdebian

    Redémarrer le démon

    A chaque modification du fichier « /etc/syslog.conf », il faut redémarrer le démon :

    /etc/init.d/sysklogd restart

    Lors du démarrage, le démon créera les nouveaux fichiers de logs, si ceux-ci n’existent pas.

    Mettre syslogd à l’écoute du réseau

    Pour pouvoir centraliser les logs en provenance d’autres serveurs ou routeurs, il faut mettre le démon « syslogd » à l’écoute du réseau.

    Pour cela, il faut ajouter le paramètre « -r » sur la commande de démarrage du démon.

    Sur Debian testing, il faut modifier le fichier « /etc/default/syslogd » et renseigner la variable «  SYSLOGD  » comme indiquée ci-dessous :

    SYSLOGD="-r"

    Il faut aussi configurer les routeurs ou les autres serveurs pour que ceux-ci exportent leurs logs vers le serveur principal.

    Exporter des logs d’un autre poste sous Linux

    Pour exporter tous les logs d’un poste vers un serveur appelé par exemple «  pgdebian  », il suffit d’ajouter la ligne suivante dans le fichier « /etc/syslog.conf » de ce poste :

    *.* @pgdebian

    La ligne suivante permet de n’envoyer que les messages d’erreurs :

    *.notice{{ }}@pgdebian

    Exporter les logs d’un poste Windows

    Pour qu’un système Windows (NT, 2000,..) exporte ses logs sur un serveur syslog sous Linux, il faut installer le programme «  ntsyslog  »

  •  http://ntsyslog.sourceforge.net/

    La commande suivante, permet d’installer le service sur le poste Windows :

    ntsyslog -install

    Le programme «  NTSyslogCtrl.exe  » permet de configurer le service pour indiquer le serveur et les logs à envoyer sur celui-ci.

    Exporter les logs d’un routeur Zyxel ZyWall 10

    Pour un routeur Zyxel ZyWall 10, une fois connecté sur le routeur, il faut :

  •  Aller dans le menu 24.3.2 (System Maintenance / Unix Syslog)
  •  Activer le système Syslog (Active=Yes)
  •  Indiquer l’adresse IP du serveur devant recevoir les logs (Syslog IP Adresse = 192.168.0.1)
  •  Indiquer dans quelle « Service » les logs doivent arriver (Log Facility = Local 1)
  •  Indiquer le type de logs à envoyer (Firewall log = Yes)

    Quelques commandes pour consulter les logs

    La commande suivante permet de voir les 10 dernières lignes du fichier « syslog »

    # tail /var/log/syslog

    La commande suivante, permet de voir les 200 dernières lignes :

    # tail -200 /var/log/syslog

    La ligne suivante permet de voir les 10 dernières lignes avec une actualisation en temps réel :

    # tail -f /var/log/syslog

    Cette commande retourne les lignes du fichiers « syslog » contenant la chaîne de caractères « LeMotif » :

    # cat /var/log/syslog | grep -i LeMotif

    En combinant les deux commandes précédentes, il est possible par exemple d’avoir en temps réel, les logs de fetchmail :

    # tail -f /var/log/syslog | grep fetchmail

    Pour avoir uniquement les logs du noyau Linux au démarrage du poste :

    # dmesg

    Historique des modifications

    Version Date Commentaire
    0.1 10/02/05 Création par Tony GALMICHE
    0.2 12/04/05 Ajout exemple commande dmesg
    0.3 11/08/06 Remplacement ’Facilité’ par ’Service’ suite à remarque
    0.4 12/02/07 Petite correction
    0.41 08/08/07 Correction chemin « /etc/default/syslogd »
  • Commentaires

    Configuration de Syslogd (Gestion des logs sous Linux)

    en ce qui concerne l’exportation des logs sur une autre machine, comment fait on pour specifier dans quel fichier on veux ranger ces logs ?
    je m’explique. par exemple je voudrais exporter les log maillog d’une machine M1 vers une machine M2.
    seulement j’aimerais que sur la machine M2 ils soient rangés dans maillog-M1 par exemple.

    Configuration de Syslogd (Gestion des logs sous Linux)

    Bonjour,

    Syslog n’est pas là pour détecter des attaques mais simplement pour gérer les logs des applications.

    Pour détecter des attaques, il faut voire du coté d’outils comme nagios, ntop ou simplement iptables

    Configuration de Syslogd (Gestion des logs sous Linux)

    Bonjour,
    J’ai une machine qui tourne sous debian. Ma machine est connectée sur internet. Mon problème est que je n’arrive pas à configurer syslog pour détecter toutes les intrusions en direction de ma machine. Par exemple j’aimerai savoir si quelqu’un a essayer de pinguer ma machine, ou à essayer de scanner les ports de ma machine,etc. Bref détecter les intrusions en direction de ma machine. Si quelqu’un a une idée sur la manière dont je dois configurer syslog pour avoir ces informations. merci.

    Configuration de Syslogd (Gestion des logs sous Linux)

    Merci, c’est corrigé.

    Configuration de Syslogd (Gestion des logs sous Linux)

    Il y a une erreur dans cet article dans la rubrique :

    Mettre syslogd à l’écoute du réseau

    Au lieu de lire :

    Sur Debian testing, il faut modifier le fichier « /etc/init.d/syslogd » et renseigner la variable « SYSLOGD » comme indiquée ci-dessous :

    SYSLOGD="-r"

    Il faut lire :

    Sur Debian testing, il faut modifier le fichier « /etc/default/syslogd » et renseigner la variable « SYSLOGD » comme indiquée ci-dessous :

    SYSLOGD="-r"

    > Configuration de Syslogd (Gestion des logs sous Linux)

    En effet, mais les possibilités sont tellement vastes sous Linux :-)

    > Configuration de Syslogd (Gestion des logs sous Linux)

    pour l’avant dernière commande, "cat /var/log/syslog | grep -i LeMotif", il est possible de la réduire en "grep -i LeMotif /var/log/syslog" non ?