syslog。你可能听说过这一点,特别是如果你进入监控或安全。 Syslog被认为是系统可以将日志发送到其他系统的常见,统一的方式。 Linux支持Syslog,许多网络和安全设备支持Syslog作为共享他们的日志的方式。另一方面,Syslog服务器正在接收所有Syslog消息。理论上听起来很棒 - 具有一种简单,常用的方式来表示日志消息并跨系统发送它们。
现实不能从中得到进一步。 Syslog不是一件事 - 有多种“标准”,其中每一个都是不正确的,而不是不是不正确的。许多供应商都有自己的代表数据的方式,这一切都是一个大混乱。
首先,RFCS。有两个RFCS - RFC3164(“旧”或“BSD”Syslog)和RFC5254(过时的新变种3164)。 RFC3164不是标准,而RFC5254是(主要是)。
这些RFC涉及Syslog消息的内容。然后有RFC6587,它是关于通过TCP传输Syslog消息。这也不是标准,而是“观察”。 Syslog通常通过UDP传输,因此将其拟合到TCP需要一些额外的考虑因素。现在也加入TLS ONTOP。
然后有内容格式。 RFC5254定义了一个键值结构,但RFC 3164没有 - 在Syslog标题只是非结构化消息字符串之后的所有内容。存在许多自定义格式。例如,防火墙供应商倾向于定义自己的消息格式。至少他们经常被记录(例如,检查WatchGuard和SonicWALL),但解析它们需要大量的关于该供应商的选择的自定义知识。但是,文档没有完全反映现实。
而不是特定于供应商的格式,也有像CEF和不太受欢迎的LEEF等事实标准。它们定义了消息的结构,实际上是独立于Syslog的(您可以将CEF / LEEF写入文件)。但是当Syslog用于传输CEF / LEEF时,该消息应尊重RFC3164。
现在是“有趣”部分 - 不正确的实现。许多供应商并不真正尊重这些文件。他们甚至是Syslog标题中最简单的东西的自己的变化。日期格式到处都是,主机有时丢失,优先级有时丢失,非主机标识符用于替代主机,冒号轻浮放置。
解析所有这些烂摊子是非常“言辞”,有大量的正方Xes试图考虑所有供应商怪癖。我正在研究一个暹粒,我们的收藏家是开源的 - 您可以查看我们的Syslog包。一些特定于供应商的解析器尚未丢失,但我们正在不断添加新的。 CEF Parser中的日期格式讲述了一个很好的故事。
如果它只是两个RFC,其中一个具有一个De-Facto消息格式标准,以及TCP / UDP传输的一些选项,那将是正常的。但是,什么让事情变得太多的是太多的供应商决定不关心RFC的东西,他们决定“嘿,把一年带到很好”,即使RFC说“不”,他们不安“ t真的需要在标题中设置一个主机,并且他们在创建初始遗留物品后,他们并不真正需要在其初始遗留内容之后实现任何新的东西。
太多供应商(各种安全和非安全软件)提出了他们自己的方式,他们基本上代表了钥匙值对,太多供应商认为他们的日期格式是正确的,很多供应商都没有花时间升级他们在过去的12年里的伐木工厂。
不幸的是,这是我们行业的代表(是的,XKCD)。有人在某个地方缝合在一起,然后几十年后我们有一个不可思议的拼凑而成的斑驳,随机格式化的东西,无论它找到合适的套接字。它从来没有适当的时间和正确的优先考虑,以便到达最新的事情,以与现场的其他人对齐。我们作为一个行业(安全性和一般)正在营造出来的一切。是的,世界是复杂的,技术也很复杂。我们的工作是使其全部触及,抽象,简化和标准化。我们正在做相反的。