Elasticsearch | Elasticsearch WAF 日誌優化指南—解決欄位爆炸問題

2025-02-20 更新

Elasticsearch WAF 日誌欄位爆炸?你需要 Elasticsearch WAF 優化!本指南教你透過 Logstash 設定、映射調整,優化 Elasticsearch 儲存與查詢效能,提高系統穩定性與日誌分析效率!


背景

還記得之前,我正在處理公司的 WAF 日誌時,遇到了一個讓人頭痛的問題。那時候我們的資安設備每天都在勤奮地防禦各種網路攻擊,產生了大量的日誌,這些日誌就像是第一線戰士的戰報一樣重要。為了方便分析這些「戰報」,我們使用了 Elasticsearch 這個強大的搜尋引擎來儲存和分析這些日誌。

但是,就在某一天,系統突然向我發出了警報!原來是駭客,他們不只是進行簡單的攻擊,還會在他們的攻擊payload中塞入各種奇奇怪怪的符號。這些特殊符號就像是給我們的日誌分析系統下了一個難題 —— 我們用來處理日誌的 Logstash 在解析這些內容時,開始瘋狂地產生大量的欄位,就像是一個不受控制的複製機器,最後導致 Elasticsearch 不堪負荷,直接舉白旗投降了,近期幫客戶導入Elasticsearch 也遇到類似問題,就先把它記錄起來。


問題描述

在 Elasticsearch 中,當查詢擴展匹配的欄位數超過預設限制(1024個欄位)時,會出現以下錯誤:

field expansion matches too many fields, limit: 1024, got: 1238

這個問題主要源於以下幾個原因:

  • 攻擊者注入的特殊字符導致 Parser 產生意外的欄位名稱
  • Logstash 的解析規則過於寬鬆
  • Elasticsearch 的動態映射機制自動為新欄位創建映射

相關 Elasticsearch 欄位說明:查詢字串文件


痛點分析

這個問題會帶來以下影響:

  • 系統性能下降
  • 儲存空間浪費
  • 查詢效率降低
  • 系統穩定性受影響
  • 安全事件分析效果不佳


解決方案


優化 Logstash 配置

a. 實作嚴格的欄位白名單

filter {
  prune {
    whitelist_names => [ 
      "timestamp", 
      "client_ip", 
      "request_uri", 
      "attack_type"
    ]
  }
}

b. 特殊字符處理

filter {
  mutate {
    gsub => [
      "field_name", "[^a-zA-Z0-9_-]", "_"
    ]
  }
}


Elasticsearch 配置優化

a. 調整欄位限制

{
  "persistent": {
    "indices.query.bool.max_clause_count": 2048
  }
}

b. 設置嚴格的映射規則

{
  "mappings": {
    "dynamic": "strict",
    "properties": {
      "timestamp": { "type": "date" },
      "client_ip": { "type": "ip" },
      "request_uri": { "type": "keyword" },
      "attack_type": { "type": "keyword" }
    }
  }
}

實際操作步驟

  1. 分析現有日誌

    • 收集樣本日誌
    • 識別必要欄位
    • 分析異常模式
  2. 實作 Parser 優化

    filter {
    grok {
    break_on_match => true
    match => {
      "message" => "%{TIMESTAMP_ISO8601:timestamp} %{IPV4:client_ip} %{GREEDYDATA:request_uri}"
    }
    tag_on_failure => ["_grokparsefailure"]
    }
    
    # 欄位驗證
    ruby {
    code => '
      event.to_hash.keys.each do |key|
        if key =~ /[^a-zA-Z0-9_-]/
          event.remove(key)
        end
      end
    '
    }
    
    # 保留白名單欄位
    prune {
    whitelist_names => [ "timestamp", "client_ip", "request_uri", "attack_type" ]
    }
    }
  3. 配置 Elasticsearch

    • 應用嚴格映射
    • 設置適當的欄位限制
    • 監控系統性能


效益

實施上述優化後,可以獲得以下好處:

  • 系統穩定性提升
  • 查詢性能改善
  • 儲存空間節省
  • 分析效率提高
  • 維護成本降低


實際案例

某金融機構在實施以上優化後,達到以下效果:

  • 欄位數量從原本的 1200+ 降至 50 以下
  • 查詢響應時間提升 60%
  • 儲存空間減少 40%
  • 系統穩定性明顯改善


結論

在處理 WAF 日誌時,欄位爆炸是一個常見但可以解決的問題。通過適當的配置和優化,我們可以建立一個更穩定、高效的日誌分析系統。關鍵在於:

  • 實作嚴格的欄位控制
  • 處理特殊字符
  • 使用適當的映射設置
  • 持續監控和優化

通過這些措施,我們不僅可以解決欄位數量過多的問題,還能提升整體系統的效能和可維護性。這對於需要處理大量 WAF 日誌的組織來說尤為重要。

快速跳轉目錄

✦ 集先鋒 Bimap – 企業建置高速穩定的海量日誌分析平台✦

集中不同的結構化資料和非結構化日誌,並進行關聯性的大數據整合,客製化儀表版、自訂事件告警、機器學習等等,以滿足各種大數據的應用場景和解決方案。