Exceptions pour utiliser le module ModSecurity d’Apache avec WordPress

Le module ModSecurity permet de sécuriser considérablement son serveur web Apache. Cependant, une installation de WordPress déclenchent par défaut de nombreuses fausses alertes, qui empêchent l’interface admin de fonctionner correctement.

Afin de garder un fonctionnement le plus sécurisé possible, et permettre à WordPress de fonctionner il est possible de désactiver certaines règles de fonctionner pour des fichiers particuliers grâce à la directive « SecRuleRemoveById ».

Exemple de configuration :

<IfModule mod_security2.c>
<LocationMatch "/wp-admin/post.php">
  SecRuleRemoveById 300015 300016 300017 950907 950005 950006 960008 960011 960904 949110 941160
</LocationMatch>

<LocationMatch "/wp-admin/admin-ajax.php">
  SecRuleRemoveById 300015 300016 300017 950907 950005 950006 960008 960011 960904 980130 941160
</LocationMatch>

<LocationMatch "/wp-admin/admin.php">
	SecRuleRemoveById 932100 941100 941110 941160 941180 949110 980130 980140 959100 953100 
 </LocationMatch>

<LocationMatch "/wp-admin/page.php">
  SecRuleRemoveById 300015 300016 300017 950907 950005 950006 960008 960011 960904
</LocationMatch>

<LocationMatch "/wp-admin/options.php">
  SecRuleRemoveById 300015 300016 300017 950907 950005 950006 960008 960011 960904
</LocationMatch>

<LocationMatch "/wp-admin/theme-editor.php">
  SecRuleRemoveById 300015 300016 300017 950907 950005 950006 960008 960011 960904
</LocationMatch>

<LocationMatch "/wp-includes/">
  SecRuleRemoveById 960010 960012 950006
</LocationMatch>
 </IfModule>

Pour identifier les id des règles à désactiver, il suffit d’éplucher les logs d’Apache générés lorsque une requête liée au bon fonctionnement de WordPress est bloquée par ModSecurity:

Sun Sep 01 11:03:21.591214 2019] [:error] [pid 29911] [client 86.117.194.202:53045] [client 86.117.194.202] ModSecurity: Warning. Operator GE matched 5 at TX:inbound_anomaly_score. [file "/usr/share/modsecurity-crs/rules/RESPONSE-980-CORRELATION.conf"] [line "86"] [id "980130"] [msg "Inbound Anomaly Score Exceeded (Total Inbound Score: 5 - SQLI=0,XSS=5,RFI=0,LFI=0,RCE=0,PHPI=0,HTTP=0,SESS=0): individual paranoia level scores: 5, 0, 0, 0"] [tag "event-correlation"] [hostname "example.com"] [uri "/wp-admin/admin-ajax.php"] [unique_id "XWvPq3fREBfMUH4w7PJHEgAAAAQ"], referer: https://example.com/wp-admin/post.php?post=2&action=edit

Lorsque vous analysez les logs, il faut extraire de chaque ligne 2 informations (en gras dans l’exemple ci-dessus) :

  • l’ID de la règle qui a été déclenché
  • l’URL du fichier qui a causé l’erreur

Ensuite vous pouvez désactiver la régle en question pour le fichier en question de la façon suivante en ajoutant des directives directement dans la configuration de votre VirtualHost :

<IfModule mod_security2.c>
<LocationMatch "URL">
  SecRuleRemoveById ID
</LocationMatch>
 </IfModule>

En espérant que cela puisse vous servir ! Si vous avez des questions, n’hésitez pas à me contacter !