Какое правило я могу использовать в ModSecurity для регистрации полезной нагрузки POST для определенного сайта?
Мне нужно проверить полезную нагрузку POST для определенного веб-сайта (сервер довольно занят, и я не включаю ведение журнала POST для всего сервера).
Сервер LiteSpeed 5.0.7. SecRequestBodyAccess имеет значение "Вкл.".
Сначала я попытался с цепочкой правил: первый в фазе:1, чтобы соответствовать только запросам для моего желаемого хоста, но пост полезной нагрузки находится в фазе:2, и я не думаю, что смогу создать цепочку в 2 разных фазах.
Тогда я попытался использовать это:
SecRule REQUEST_METHOD "POST" "фаза:2, журнал,id:22222223
Но он ничего не записывает в modsec_audit.log.
Я делаю что-то не так или это связано с совместимостью LiteSpeed с ModSec?
В конце я также попробовал это правило для записи POST для всех запросов: SecRule REQUEST_METHOD "POST" "id:22222224,phase:2,ctl:auditEngine=On,log,pass".
Он регистрирует запрос, но не тело запроса (-C-- группа si отсутствует в аудите modsec).
2 ответа
Аналогично этому вопросу: Как получить mod_security для регистрации всех данных POST?
Вы правы, вы не можете связать два правила в двух разных фазах, однако фаза 2 имеет доступ ко всей информации фазы 1, поэтому просто переместите это в фазу 2, если вы хотите сделать это таким образом.
Это правило, которое вы дали:
SecRule REQUEST_METHOD "POST" "phase:2,log,id:22222223
Это бессмысленно. Это будет регистрировать (в основном журнале), что запрос POST был получен, но без тела POST.
Он также будет регистрироваться в AuditEngine в зависимости от того, какое значение установлено в вашем SecAuditEngine:
- Если для SecAuditEngine установлено значение "Вкл", то все регистрируется в журнале аудита, и указанное правило не требуется. Это быстро заполняет файлы журнала, поэтому не рекомендуется.
- Если для SecAuditEngine установлено значение RelevantOnly, он также будет регистрироваться здесь.
- Если для SecAuditEngine установлено значение "Выкл.", Оно никогда не будет записано в журнал аудита.
Обычно лучше, чтобы SecAuditEngine был установлен в RelevantOnly (что, я подозреваю, является тем, что у вас уже есть), но если это не так, то тело не может быть зарегистрировано в AuditLog
Возможно, лучший способ сделать это с этим другим правилом, которое вы дали с помощью действия ctl:
SecRule REQUEST_METHOD "POST" "id:22222224,phase:2,ctl:auditEngine=On,log,pass"
Это заставляет AuditEngine быть включенным для запросов на публикацию, даже если AuditLog установлен на Off. Также будет показано, что вы применили это правило, чтобы превратить его в то, что на самом деле не является необходимым или полезным, поэтому я бы изменил "log" на "nolog". Запрос по-прежнему будет регистрироваться (так как для audEngine было установлено значение yes), но это правило, вносящее это изменение, не будет. Кстати, когда вы используете ctl, это влияет только на этот запрос, поэтому AuditEngine будет сброшен обратно для следующего запроса.
Как вы утверждаете, это работает, за исключением того, что у вас нет C-части. Это устанавливается с SecAuditLogParts. По умолчанию это включает в себя части C, так что угадайте, что означает, что вы должны были изменить значение по умолчанию? Была ли какая-то причина для этого?
В любом случае вы можете установить это, чтобы включить части C:
SecAuditLogParts ABCFHZ
SecRule REQUEST_METHOD "POST" "id:22222224,phase:2,ctl:auditEngine=On,nolog,pass"
Или, если вы хотите, чтобы C-компоненты регистрировались при запуске этого правила, вы можете сделать это как часть правила:
SecRule REQUEST_METHOD "POST" "id:22222224,phase:2,ctl:auditEngine=On,ctl:auditLogParts=ABCFHZ,nolog,pass"
Другая вещь, о которой следует знать, это то, что запросы POST могут регистрировать конфиденциальные данные (пароли, номера кредитных карт, номера социального страхования... и т. Д.). Регистрация их не рекомендуется и может также нарушить политику компании и / или любые стандарты, которым вы следуете (например, соответствие PCI). Поэтому рекомендуется настроить правила очистки для маскировки этих данных. Смотрите здесь для получения дополнительной информации: https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual
Убедитесь в следующем:
Есть
SecRequestBodyAccess On
Попробуйте использовать "audlog" вместо "log"
Если у вас есть пользовательский SecAuditLogParts, убедитесь, что он включает тело запроса