19
0
Fork 0
wiki/HowtoLogcheck.md

135 lines
5.9 KiB
Markdown
Raw Permalink Normal View History

2017-11-05 15:40:09 +01:00
---
categories: sécurité sysadmin
title: Howto Logcheck
...
2016-12-29 11:25:39 +01:00
2023-07-25 16:39:11 +02:00
[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` (ainsi que journald depuis Debian 12). 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).
2016-12-29 11:25:39 +01:00
2017-11-05 15:40:09 +01:00
## Installation
2016-12-29 11:25:39 +01:00
~~~
2017-11-05 15:40:09 +01:00
# apt install logcheck logcheck-database
2016-12-29 11:25:39 +01:00
~~~
2017-11-05 15:40:09 +01:00
2016-12-29 11:25:39 +01:00
## Configuration
2017-11-05 15:40:09 +01:00
Fichiers de configuration :
~~~
/etc/logcheck/
├── logcheck.conf
2023-07-25 16:39:11 +02:00
├── logcheck.logfiles.d
│ ├── journal.logfiles
│ ├── [...]
│ └── syslog.logfiles
2017-11-05 15:40:09 +01:00
├── header.txt
├── cracking.d/
2017-11-05 15:56:59 +01:00
│ ├── kernel
│ ├── [...]
│ └── uucico
2017-11-05 15:40:09 +01:00
├── cracking.ignore.d/
├── ignore.d.paranoid/
2017-11-05 15:56:59 +01:00
│ ├── bind
│ ├── [...]
│ └── xinetd
2017-11-05 15:40:09 +01:00
├── ignore.d.workstation
2017-11-05 15:56:59 +01:00
│ ├── automount
│ ├── [...]
│ └── xlockmore
2017-11-05 15:40:09 +01:00
├── logcheck.logfiles.d/
├── violations.d/
2017-11-05 15:56:59 +01:00
│ ├── kernel
│ ├── [...]
│ └── sudo
2017-11-05 15:40:09 +01:00
└── violations.ignore.d
├── logcheck-su
└── logcheck-sudo
~~~
2016-12-29 11:25:39 +01:00
2017-11-05 15:40:09 +01:00
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 :
2016-12-29 11:25:39 +01:00
~~~
REPORTLEVEL="server"
2017-11-05 15:40:09 +01:00
SENDMAILTO="monitoring@example.com"
2016-12-29 11:25:39 +01:00
MAILASATTACH=0
FQDN=1
TMP="/tmp"
~~~
2017-11-05 15:40:09 +01:00
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
~~~
2016-12-29 11:25:39 +01:00
## Utilisation
2017-11-05 15:40:09 +01:00
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.
2016-12-29 11:25:39 +01:00
2017-11-05 15:40:09 +01:00
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 :
2016-12-29 11:25:39 +01:00
~~~
^\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="<http://www.rsyslog.com"\>] restart$
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ sshd\[[0-9]+\]: Received disconnect from [.[0-9]]+: 11:.*$
~~~
2023-04-25 09:29:33 +02:00
Le programme [logcheck-test](https://manpages.debian.org/testing/logcheck/logcheck-test.1) permet de facilement tester une règle ou un fichier de règles.
2016-12-29 11:25:39 +01:00
~~~
2023-04-25 09:29:33 +02:00
$ logcheck-test -r /etc/logcheck/ignore.d.server/foo -l /var/log/syslog
~~~
Pour tester une expression régulière que l'on écrit, on utilisera `grep -E` ainsi :
~~~
$ sed -e 's/[[:space:]]*$//' /var/log/syslog | grep -E 'MON-EXPRESSION-REGULIERE'
2016-12-29 11:25:39 +01:00
~~~
2017-11-05 15:40:09 +01:00
On peut aussi faire tout simplement :
2016-12-29 11:25:39 +01:00
~~~
2023-04-25 09:29:33 +02:00
$ echo "Oct 8 23:59:33 foo sshd[24123]: Received disconnect from 192.0.2.51: 11: disconnected by user" | grep -E 'MA-SUPER-EXPRESSION-REGULIERE'
2016-12-29 11:25:39 +01:00
~~~
2017-11-05 15:40:09 +01:00
## FAQ
2017-11-05 15:47:55 +01:00
### Comment apprendre les expressions régulières pour écrire de nouvelles règles ?
2017-11-05 15:40:09 +01:00
2017-11-05 15:47:55 +01:00
Le plus simple est de repartir des règles existantes, et de s'aider de la nombreuse documentation existante comme le site <http://rubular.com/>.
2024-01-25 15:27:42 +01:00
2017-11-05 15:47:55 +01:00
### 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).
2024-01-25 15:27:42 +01:00
Dans ce cas, si on ne peut pas réduire la taille des logs envoyés (en corrigeant l'applicatif responsable), on peut réduire la taille en compressant les logs en pièce jointe :
~~~
# Send the results as attachment or not.
# 0=not as attachment; 1=as attachment; 2=as gzip attachment
# Default is 0
MAILASATTACH=2
~~~