mirroir readonly du Gitit wiki.evolix.org (attention, ne rien commiter/merger sur ce dépôt) https://wiki.evolix.org
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

5.3 KiB

categories title
sécurité sysadmin Howto Logcheck

Logcheck 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 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="<http://www.rsyslog.com"\>] 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 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).