Modsecurity2 : plante apache2

Soumis par jpp le dim 22/01/2023 - 18:26

Après le mise à jour hebdomadaire apache refuse de démarrer ...
Un examen des logs (systemd ne donne, comme d'habitude aucun renseignement utile !), je vois que c'est "modsec2" qui se  plaint d'un problème de version de la bibliothèque "pcre" :

ModSecurity: Loaded PCRE do not match with compiled!

Debian ne fournissant pas (pas encore ?) de nouvelle versions (2.9.7) il me faut télécharger les sources (https://github.com/SpiderLabs/ModSecurity/releases) et passer par la case "compilation".
La compilation demande, comme à l'habitude, quelques librairies "-dev" qui ne figurent pas dans cette machine, mais, les messages sont clairs et un petit coup de "apt install la_librairie_manquante-dev" résout rapidement le problème. Par exemple il manque "apache2-dev" qui déclenche l'installation de plein de dépendances (dont libpcre2 et son "pcre2.h") qui suffisent à peu près.
L'ajout de "libpcre3-dev" (l'include "pcre.h" est partie de libpcre3), "libxml2-dev", "pkg-config" termine la préparation.
PS : pour Bookworm ne pas intégrer libcurl-dev qui déclenche une erreur de compilation.
Mais le premier essai de lancement n'est pas concluant, nouveau refus de démarrage avec un message :

Invalid command 'SecAuditLogFormat', perhaps misspelled or defined by a module not included in the server configuration

En cherchant où est déclarée cette information je trouve dans /etc/modsecurity le fichier de config "modsecurity.conf" qui contient le mot recherché : "SecAuditLogFormat JSON". Après quelques recherches sur Internet je trouve que "JSON" ne figure pas dans les options standard et que modsecurity utilise une librairie JSON peu connue : "yajl". Il faut donc récupérer "libyajl-dev" et recompiler avec la bonne option dans le petit script suivant, bien sûr précédé d'un "make clean" :

#!/bin/bash
cd /usr/src/PGM/BUILD/ModSecurity-2.9.7
OPTIONS=''
OPTIONS=${OPTIONS}' --enable-large-stream-input '
OPTIONS=${OPTIONS}' --with-yajl=/usr/lib/x86_64-linux-gnu '
#
./configure ${OPTIONS} 2>&1 | tee LOG.configure
ret=$?
if [ $ret -ne 0 ]
  then
    echo 'Erreur configure code:'$ret
    exit
fi
#
make 2>&1 | tee LOG.make

 La compilation est OK et le "make install" installe comme il se doit  la librairie "mod_security2.so" dans le répertoire adéquat "/usr/lib/apache2/modules". Et ..., ça marche du premier coup, apache démarre sans se plaindre et les sites sont de nouveau accessibles.