Graylog:管道规则中的字段未显示在搜索数据中

Graylog:管道规则中的字段未显示在搜索数据中

我正在尝试使用 Graylog 来记录系统日志和 Snort 警报。我遵循了示例这里将我的 snort 警报放入 Graylog,然后继续为单独的 IDS 日志源添加另一个流、管道和规则。我基本上复制了 Snort 示例并更改了正则表达式以从新日志源中提取相关字段。当我从搜索选项卡中选择一条消息,然后选择“针对流进行测试”时,新的正则表达式确实测试成功。当从StreamsGraylog 顶部的菜单项中选择时,消息也会显示在我的新流下。

问题是,在管道规则中,我使用函数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

答案1

问题可能是您需要更改屏幕Message Processors Configuration下的顺序。Configurations

默认情况下是GeoIP Processor > Pipeline Processor > Message Filter Chain

据记载Greylog 官方文档关于管道的使用在“配置消息处理器”下,您需要将其更改为Message Filter Chain > Pipeline Processor > GeoIP Processor

在 2.1 版本下运行了几周后,我忘记在新安装的 2.2 Graylog 上执行此操作。症状与您的相同,snort 流规则和管道规则匹配,模拟有效,但实际上没有设置任何字段,也没有错误迹象,但奇怪的是,如果我将管道连接到默认的“所有消息”流,它就会工作,而我不想要。现在我更改了这个消息处理器顺序,snort 管道按预期工作。

答案2

我不确定这是否是正确的方法,但我将所有管道规则添加到默认溪流 (系统/管道 > 管道 > 默认流 > 编辑连接..然后添加您的自定义管道),然后我的所有字段都开始显示在搜索数据中。

相关内容