125 lines
5.6 KiB
Markdown
125 lines
5.6 KiB
Markdown
---
|
||
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` (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).
|
||
|
||
|
||
## Installation
|
||
|
||
~~~
|
||
# apt install logcheck logcheck-database
|
||
~~~
|
||
|
||
|
||
## Configuration
|
||
|
||
Fichiers de configuration :
|
||
|
||
~~~
|
||
/etc/logcheck/
|
||
├── logcheck.conf
|
||
├── logcheck.logfiles.d
|
||
│ ├── journal.logfiles
|
||
│ ├── [...]
|
||
│ └── syslog.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="<http://www.rsyslog.com"\>] restart$
|
||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ sshd\[[0-9]+\]: Received disconnect from [.[0-9]]+: 11:.*$
|
||
~~~
|
||
|
||
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.
|
||
|
||
~~~
|
||
$ 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'
|
||
~~~
|
||
|
||
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" | grep -E '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 <http://rubular.com/>.
|
||
|
||
### 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).
|