Попытка включить журналирование тела POST с помощью modsecurity

Вопрос или проблема

Я работал над тем, чтобы получить журналирование тела POST-запроса с помощью ModSecurity.

В файле modsecurity.conf я включил
/usr/lib/apache2/modules/mod_authz_core.so

это мой полный файл modsecurity.conf:

SecRuleEngine DetectionOnly
SecRequestBodyAccess On
SecRule REQUEST_HEADERS:Content-Type "^(?:application(?:/soap\+|/)|text/)xml" \
     "id:'200000',phase:1,t:none,t:lowercase,pass,nolog,ctl:requestBodyProcessor=XML"

SecRule REQUEST_HEADERS:Content-Type "^application/json" \
     "id:'200001',phase:1,t:none,t:lowercase,pass,nolog,ctl:requestBodyProcessor=JSON"

SecRequestBodyLimit 13107200
SecRequestBodyNoFilesLimit 131072
SecRequestBodyLimitAction Reject
SecRequestBodyJsonDepthLimit 512
SecArgumentsLimit 1000
SecRule &ARGS "@ge 1000" \
"id:'200007', phase:2,t:none,log,deny,status:400,msg:'Не удалось полностью разобрать тело запроса из-за большого количества аргументов',severity:2"

SecRule REQBODY_ERROR "!@eq 0" \
"id:'200002', phase:2,t:none,log,deny,status:400,msg:'Не удалось разобрать тело запроса.',logdata:'%{reqbody_error_msg}',severity:2"

SecRule MULTIPART_STRICT_ERROR "!@eq 0" \
"id:'200003',phase:2,t:none,log,deny,status:400, \
msg:'Тело многочастного запроса не прошло строгую проверку: \
PE %{REQBODY_PROCESSOR_ERROR}, \
BQ %{MULTIPART_BOUNDARY_QUOTED}, \
BW %{MULTIPART_BOUNDARY_WHITESPACE}, \
DB %{MULTIPART_DATA_BEFORE}, \
DA %{MULTIPART_DATA_AFTER}, \
HF %{MULTIPART_HEADER_FOLDING}, \
LF %{MULTIPART_LF_LINE}, \
SM %{MULTIPART_MISSING_SEMICOLON}, \
IQ %{MULTIPART_INVALID_QUOTING}, \
IP %{MULTIPART_INVALID_PART}, \
IH %{MULTIPART_INVALID_HEADER_FOLDING}, \
FL %{MULTIPART_FILE_LIMIT_EXCEEDED}'"

SecStreamInBodyInspection On
SecRule MULTIPART_UNMATCHED_BOUNDARY "@eq 1" \
    "id:'200004',phase:2,t:none,log,deny,msg:'Парсер многочастных данных обнаружил возможную непр matched границу.'"

SecPcreMatchLimit 1000
SecPcreMatchLimitRecursion 1000

SecRule TX:/^MSC_/ "!@streq 0" \
    "id:'200005',phase:2,t:none,log,deny,msg:'Внутренняя ошибка ModSecurity: %{MATCHED_VAR_NAME}'"

SecResponseBodyAccess Off
SecResponseBodyMimeType text/plain text/html text/xml
SecResponseBodyLimit 524288
SecResponseBodyLimitAction ProcessPartial
SecTmpDir /tmp/
SecDataDir /tmp/
SecAuditEngine RelevantOnly
SecAuditLogRelevantStatus "^(?:5|4(?!04))"
SecAuditLogParts ABCH
SecAuditLogType Serial
SecAuditLog /var/log/modsec_audit.log
SecArgumentSeparator &
SecCookieFormat 0
SecUnicodeMapFile unicode.mapping 20127
SecStatusEngine Off

Теперь журналы на самом деле выводят только секции A, B, H, как указано ниже:

--7dd1fc75-A--
[12/Dec/2024:17:57:15.512829 +0000] Z1sj-0SllWNcXRhkj1sZUAAAAEo 

--7dd1fc75-B--
POST /logs HTTP/1.1

-7dd1fc75-E--

--7dd1fc75-H--
Apache-Error: [file "mod_authz_core.c"] [line 879] [level 3] AH01630: клиент отвергнут конфигурацией сервера: /var/www/html/logs

Запрос, для которого я хочу рассмотреть это тело, на самом деле получает 403, как вы можете видеть выше. Но я все равно хочу видеть тело POST-запроса.

Здесь есть несколько вопросов, связанных с этим, но я попробовал все. Может кто-нибудь помочь мне зафиксировать тело POST.

Ответ или решение

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

Пошаговое руководство по настройке ModSecurity для логирования тела POST-запросов

  1. Проверка включения обработки тел запросов

    Вы уже включили опции SecRequestBodyAccess On и установили лимиты для тела запросов с помощью SecRequestBodyLimit и SecRequestBodyNoFilesLimit. Это правильные шаги для обработки тела POST-запросов.

  2. Настройка правил для логирования

    Вам необходимо убедиться, что модуль ModSecurity настроен на логирование тел запросов. Для этого можно использовать следующие правила. Добавьте или проверьте их наличие в вашем файле конфигурации modsecurity.conf:

    SecRule REQUEST_BODY "@rx .*" \
       "id:300000, phase:2, t:none, log, logdata:'%{REQUEST_BODY}', msg:'POST Request Body logged.'"

    Это правило будет ловить все POST-запросы и логировать их тела, когда они будут обработаны на фазе 2.

  3. Проблемы с конфигурацией Apache

    Из ваших логов видно сообщение об ошибке 403, что может указывать на проблемы с правами доступа. Убедитесь, что в вашем конфигурационном файле Apache, а также в файле .htaccess (если используется), разрешены соответствующие действия для URL-адреса, на который отправляется POST-запрос. Проверьте раздел <Directory> и параметры Require all granted. Например:

    <Directory "/var/www/html/logs">
       Require all granted
    </Directory>

    Проблема с 403 может предотвратить выполнение других правил, поэтому важно убедиться, что серверная конфигурация разрешает доступ к этому маршруту.

  4. Анализив логов

    После того, как вы внесете изменения, очистите логи ModSecurity и протестируйте отправку POST-запроса снова. Проверьте файл журнала /var/log/modsec_audit.log, где должны отображаться тела запросов:

    --7dd1fc75-A--
    [12/Dec/2024:17:57:15.512829 +0000] Z1sj-0SllWNcXRhkj1sZUAAAAEo 
    
    --7dd1fc75-B--
    POST /logs HTTP/1.1
    
    --7dd1fc75-C--
    {
       "example": "data"
    }
    
    --7dd1fc75-E--
    
    --7dd1fc75-H--
  5. Общий аудит конфигурации

    Если логирование по-прежнему не срабатывает, убедитесь в том, что Apache и модуль ModSecurity правильно загружены и активны. Проверьте зависимости и совместимость версий.

Заключение

Соблюдая указанные выше шаги, вы должны иметь возможность корректно настроить логирование тела POST-запросов в ModSecurity. Полученные логи помогут вам более эффективно отслеживать и диагностировать проблемы с запросами на вашем веб-сервере. Не забывайте, что ясность и точность ваших правил могут существенно повлиять на качество логирования.

Оцените материал
Добавить комментарий

Капча загружается...