Я пытаюсь настроить mod_security для регистрации полезной нагрузки POST-запросов для определенного URI, поскольку кажется, что веб-страница клиентов используется в качестве ретранслятора спама, и эти запросы повреждают кеш на стороне сервера.
Я начал с этого Сообщение блога но кажется довольно старым и устаревшим. Он не работает с нашей средой, такой как Apache 2.4 и mod_security 2.8. Итак, я улучшил эту конфигурацию этим ответ serverfault.
Внутри соответствующей конфигурации vhost mod_security настроен следующим образом:
<IfModule security2_module>
SecRuleEngine On
SecAuditEngine RelevantOnly
SecAuditLog logs/audit.log
SecRequestBodyAccess On
SecAuditLogParts ABCFHJKZ
SecDefaultAction "phase:2,nolog,noauditlog,pass"
SecRule REQUEST_METHOD "^POST$" "id:'1234',phase:2,chain,allow,ctl:auditEngine=On"
SecRule REQUEST_URI "^\/en\/us\/$"
</IfModule>
В результате каждый запрос POST регистрируется в журнале аудита. Но только запрос POST на главную страницу https://<SITE>/en/us/
должны быть зарегистрированы. Насколько я понимаю, это должно быть сделано путем привязки ко второму SecRule, который соответствует URI запроса для данного регулярного выражения. Я также безуспешно пробовал разные версии регулярного выражения.
Это немного сбивает с толку, но некоторые действия, указанные в первом правиле, будут выполняться для каждого правила, совпадающего в цепочке, а некоторые - только если все правила совпадают (автор ModSecurity задним числом заявил, что было бы лучше поместить правила в последнее связанное правило, а не первое). Подробнее см. Здесь: https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual#chain:
Специальные правила контролируют использование действий в связанных правилах:
- Любые действия, которые влияют на поток правил (т. Е. Разрушающие действия, skip и skipAfter), могут использоваться только в стартере цепочки. Они будут выполнены только при совпадении всей цепочки.
- Правила, не нарушающие работу, можно использовать в любом правиле; они будут выполнены, если совпадает содержащее их правило, а не только когда совпадает вся цепочка.
- Действия с метаданными (например, id, rev, msg) можно использовать только в стартере цепочки.
Правило должно быть таким, чтобы ведение журнала включалось только при первом и второе правило соответствует:
SecRule REQUEST_METHOD "^POST$" "id:'1234',phase:2,chain,allow"
SecRule REQUEST_URI "^\/en\/us\/$" "ctl:auditEngine=On"
Обратите внимание, что это будет позволять правила и пропустить все будущие правила. Вам может быть лучше проходить вместо этого правило. Таким образом, он обязательно будет зарегистрирован, но по-прежнему будет выполнять другие правила. Однако, если это ваше единственное правило в соответствии с показанной вами конфигурацией, это не имеет большого значения, но все же хорошая практика.