mirror of
https://github.com/Rain-kl/OpenFlare.git
synced 2026-10-01 22:46:38 +08:00
feat(waf): 自动 IP 组 lookback 支持 60m/1h 时长写法
将 lookback_minutes 替换为 lookback,移除最小 5 分钟回看限制,并兼容旧字段。
This commit is contained in:
@@ -30,6 +30,7 @@ sidebar: false
|
||||
|
||||
- IP 组自动规则中的 `StatusCount` / `StatusRatio` 支持状态码类写法(如 `"2xx"`、`"4xx"`、`"5xx"`),便于按整类错误率匹配。
|
||||
- IP 组同步间隔下限由 5 分钟调整为 1 分钟,便于更频繁同步自动/订阅名单。
|
||||
- 自动 IP 组回看窗口字段由 `lookback_minutes` 调整为 `lookback`,支持 `60m`、`1h` 等时长写法,并移除最小 5 分钟限制(兼容旧字段)。
|
||||
|
||||
### 修复
|
||||
|
||||
|
||||
+2
-2
@@ -19675,8 +19675,8 @@ const docTemplate = `{
|
||||
"waf.IPGroupAutoTestResult": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"lookback_minutes": {
|
||||
"type": "integer"
|
||||
"lookback": {
|
||||
"type": "string"
|
||||
},
|
||||
"matched_count": {
|
||||
"type": "integer"
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
|
||||
```json
|
||||
{
|
||||
"lookback_minutes": 60,
|
||||
"lookback": "1h",
|
||||
"rules": [
|
||||
{
|
||||
"name": "单 IP 404 高频扫描",
|
||||
@@ -22,7 +22,7 @@
|
||||
|
||||
| 字段 | 类型 | 作用 |
|
||||
| --- | --- | --- |
|
||||
| `lookback_minutes` | number | 每次执行时回看多少分钟内的请求日志。未填写时默认 60 分钟,最小 5 分钟,最大 43200 分钟。 |
|
||||
| `lookback` | string | 回看窗口时长,使用 Go Duration 写法,例如 `30m`、`1h`、`90m`。未填写时默认 `1h`,最大 30 天。兼容旧字段 `lookback_minutes`(整数分钟)。 |
|
||||
| `rules` | array | 自动规则列表。任意一条规则命中时,该 IP 会进入自动 IP 组名单。 |
|
||||
| `rules[].name` | string | 规则名称,只用于界面展示和错误提示。 |
|
||||
| `rules[].expr` | string | Expr 表达式,必须返回布尔值。 |
|
||||
@@ -31,7 +31,7 @@
|
||||
|
||||
自动规则不是逐条请求判断,而是先按单个客户端 IP 聚合:
|
||||
|
||||
1. Server 读取最近 `lookback_minutes` 分钟内的请求日志。
|
||||
1. Server 读取最近 `lookback` 时长内的请求日志。
|
||||
2. 按 `remote_addr` 归一化后的 IP 分组。
|
||||
3. 为每个 IP 计算请求数、404 数、直连 IP Host 次数等指标。
|
||||
4. 逐个 IP 执行 `rules[].expr`。
|
||||
@@ -115,7 +115,7 @@ Host 是否为“通过 IP 访问”按请求日志中的 `Host` 字段判断:
|
||||
|
||||
```json
|
||||
{
|
||||
"lookback_minutes": 60,
|
||||
"lookback": "1h",
|
||||
"rules": [
|
||||
{
|
||||
"name": "高频 404 扫描",
|
||||
@@ -129,7 +129,7 @@ IP 直连访问异常:
|
||||
|
||||
```json
|
||||
{
|
||||
"lookback_minutes": 30,
|
||||
"lookback": "30m",
|
||||
"rules": [
|
||||
{
|
||||
"name": "IP 直连访问异常",
|
||||
@@ -143,7 +143,7 @@ IP 直连访问异常:
|
||||
|
||||
```json
|
||||
{
|
||||
"lookback_minutes": 120,
|
||||
"lookback": "2h",
|
||||
"rules": [
|
||||
{
|
||||
"name": "异常错误率",
|
||||
@@ -157,7 +157,7 @@ IP 直连访问异常:
|
||||
|
||||
```json
|
||||
{
|
||||
"lookback_minutes": 120,
|
||||
"lookback": "2h",
|
||||
"rules": [
|
||||
{
|
||||
"name": "高 4xx 或 5xx 占比",
|
||||
@@ -171,7 +171,7 @@ IP 直连访问异常:
|
||||
|
||||
```json
|
||||
{
|
||||
"lookback_minutes": 60,
|
||||
"lookback": "1h",
|
||||
"rules": [
|
||||
{
|
||||
"name": "排除可信 IP 的 404 扫描",
|
||||
|
||||
+2
-2
@@ -19668,8 +19668,8 @@
|
||||
"waf.IPGroupAutoTestResult": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"lookback_minutes": {
|
||||
"type": "integer"
|
||||
"lookback": {
|
||||
"type": "string"
|
||||
},
|
||||
"matched_count": {
|
||||
"type": "integer"
|
||||
|
||||
+2
-2
@@ -3872,8 +3872,8 @@ definitions:
|
||||
type: object
|
||||
waf.IPGroupAutoTestResult:
|
||||
properties:
|
||||
lookback_minutes:
|
||||
type: integer
|
||||
lookback:
|
||||
type: string
|
||||
matched_count:
|
||||
type: integer
|
||||
matched_ips:
|
||||
|
||||
Reference in New Issue
Block a user