静看光阴荏苒
不管不顾不问不说也不念

CrowdSec AppSec WAF误报处理

CrowdSec常规的白名单不能用于启用了CRS的AppSec WAF,如果是被CRS规则拦截的,则最好使用插件的方式来排除。创建插件目录,例如grafana-exclusions:

mkdir -p /var/lib/crowdsec/data/crs-plugins/grafana-exclusions

创建*-before.conf文件,例如grafana-before.conf:

nano /var/lib/crowdsec/data/crs-plugins/grafana-exclusions/grafana-before.conf

文件名必须以-before.conf结尾,这样包含的规则才会在CRS主规则集执行之前生效(才能提前排除规则或更改参数)写入SecRule规则:

SecRule REQUEST_FILENAME "@beginsWith /apis/dashboard.grafana.app/" \
    "id:9900001,\
    phase:1,\
    pass,\
    nolog,\
    ctl:ruleRemoveById=911100,\
    ctl:ruleRemoveById=932115,\
    ctl:ruleRemoveById=942100"

SecRule REQUEST_FILENAME "@beginsWith /api/ds/query" \
    "id:9900002,\
    phase:1,\
    pass,\
    nolog,\
    ctl:ruleRemoveById=942100"

SecRule REQUEST_FILENAME "@beginsWith /api/datasources" \
    "id:9900003,\
    phase:1,\
    pass,\
    nolog,\
    ctl:ruleRemoveById=911100,\
    ctl:ruleRemoveById=931100"

1.排除规则自身的ID最好从9900001开始,避免与其它的规则ID冲突。

2.排除规则不会写没关系,只要能找到误报的规则ID和详情,后面的事交给AI就行了,AI会帮你写排除规则。

误报的规则ID,可以通过这个命令查询:

cscli alerts list

找到ID后,再用这个命令查看详情:

cscli alerts inspect 24705

会输出类似下面这样的内容:

################################################################################################
 - ID           : 24705
 - Date         : 2026-08-14T04:26:51Z
 - Machine      : 33229323947d41878f3730daae8f8f340mkPL0rvRql9cJd3
 - Simulation   : false
 - Remediation  : false
 - Kind         : waf
 - Reason       : anomaly score block: anomaly: 8, 
 - Events Count : 5
 - Scope:Value  : Ip:130.12.180.77
 - Country      : US
 - AS           : Railnet LLC
 - Begin        : 2026-08-14T04:26:50Z
 - End          : 2026-08-14T04:26:50Z
 - UUID         : edf7d1f7-3d6f-41c1-99e8-b55a64aea6ef
 - Context  :
╭───────────────┬──────────────────────────────────────────────────────────────╮
│      Key      │                             Value                            │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ ja4h          │ ge11nn010000_b8bcd45ac095_000000000000_000000000000          │
│ matched_zones │ REQUEST_HEADERS.Host                                         │
│ matched_zones │ REQUEST_BASENAME                                             │
│ matched_zones │ TX.extension                                                 │
│ method        │ GET                                                          │
│ msg           │ Host header is a numeric IP address                          │
│ msg           │ URL file extension is restricted by policy                   │
│ name          │ native_rule:920350                                           │
│ name          │ native_rule:920440                                           │
│ target_uri    │ /config.php.bak                                              │
│ user_agent    │ Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 │
│               │ (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36           │
╰───────────────┴──────────────────────────────────────────────────────────────╯

触发的规则ID是920350和920440,触发的URI是/config.php.bak,你直接把这些内容全部复制给AI,让AI写排除规则就行了,当然我这里只是演示,这并不是一个真正的误报。

建议每次添加或者修改规则后,先检查一遍有无错误:

crowdsec -t

没问题再重载配置:

systemctl reload crowdsec
赞(0)
未经允许不得转载:荒岛 » CrowdSec AppSec WAF误报处理
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

分享创造快乐

广告合作资源投稿