我正在为我的应用程序使用在 k8s 入口中定义的 ModSecurity WAF。
配置如下:
nginx.ingress.kubernetes.io/enable-owasp-core-rules: "true"
nginx.ingress.kubernetes.io/enable-modsecurity: "true"
nginx.ingress.kubernetes.io/modsecurity-snippet: |
SecAuditEngine RelevantOnly
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
,这是强制性部分。我试图避免记录整个请求或至少记录其中的标头,因为标头包含一个不记名令牌,我不想使其在日志中可见,即使我从 SecAuditLogParts
值中删除了 B,它仍在显示。以下是它在我的日志中的显示方式:
{
"transaction": {
"client_ip": ,
"time_stamp": ,
"server_id": "",
"client_port": ,
"host_ip": ,
"host_port": ,
"unique_id": ,
"request":
{
headers: { ... },
...
},
"response": { ... },
"producer": { ... },
"messages": { ... },
}
如何在没有标头或至少没有令牌的情况下记录 WAF 输出?
我找到了我尝试过的
SanitiseRequestHeader
,它在部署时返回了错误,通过在线查找消息,我发现这是一个bug,自 2023 年 10 月以来报告
SecRuleEngine On
。另外,您需要删除
SecRuleRemoveById 949110
,因为这是一个重要的规则 ID,并且是 ModSecurity 正常工作所必需的。P.S:-我想发表评论,但没有足够的代表。