Graylog:管道規則中的欄位未顯示在搜尋數據中
我正在嘗試使用 Graylog 來獲取系統日誌和 Snort 警報。我已經按照此處的範例將我的 snort 警報放入 Graylog,然後繼續為單獨的 IDS 日誌源添加另一個流、管道和規則。我基本上複製了 Snort 範例並更改了正則表達式以從新日誌源中提取相關欄位。當我從搜尋選項卡中選擇一條消息然後選擇“針對流進行測試”時,新的正則表達式確實可以測試。
Streams
從Graylog 頂部的菜單項中選擇時,消息也會顯示在我的新流下。問題是,在管道規則中,我使用該
set_field()
函式從正則表達式中分配匹配組的值。我在規則中有九個欄位,set_field()
但它們都沒有出現在搜尋數據中。為什麼是這樣?我需要add_field()
像在 GELF 範例中那樣首先使用嗎?我假設set_field()
自動這樣做,因為這就是上面連結中的 snort 範例的工作方式。附加了我的管道規則,該規則附加到 Graylog 中的 IDrops 流。rule "Extract IDropS fields" when has_field("message") then let m = regex("^([a-z]+)\\s.*(TCP|UDP|ICMP)\\s([0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}):(\\d{1,5})\\s([0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}):(\\d{1,5}).*SnortSid.*:([0-9]+):([0-9]+)\\s(.*)$", to_string($message.message)); set_field("snort_alert", false); set_field("sd_host", m["0"]); set_field("sd_proto", m["1"]); set_field("sd_src", m["2"]); set_field("sd_sport", m["3"]); set_field("sd_dst", m["4"]); set_field("sd_dport", m["5"]); set_field("sd_sid", (m["6"])); set_field("sd_rev", m["7"]); set_field("sd_desc", m["8"]); end
問題可能是您需要更改螢幕
Message Processors Configuration
下的順序。Configurations
預設情況下它是
GeoIP Processor > Pipeline Processor > Message Filter Chain
.正如Greylog 官方文件中關於“配置消息處理器”下管道使用情況的記錄,您需要將其更改為
Message Filter Chain > Pipeline Processor > GeoIP Processor
.在新安裝的 2.2 Graylog 在 2.1 下工作了幾個星期後,我忘記了這樣做。症狀與您的相同,snort 流規則和管道規則匹配,模擬工作,但實際上沒有設置任何欄位,也沒有錯誤跡象,但奇怪的是,如果我將管道連接到預設的“所有消息”流,它會起作用,我不想要。現在我改變了這個消息處理器的順序,snort 管道按預期工作。