Я пытаюсь написать исключения правил modsecurity и не могу заставить ctl:ruleRemoveTargetById
работать в соответствии со справочным руководством.
На моем сервере работает Debian 9 с apache2 2.4.25-3+deb9. Я пробовал следовать справочному руководству на github и пытался эмулировать примеры правил в файле > REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf. Я написал простое правило для запуска определенных аргументов, а затем попытался исключить его, но оно не исключает правило, основанное на аргументах. Я вижу как идентификатор правила, так и идентификатор исключения правила в журналах.
Я произвольно поместил приведенное ниже правило в REQUEST-905-COMMON-EXCEPTIONS.conf.
SecRule ARGS "@rx propfind" "id:905999,phase:2,log,msg:'test msg delete rule'"
Это срабатывает как надо. На моей странице настроек nextcloud есть аргумент с именем <?xml version
, который содержит шаблон «propfind», который я использую для тестирования.
Я также написал исключение и поместил его в REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.
SecRule ARGS_NAMES "@rx <\?xml\sversion" "phase:2,log,id:1030,ctl:ruleRemoveTargetById=905999;ARGS:/<\?xml\sversion/"
Это правило срабатывает, как и ожидалось, но не предотвращает срабатывание правила 905999 для аргумента с именем <?xml version
.
Я упростил правила до двух ниже, и они работают так, как ожидалось; когда я ввожу example.com/?test=trigger
, я вижу в журнале правило 905999, но если я отправляю example.com/?testarg=trigger
, я вижу только правило исключения 1030, как и ожидалось.
SecRule ARGS "@rx trigger" "id:905999,phase:2,log,msg:'test msg delete rule'"
SecRule ARGS_NAMES "@rx testarg" "phase:2,log,id:1030,ctl:ruleRemoveTargetById=905999;ARGS:testarg"
Когда я открываю вкладку настроек nextcloud, HTTP-запрос содержит
<?xml version="1.0"?><d:propfind xmlns:d="DAV:"><d:prop><d:resourcetype/></d:prop></d:propfind>
который Modsec интерпретирует как имя аргумента <?xml version
, содержащее значение "1.0"?><d:propfind xmlns:d="DAV:"><d:prop><d:resourcetype/></d:prop></d:propfind>
Я ожидал, что мое правило 1030 остановит запуск 905999, но я все еще вижу оба правила в журнале. Я предполагаю, что это из-за пробела между «xml» и «версией», но не могу понять, как исключить цель.