Я использую 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 года.
Вы уверены, что Modsecurity запущен? Я не вижу SecRuleEngine On
. Кроме того, вам необходимо удалить SecRuleRemoveById 949110
, так как это важный идентификатор правила, который необходим для работы свойства ModSecurity.
P.S: - Хотел прокомментировать, но не хватает репутации.
Здесь дежурит разработчик 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. Я должен был удалить его, прежде чем публиковать свой вопрос.
Строка уже есть, она выпала из-за ошибки копирования/вставки. Это отладочная настройка, поэтому я хотел увидеть следующие запросы к заблокированным.