--- categories: sécurité sysadmin title: Howto Logcheck ... [Logcheck](http://logcheck.org/) est un script Bash qui permet d'envoyer par email les termes inconnus dans des logs. Il est lancé toutes les heures et surveille par défaut `/var/log/syslog` et `/var/log/auth.log`. C'est un complément idéal de [Log2mail](HowtoLog2mail) car il va détecter de nouveaux termes dans les logs, que l'on considèrera comme normaux (on les ajoutera alors à la liste des termes connus) ou anormaux (que l'on ajoutera à _Log2mail_ pour avoir une alerte immédiate). ## Installation ~~~ # apt install logcheck logcheck-database ~~~ ## Configuration Fichiers de configuration : ~~~ /etc/logcheck/ ├── logcheck.conf ├── logcheck.logfiles ├── header.txt ├── cracking.d/ │ ├── kernel │ ├── [...] │ └── uucico ├── cracking.ignore.d/ ├── ignore.d.paranoid/ │ ├── bind │ ├── [...] │ └── xinetd ├── ignore.d.workstation │ ├── automount │ ├── [...] │ └── xlockmore ├── logcheck.logfiles.d/ ├── violations.d/ │ ├── kernel │ ├── [...] │ └── sudo └── violations.ignore.d ├── logcheck-su └── logcheck-sudo ~~~ Le fichier de configuration principal est `/etc/logcheck/logcheck.conf` où l'on précisera notamment l'option `REPORTLEVEL` pour choisir quel jeu d'exceptions l'on veut utiliser et `SENDMAILTO` pour la destination de l'email : ~~~ REPORTLEVEL="server" SENDMAILTO="monitoring@example.com" MAILASATTACH=0 FQDN=1 TMP="/tmp" ~~~ La liste des fichiers de journaux à surveiller se trouve dans le fichier `/etc/logcheck/logcheck.logfiles` : ~~~ /var/log/syslog /var/log/auth.log /var/log/user.log ~~~ ## Utilisation Par défaut Logcheck s'exécute toutes les heures et à chaque reboot comme indiqué dans le fichier `/etc/cron.d/logcheck`. On est parfois surpris par la quantité de lignes reçues. Pourtant, le but est bien de ne **rien** recevoir sauf exception ! Pour cela, il est important de passer par une « phase de test » où l'on ajoutera des règles d'exception pour prendre en compte les particularités de son système. Si vous utilisez le `REPORTLEVEL="server"` vous ajouterez des expressions régulières dans un fichier situé dans le répertoire `/etc/logcheck/ignore.d.server/`. Voici par exemple, quelques règles que l'on a pu ajouter pour diverses raisons : ~~~ ^\w{3} [ :0-9]{11} [._[:alnum:]-]+ kernel: \[IPTABLES DROP\] : IN=eth0 OUT= MAC=.* ^\w{3} [ :0-9]{11} [._[:alnum:]-]+ log2mail\[[0-9]+\]: Logfile [.[:alnum:]/]+ rotated. Listening to new file.$ ^\w{3} [ :0-9]{11} [._[:alnum:]-]+ nrpe\[[0-9]+\]: Could not read request from client, bailing out...$ ^\w{3} [ :0-9]{11} [._[:alnum:]-]+ nrpe\[[0-9]+\]: INFO: SSL Socket Shutdown.$ ^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ntpd\[[0-9]+\]: clock is now [[:alnum:]]+$ ^\w{3} [ :0-9]{11} [._[:alnum:]-]+ suhosin\[[0-9]+\]: ALERT - Include filename \([^)]+\) is an URL that is not allowed \(attacker.+$ ^\w{3} [ :0-9]{11} [._[:alnum:]-]+ suhosin\[[0-9]+\]: ALERT - tried to register forbidden variable '_REQUEST' through POST variables \(attacker.+$ ^\w{3} [ :0-9]{11} [._[:alnum:]-]+ suhosin\[[0-9]+\]: ALERT - tried to register forbidden variable '_GET' through POST variables \(attacker.+$ ^\w{3} [ :0-9]{11} [._[:alnum:]-]+ suhosin\[[0-9]+\]: ALERT - tried to register forbidden variable '_SERVER\[\w+\]' through POST variables \(attacker.+$ ^\w{3} [ :0-9]{11} [._[:alnum:]-]+ suhosin\[[0-9]+\]: ALERT - ASCII-NUL chars not allowed within request variables.+$ ^\w{3} [ :0-9]{11} [._[:alnum:]-]+ proftpd\[[0-9]+\]: [._[:alnum:]-]+ - ProFTPD killed \(signal 15\)$ ^\w{3} [ :0-9]{11} [._[:alnum:]-]+ proftpd\[[0-9]+\]: [._[:alnum:]-]+ - ProFTPD 1.3.1 standalone mode SHUTDOWN$ ^\w{3} [ :0-9]{11} [._[:alnum:]-]+ proftpd\[[0-9]+\]: [._[:alnum:]-]+ - ProFTPD 1.3.1 \(stable\) \(built Tue Oct 27 10:09:08 UTC 2009\) standalone mode STARTUP$ ^\w{3} [ :0-9]{11} [._[:alnum:]-]+ rsyncd\[[0-9]+\]: connect from [._[:alnum:]-]+ \([.[0-9]]+\)$ ^\w{3} [ :0-9]{11} [._[:alnum:]-]+ rsyncd\[[0-9]+\]: rsync allowed access on module [a-z]+ from [._[:alnum:]-]+ \([.[0-9]]+\)$ ^\w{3} [ :0-9]{11} [._[:alnum:]-]+ rsyslogd: -- MARK --$ ^\w{3} [ :0-9]{11} [._[:alnum:]-]+ rsyslogd: \[origin software="rsyslogd" swVersion="3.18.6" x-pid="[0-9]+" x-info="] restart$ ^\w{3} [ :0-9]{11} [._[:alnum:]-]+ sshd\[[0-9]+\]: Received disconnect from [.[0-9]]+: 11:.*$ ~~~ Pour tester une expression régulière que l'on écrit, on utilisera **egrep** ainsi : ~~~ $ sed -e 's/[[:space:]]*$//' /var/log/syslog | egrep 'MON-EXPRESSION-REGULIERE' ~~~ On peut aussi faire tout simplement : ~~~ $ echo "Oct 8 23:59:33 foo sshd[24123]: Received disconnect from 192.0.2.51: 11: disconnected by user" | egrep 'MA-SUPER-EXPRESSION-REGULIERE' ~~~ ## FAQ ### Comment apprendre les expressions régulières pour écrire de nouvelles règles ? Le plus simple est de repartir des règles existantes, et de s'aider de la nombreuse documentation existante comme le site . ### Je ne reçois pas certains emails envoyés par Logcheck ? Quand beaucoup de logs anormaux sont générés, il est possible que l'email envoyé dépasse la taille autorisé par votre MTA (sous Postfix, c'est 10 Mo par défaut).