背景
最近公司網站經常被漏洞掃描,雖然並沒有什麼漏洞給對方利用,但是每次掃描我們也必須要察覺到,如果掃描的量太大,可以考慮從公有云的安全組上禁用掉這個IP,所以需要統計指定時間內每個IP的訪問次數,這是一個手動的過程,非常麻煩。
ElasticAlert目前已經放棄維護了,如果不是依賴很重,建議直接使用新版本:https://github.com/jertel/elastalert2(看簡介,支援Helm,對kubernetes更加友好)
elasticalert的基礎配置可參考:https://www.cnblogs.com/GXLo/p/9230362.html
配置
name: Too Many Requests
# 告警型別
type: metric_aggregation
# 索引
index: web-nginx-access-*
# 指定聚合的key,這裡用的是客戶端的IP
metric_agg_key: remote_addr.keyword
# 聚合型別,支援avg,max,min等
metric_agg_type: value_count
# 只有日誌中,存在這個key,才會被聚合進去
query_key: remote_addr.keyword
# 如果 5min中的聚合資料,大於這個,就會觸發告警
max_threshold: 10000
# 快取時間,每次會查詢10min內的資料
buffer_time:
minutes: 10
# 桶的間隔時間
bucket_interval:
minutes: 5
sync_bucket_interval: true
# 查詢DSL,這裡還是查詢所有,沒有使用agg 查詢語句
filter:
- query:
match_all: {}
具體引數詳解,可檢視官方文件
告警效果
to many request on 178.128.81.2