Graylog

Graylog:管道規則中的欄位未顯示在搜尋數據中

  • February 24, 2017

我正在嘗試使用 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 管道按預期工作。

引用自:https://serverfault.com/questions/822886