Назад | Перейти на главную страницу

mod_security: как регистрировать запросы POST для определенного URI?

Я пытаюсь настроить 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"

Обратите внимание, что это будет позволять правила и пропустить все будущие правила. Вам может быть лучше проходить вместо этого правило. Таким образом, он обязательно будет зарегистрирован, но по-прежнему будет выполнять другие правила. Однако, если это ваше единственное правило в соответствии с показанной вами конфигурацией, это не имеет большого значения, но все же хорошая практика.