Я возился с mod_security, чтобы регистрировать полезные данные POST-запроса для определенного URI.
Как указано в этом ответе https://serverfault.com/a/729079/292993 на аналогичный вопрос AuditEngine mod_security работает так:
Он также будет регистрироваться в AuditEngine в зависимости от того, какое значение SecAuditEngine установлено на:
- Если для параметра SecAuditEngine установлено значение «Вкл.», Тогда все регистрируется в журнале аудита, и указанное выше правило не требуется. Это быстро заполняет файлы журнала, поэтому не рекомендуется.
- Если для параметра SecAuditEngine установлено значение RelevantOnly, тогда он будет регистрировать в системе аудита только определенные коды возврата (как определено вашим SecAuditLogRelevantStatus). Обычно это делается только для ошибок (5xx) или отказа в доступе (4xx - хотя обычно без ошибок 404). Поскольку вы не запрещаете доступ (и, предположительно, не хотели бы!), Это не будет записано в журнал аудита.
- Если для параметра SecAuditEngine установлено значение Выкл., Он никогда не будет записываться в журнал аудита.
Обычно лучше установить для SecAuditEngine значение RelevantOnly (что, как я подозреваю, у вас уже установлено). Правильный способ сделать это - использовать другое правило, которое вы указали с помощью действия ctl:
SecRule REQUEST_METHOD "POST" "id:22222224,phase:2,ctl:auditEngine=On,log,pass"
Это заставляет AuditEngine быть включенным для почтовых запросов - даже если запрос завершается успешно, что обычно не регистрируется.
Имея это в виду, в чем смысл действия auditlog
если мне нужно работать с ctl
включить AuditEngine на уровне запроса, чтобы что-то записывать в журнал аудита?
Я написал тот ответ, на который вы ссылались, и после небольшого тестирования после прочтения вашего вопроса понял, что он неточен. Буду обновлять.
После некоторых экспериментов я обнаружил следующее:
Если для SecAuditEngine установлено значение На, то журнал аудита не будет иметь реального эффекта, так как запрос все равно будет зарегистрирован.
Если для SecAuditEngine установлено значение Выключено, то журнал аудита не будет иметь никакого эффекта, так как запрос в любом случае не будет зарегистрирован.
Если для SecAuditEngine установлено значение RelevantOnly, то auditlog приведет к регистрации срабатывания правила. Даже если вы не запрещаете доступ (это ошибка в приведенном выше ответе).
Так в чем разница между auditlog
и ctl:auditEngine=On
? Ну, немного, но я вижу два основных отличия:
Auditlog
не будет работать, если SecAuditEngine выключен. В то время как ctl:auditEngine=On
буду работать.
ctl:auditEngine=On
можно использовать для включения аудита без отображения фактического правила. Например, если у вас есть следующее:
SecRule REQUEST_METHOD "POST" "id:22222224,phase:2,ctl:auditEngine=On,nolog,pass"
Тогда запрос будет зарегистрирован в журнале аудита, но не будет упоминания о правиле 22222224 (поскольку оно установлено на nolog
). Это может быть полезно или нет: наличие правила 22222224 может добавить путаницы, поскольку с этим правилом нет реальной проблемы безопасности (оно просто используется для включения AuditEngine), и, возможно, вы хотите, чтобы в журнале аудита и ошибок регистрировались только настоящие правила безопасности. . С другой стороны, это может сбить с толку людей, почему что-то находится в журнале аудита, а не срабатывает очевидное правило, которое могло бы его туда поместить.
В конечном счете, нет большой разницы, и больше дело вкуса, что вы хотите использовать.