User Tools

Site Tools


informatique:linux:syslog

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
informatique:linux:syslog [2008/09/29 13:16] – mode debug + reorg pteuinformatique:linux:syslog [2020/09/14 08:50] (current) – relecture pteu
Line 1: Line 1:
-{{tag>journal log}} 
  
 ======Théorie du syslog====== ======Théorie du syslog======
  
-  * service de gestion des logs sur le port udp/514 +  * service de gestion des logs écoutant sur le port udp/514 
-  * 2 démons utilisés sous Linux : klogd et syslogd +  * 2 démons utilisés sous Linux : **klogd** et **rsyslogd** 
-  * **klogd** : récupére les logs du noyau seulement +  * **klogd** : récupère les logs du noyau seulement 
-  * **syslogd** : gestion des logs : il recoit des //trap// et les redirige où il faut en suivant les règles de ''/etc/syslog.conf''+  * **rsyslogd** : gestion des logs locaux : il reçoit des //trap// et les redirige où il faut en suivant les règles de ''/etc/rsyslog.conf''. Fonctionne aussi avec les logs distants (si activation, voir plus bas).
  
  
-=====Les services=====+=====Les services/types=====
  
-Listes des services reconnus par syslog :+Listes des services ou types (//facility// en anglais) reconnus par syslog :
   * **auth** : Messages relatifs à la sécurité du système et à l'authentification des utilisateurs.   * **auth** : Messages relatifs à la sécurité du système et à l'authentification des utilisateurs.
   * **cron** : Messages générés par les daemons cron et at.   * **cron** : Messages générés par les daemons cron et at.
Line 37: Line 36:
  
  
-=====/etc/syslog.conf=====+=====/etc/rsyslog.conf=====
  
-Fichier de conf de **syslogd** organisé en 2 colonnes : +Fichier de conf de **rsyslogd** organisé en 2 colonnes : 
-  * la première (sélecteur) définit l'origine (service + priorité)+  * la première (sélecteur) définit l'origine (service/type + priorité)
   * la seconde (action) la destination (fichier, console, machine distante, liste d'utilisateurs, tube)   * la seconde (action) la destination (fichier, console, machine distante, liste d'utilisateurs, tube)
  
 Ces colonnes sont donc de la forme : Ces colonnes sont donc de la forme :
-  <service.priorité>   </path/fichier> | </dev/ttyX> | @<host> | <root,toto> | | </path/to/pipe>+<code bash> 
 +<service.priorité>   </path/fichier> | </dev/ttyX> | @<host> | <root,toto> | | </path/to/pipe
 +</code>
  
-Par exemple pour récupérer les logs critiques (''crit''des programmes de gestion de mail (''mail'') et les rediriger dans la console ''/dev/tty8''+Par exemple pour récupérer les logs critiques (''crit'') de la messagerie (''mail'') et les rediriger dans la console ''/dev/tty8''
-  mail.crit                          /dev/tty8+<code bash> 
 +mail.crit                          /dev/tty8 
 +</code>
  
 On utilise : On utilise :
   * une étoile ''*'' pour désigner toutes les valeurs possibles d'un champ.   * une étoile ''*'' pour désigner toutes les valeurs possibles d'un champ.
-  * une virgule '','' pour séparer 2 noms de services+  * une virgule '','' pour séparer 2 noms de services ou 2 priorités
   * un point virgule '';'' pour assembler deux sélecteurs   * un point virgule '';'' pour assembler deux sélecteurs
 +  * un point d'exclamation ''!'' pour inverser la sélection (NOT)
   * un tiret ''-'' en suffixe pour écrire dans la cible en différé (consomme moins de ressources mais à n'utiliser que pour les logs non critiques).   * un tiret ''-'' en suffixe pour écrire dans la cible en différé (consomme moins de ressources mais à n'utiliser que pour les logs non critiques).
-  * la priorité ''none'' signifie qu'aucun message ne doit être loggé pour le service correspondant.+  * la priorité ''none'' matche les messages n'ayant pas de priorité définie
  
-Exemple1 : pour écrire les logs d'erreur des services de mail et de news en différé dans ''/var/log/mail_et_news.log'' :+__Exemple1 :__ pour écrire les logs d'erreur des services de mail et de news en différé dans ''/var/log/mail_et_news.log'' :
   mail,news.err                 -/var/log/mail_et_news.log   mail,news.err                 -/var/log/mail_et_news.log
 +  
  
-Exemple2 : ''*.debug;mail,news.none'' indique que l'on logge tous les messages de débogage, sauf ceux venant des services mail et news.+=====Diagnostique=====
  
 +On peut vérifier la configuration avec la commande :
 +<code bash>
 +rsyslogd -N1
 +</code>
 +
 +Pour lancer le démon syslog en mode DEBUG, il faut spécifier l'option ''-d'' :
 +<code bash>
 +vi /etc/default/syslogd
 + SYSLOGD="-d"
 +</code>
  
 =====Configuration sous Debian===== =====Configuration sous Debian=====
  
-==== Syslog centralisé ====+=====Options de démarrage du démon=====
  
-Lorsqu'on a un parc qui grossi il devient très utile de centraliser les log des différents équipements sur une seule machineC'est possible en configurant syslog pour qu'il accepte les messages venant du réseau.+Se configure dans le fichier **/etc/default/rsyslog**. 
 +<code bash> 
 +# Options for rsyslogd 
 +# -d enables debug 
 +# -m 0 disables 'MARK' messages. 
 +# -r enables logging from remote machines 
 +# -x disables DNS lookups for remote messages 
 +# See rsyslogd(8) for more details 
 +RSYSLOGD_OPTIONS="" 
 +</code>
  
-Pour que **sysklogd** accepte les logs depuis le réseau (ce n'est pas le cas par défaut), il faut le lancer avec l'option %%-r%%. +=====Filtres=====
-Sous Debian on peut spécifier les options de lancement du démon en modifiant la variable ''SYSLOGD'' dans ''/etc/default/syslogd'' (qui est utilisé par le script de lancement ''/etc/init.d/sysklogd'') : +
-  # vi /etc/default/syslogd +
-   # +
-   # For remote UDP logging use SYSLOGD="-r" +
-   # +
-   SYSLOGD="-r"+
  
-Puis on le relance : +====Notation basée propriété====
-  /etc/init.d/sysklogd restart +
-  Restarting system log daemon....+
  
-Vérification : +C'est une notation abrégée permettant d'écrire des filtres simples.
-  ps -ef | grep syslogd +
-  root     14634      0 23:08 ?        00:00:00 /sbin/syslogd -r+
  
-Bien surpour sécuriser le tout et éviter un DOS par flood de flux syslog depuis des machines malintentionnéesil faut complèter celà avec une règle iptables qui n'accepte les sockets udp/514 que depuis des machines bien identifiées, par exemple le poste 192.168.2.1 :+Structure : '':PROPERTY[!]COMPARE_OPERATION"STRING"''
  
-  iptables -A INPUT -p udp -s 192.168.2.1 --dport 514 -j ACCEPT+<code bash> 
 +# property-based filter : 
 +#       msg | hostname | programname | etc... 
 +# compare-operation : 
 +#       contains | isequal | startswith | regex | ereregex | isempty 
 +# string (cible) : 
 +#       prefixée par "-" pour écrire en asynchrone
  
 +:msg, contains, "iptables " -/var/log/iptables/iptables.log
 +# ancienne notation
 +# & ~
 +# nouvelle notation
 +& stop
 +:msg, regex, "^\[ *[0-9]*\.[0-9]*\] iptables" -/var/log/iptables/iptables.log
 +& stop
 +</code>
 +
 +====Notation basée expression====
 +
 +Notation plus verbeuse basée sur le langage RainerScript propre à rsyslog, qui utilise des opérateurs logiques.
 +
 +Structure : ''if EXPRESSION then ACTION else ACTION''
 +
 +<code bash>
 +if $msg regex '^\[ *[0-9]*\.[0-9]*\] iptables' then /var/log/iptables/iptables.log
 +& stop
 +</code>
 +
 +
 +====Template====
 +
 +<code bash>
 +# création du template "Openvpn" pour l'emplacement des logs openvpn
 +$template OpenVPN,"/var/log/openvpn/ovpn.log"
 +# on y transfère tous les messages issus des processus dont le nom commence par "ovpn-"
 +:programname, startswith, "ovpn-" -?OpenVPN
 +# puis on arrête le traitement de ces messages pour éviter les doublons
 +:programname, startswith, "ovpn-" stop
 +</code>
 +
 +
 +===== Syslog centralisé =====
 +
 +Lorsqu'on a un parc qui grossit il devient très utile de centraliser les logs des différents équipements sur une seule machine. C'est possible en configurant syslog pour qu'il accepte les messages venant du réseau.
 +
 +Depuis Debian 8, pour activer la gestion des logs par le réseau il faut :
 +  * décommenter les 2 lignes suivantes dans ''/etc/rsyslog.conf'' :
 +<code bash>
 +# provides UDP syslog reception
 +$ModLoad imudp
 +$UDPServerRun 514
 +</code>
 +  * activer la prise en charge "remote" de rsyslog ; cela se configure en spécifiant ''RSYSLOGD_OPTIONS="-r"'' dans le fichier **/etc/default/rsyslog**
 +  * créer un fichier dans ''/etc/rsyslog.d/'' , par exemple ''test.conf'' et y définir où stocker les logs que l'on va recevoir :
 +<code bash>
 +# les logs provenant de l'IP 192.168.2.1 seront envoyés dans le fichier /var/log/test.log
 +if $fromhost-ip == '192.168.2.1' then /var/log/test.log
 +# possible aussi de filtrer par bout d'IP
 +if $fromhost-ip startswith '192.168.2.' then /var/log/test.log
 +# et c'est tout (on ne traite plus d'autres règles pour ces logs)
 +& ~
 +</code>
 +  * redémarrer le service
 +<code bash>
 +systemctl restart rsyslog
 +</code>
 +
 +Pour sécuriser un minimum, il faut compléter cela avec une règle iptables qui n'accepte les sockets udp/514 que depuis notre machine :
 +<code bash>
 +iptables -A INPUT -p udp -s 192.168.2.1 --dport 514 -j ACCEPT
 +</code>
 +
 +====Client distant====
 +
 +Pour envoyer les messages vers un serveur distant.
 +
 +Structure : @[(zNUMBER)]HOST:[PORT]
 +
 +Exemple : sur le __client__ rsyslog distant, configurer le filtre suivant :
 +<code bash>
 +cat /etc/rsyslog.d/remote.conf
 +# Envoyer ces messages au syslog central
 +:programname, startswith, "ovpn-" @10.0.0.1
 +</code>
  
 ==== WRT54G(L) ==== ==== WRT54G(L) ====
Line 109: Line 205:
 Voilà donc où vont être redirigés ces damned messages de log. Voilà donc où vont être redirigés ces damned messages de log.
  
- 
-==== Mode DEBUG ==== 
- 
-Pour lancer le démon syslog en mode DEBUG, il faut spécifier l'option ''-d'' : 
- 
-  vi /etc/default/syslogd 
-   SYSLOGD="-d" 
  
 =====Syntaxe avancée===== =====Syntaxe avancée=====
Line 156: Line 245:
   #récupération des logs de mon routeur   #récupération des logs de mon routeur
   user.=warning   -/var/log/odin_iptables.log   user.=warning   -/var/log/odin_iptables.log
 +
 +====Log====
 +On peut choisir la priorité syslog des journaux iptables (dans cet exemple, 4) :
 +  iptables -t filter -A INPUT -j LOG --log-level=4
  
 =====logger===== =====logger=====
Line 168: Line 261:
  
   * http://okki666.free.fr/docmaster/articles/linux068.htm   * http://okki666.free.fr/docmaster/articles/linux068.htm
 +  * https://www.rsyslog.com/doc/v8-stable/rainerscript/expressions.html
informatique/linux/syslog.1222694186.txt.gz · Last modified: 2013/10/14 20:54 (external edit)