# [HOWTO] Syslog-ng

## Antares

Pas mal d'explications par l'exemple pour l'utilisation de syslog-ng. 

Tout se fait dans le fichier de configuration suivant : /etc/syslog-ng/syslog-ng.conf 

Ce fichier est constituté de 5 sections :

 options - Les options générales

 source - les sources d'événements

 destination - les destinations de journaux

 filter - les filtres

 log - les actions

1. Section options

(j'ai pas tout traduit mais je le ferais bientot)

```
options {

       chain_hostnames(yes|no)

              Enable or disable the chained hostname format.

       long_hostnames(yes|no)

              This is a deprecated alias for chain_hostnames().

       keep_hostname(yes|no)

              Specifies  whether  to  trust  hostname  as it is included in the log message. If keep_hostname is yes and there is a hostname in the message it is not touched, otherwise it is

              always rewritten based on the information where the message was received from.

       use_dns(yes|no)

              Enable or disable DNS usage.  syslog-ng blocks on DNS queries, so enabling DNS may lead to a Denial of Service attack.  To prevent DoS, protect your syslog-ng network  endpoint

              with firewall rules, and make sure that all hosts, which may get to syslog-ng is resolvable.

       use_fqdn(yes|no)

              Add Fully Qualified Domain Name instead of short hostname.

       check_hostname(yes|no)

              Enable or disable whether the hostname contains valid characters.

       bad_hostname(regex)

              A regexp which matches hostnames which should not be taken as such.

       dns_cache(yes|no)

              Enable or disable DNS cache usage.

       dns_cache_expire(n)

              Number of seconds while a successful lookup is cached.

       dns_cache_expire_failed(n)

              Number of seconds while a failed lookup is cached.

       dns_cache_size(n)

              Number of hostnames in the DNS cache.

       create_dirs(yes|no)

              Enable or disable directory creation for destination files.

       dir_owner(uid)

              User id.

       dir_group(gid)

              Group id.

       dir_perm(perm)

              Permission value (octal mask).

       owner(uid)

              User id for created files.

       group(gid)

              Group id for created files.

       perm(perm)

              Permission value for created files.

       gc_busy_threshold(n)

              Sets the threshold value for the garbage collector, when syslog-ng is busy.  GC phase starts when the number of allocated objects reach this number.  Default: 3000. gc_idle_threshold(n)

              Sets the threshold value for the garbage collector, when syslog-ng is idle.  GC phase starts when the number of allocated objects reach this number.  Default: 100.

       log_fifo_size(n)

              The number of lines fitting to the output queue. An output queue is present for all destinations.

       log_msg_size(n)

              Maximum length of message in bytes (NOTE: some syslogd implementations have a fixed limit of 1024 characters).

       mark(n)

              The number of seconds between two MARK lines.  NOTE: not implemented yet.

       stats(n)

              The number of seconds between two STATS messages.

       sync(n)

              The number of lines buffered before written to file (can be overridden locally).

       time_reap(n)

              The time to wait before an idle destination file is closed.

       time_reopen(n)

              The time to wait before a died connection is reestablished.

       use_time_recvd(yes|no)

              This  variable  is used only for macro expansion where the meaning of the time specific macros depend on this setting, however as there are separate macros for referring to the

              received timestamp (R_ macros) and the log message timestamp (S_), so using this value is not recommended.

};
```

Par défaut, ceci peut suffir :

```
options { long_hostnames(off); sync(0); stats(43200); };
```

2. Section Source

```
Syntaxe : source <identifiant> { source-driver(paramètres); source-driver(paramètres); ... };
```

Les sources dispo sont :

 unix-stream (<nom de fichier>) - Lis les messages à partir de tubes de type flux (AF_UNIX, SOCK_STREAM socket)

 file (<nom de fichier>) - Lis les messages à partir d'un fichier donné.

 tcp (<ip>,<port>) - Lis les messages à partir d'une source sur le reseau en utilisant le protocole tcp ou udp (Si vous ne voulez pas utiliser une interface spécifique, utilisez 0.0.0.0)

 udp (<ip>,<port>) - Lis les messages à partir d'une source sur le reseau en utilisant le protocole tcp ou udp (Si vous ne voulez pas utiliser une interface spécifique, utilisez 0.0.0.0)

 internal() - Lis les messages internes à syslog-ng.

En général, on met seulement :

```
source src {

  unix-stream("/dev/log");

  internal();

  file("/proc/kmsg");

};
```

3. Section Destination

```
Syntaxe : destination <identifiant> { destination-driver(paramètres); destination-driver(paramètres); ... };
```

Les destinations dispo sont :

 file(<nom de fichier>) - Ecrit les messages dans un fichier donné.

 tcp(<ip>,<port>) - Envoie les logs sur une machine sur le réseau en utilisant le protocole tcp.

 udp(<ip>,<port>) - Envoie les logs sur une machine sur le réseau en utilisant le protocole udp.

 unix-stream(<nom de fichier>) - Ecrit les messages dans des tubes de type flux (AF_UNIX, SOCK_STREAM socket)

 usertty(<user>) - Ecrit les messages dans les consoles de l'utilisateur <user>  ( * envoie les logs à tous les utilisateurs)

 program(<commande à lancer>) - Envoie les logs vers un programme.

On peut utiliser l'option log_fifo_size(<TAILLE>)

De plus on peut utiliser toutes les variables suivantes : FACILITY, PRIORITY or LEVEL, DATE, FULLDATE, ISODATE, YEAR, MONTH, DAY, HOUR, MIN, SEC, FULLHOST, HOST

exemple :

```
destination hosts {

  file("/var/log/HOSTS/$HOST/$FACILITY/$YEAR/$MONTH/$DAY/$FACILITY$YEAR$MONTH$DAY"

       owner(root)

       group(root)

       perm(0600)

       dir_perm(0700)

       create_dirs(yes));

};
```

4. Section filter

```
Syntaxe : filter <identifiant> { expression; };
```

Les options dispo sont :

 facility(<liste de noms séparés par des virgules>) - Filtre par type.

 level(<liste de noms séparés par des virgules, ou une plage séparée par .. >)  - Filtre les priorités ou niveaux.

 program(<Expression Régulière(traduction pourrie :/)>) - Filtre le nom du programme générant le message.

 host(<Expression Régulière(traduction pourrie :/)>) - Filtre une expression régulière du nom d'hôte de l'expéditeur du message.

 match(<Expression Régulière(traduction pourrie :/)>) - Filtre un message sur une expression régulière.

 filter(<Nom de filtre>) - Utilise un autre filtre.

Les expressions peuvent contenir "AND" "OR" et ou "NOT".

Exemple :

```
filter f_sshd{ match(" sshd") and not match("Invalid user"); };
```

5. Section log

```
Syntaxe : log { source(s1); source(s2); ...

               filter(f1); filter(f2); ...

               destination(d1); destination(d2); ...

               flags(flag1[, flag2...]); };
```

exemples :

```
log { source(src); filter(f_sshd); destination(sshd); };

log { source(src);

      destination(full);

};
```

6. Exemples et Astuces

Exemple sur le wiki anglais

Pour logger tout ce qu'un utilisateur tape en console, on peut faire ceci :

```
destination <utilisateur> { file(/var/log/users/<utilisateur>.log); };

filter f_<utilisateur> { facility(local5) and match("<uid de l'utilisateur>"); };

log { source(src); filter(f_<utilisateur>); destination(<utilisateur>); };
```

Pour protéger les logs contre la suppression , on peut faire ceci sur un fichier ou un répertoire :

```
$ chattr +a /var/log/fichier.log
```

Ce qui n'autorise plus que l'ajout de données à la fin du fichier. Seul le root peut changer cela en faisant :

```
$ chattr -a /var/log/fichier.log
```

Et le fichier redevient supprimable/modifiable.

Pour exporter vos logs sur le reseau de façon sécurisée :

Vos commentaires, remarques, ajouts, sont les bienvenus  :Very Happy: 

----------

