Конфигурация журнала ModSecurity WAF

Я использую ModSecurity WAF для своего приложения, которое определено внутри входа k8s.

Конфигурация выглядит следующим образом:

nginx.ingress.kubernetes.io/enable-owasp-core-rules: "true"
nginx.ingress.kubernetes.io/enable-modsecurity: "true"
nginx.ingress.kubernetes.io/modsecurity-snippet: |
  SecAuditEngine RelevantOnly
  SecRuleEngine On
  SecAuditLogParts AZ
  SecAuditLog /dev/stdout
  SecAuditLogFormat JSON
  SecRequestBodyAccess On

  SecRequestBodyLimit 104857600
  SecRequestBodyNoFilesLimit 5242880
  SecRequestBodyLimitAction Reject
  SecAction "id:900200,phase:1,nolog,pass,t:none,\
    setvar:tx.allowed_methods=GET HEAD POST OPTIONS PUT PATCH DELETE"

  SecRuleRemoveById 949110
  SecRule REQUEST_HEADERS:Content-Type "^application/[a-z0-9.-]+[+]json"  "id:9990001,phase:1,t:none,t:lowercase,pass,log,ctl:requestBodyProcessor=JSON"

Я установил SecAuditLogParts на AZ, которые являются обязательными частями. Я пытаюсь избежать регистрации всего запроса или, по крайней мере, его заголовков, поскольку заголовки содержат токен носителя, который я не хочу делать видимым в журналах, и хотя я удалил B из значения SecAuditLogParts, это все еще показывает. Вот как это отображается в моих журналах:

{
  "transaction": {
    "client_ip": ,
    "time_stamp": ,
    "server_id": "",
    "client_port": ,
    "host_ip": ,
    "host_port": ,
    "unique_id": ,
    "request":
      {
        headers: { ... },
        ...
       },
    "response": { ... }, 
    "producer": { ... },
    "messages": { ... },
}

Как мне регистрировать выходные данные WAF без заголовков или, по крайней мере, без токена?

Я нашел SanitiseRequestHeader , который попробовал, и он вернул ошибку при развертывании, а посмотрев сообщение в Интернете, я обнаружил, что это ошибка, о которой сообщалось с октября 2023 года.

Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
0
0
176
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы уверены, что Modsecurity запущен? Я не вижу SecRuleEngine On. Кроме того, вам необходимо удалить SecRuleRemoveById 949110, так как это важный идентификатор правила, который необходим для работы свойства ModSecurity.

P.S: - Хотел прокомментировать, но не хватает репутации.

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

j0zeft 22.04.2024 14:49

Здесь дежурит разработчик CRS. Я не знаю, почему ваша конфигурация SecAuditLogParts AZ не работает. Но если вам не нужны журналы транзакций, можете ли вы попробовать отключить ведение журнала аудита с помощью SecAuditEngine Off или управляющего оператора (более детального) ctl:auditEngine=Off (см. также https://github.com/owasp-modsecurity/ModSecurity/wiki) /Reference-Manual-(v3.x)#user-content-SecAuditEngine и https://github.com/owasp-modsecurity/ModSecurity/wiki/Reference-Manual-(v3.x)#user-content- ctl)

И, как уже упоминал CRS-Dev: вам нужно удалить SecRuleRemoveById 949110, если вы хотите, чтобы ваш WAF работал правильно (949110 — это правило блокировки!).

Ответ принят как подходящий

После долгих поисков я связался с основной командой DevOps в своей организации и узнал, что существует глобальный вход для всего кластера AKS (я не знаю, как именно это реализовано) и что мы можем добавить его в настройки в пределах наши собственные развертывания. Благодаря этой проблеме мы все вместе узнали, что не можем переопределить уже существующие настройки в глобальной входной конфигурации, но можем только добавлять или отключать правила!

Они исправили глобальное ведение журнала в своей конфигурации, и это отразилось в нашем пространстве имен.

Отказ от ответственности: SecRuleRemoveById 949110 был предназначен только для продолжения рабочего процесса во время тестирования с параметром для обнаружения только значения false. Я должен был удалить его, прежде чем публиковать свой вопрос.

Другие вопросы по теме