![使用相同 IP 标记/修改来自不同来源的 syslog-ng 消息](https://linux22.com/image/708897/%E4%BD%BF%E7%94%A8%E7%9B%B8%E5%90%8C%20IP%20%E6%A0%87%E8%AE%B0%2F%E4%BF%AE%E6%94%B9%E6%9D%A5%E8%87%AA%E4%B8%8D%E5%90%8C%E6%9D%A5%E6%BA%90%E7%9A%84%20syslog-ng%20%E6%B6%88%E6%81%AF.png)
您好。首先,感谢您花时间阅读这个问题;抱歉我的英语不好。我对 syslog-ng 真的一窍不通,但我做了这项工作并阅读了 syslog-ng-ose-admin-guide.pdf,但我仍然无法解决我的问题。
这是我的情况:我在一家为客户提供云安全服务的公司工作。作为我们服务的一部分,在客户处安装了使用 VMWare ESXi 6.5 的虚拟机 (VM) 设备,如下所述:
VMs offering security services with syslog-ng client configuration.
Splunk Forwarder (UF) VM with syslog-ng server configuration.
VMs running Ubuntu 16.04.02 and syslog-ng version is 3.5
在我们的云端,我们运行 Splunk Enterprise 来收集/关联/分析日志。
在此设备中,所有虚拟机都使用静态不可路由 IP(172.16.XX)进行配置,并且带有 syslog-ng 客户端的虚拟机将选定的日志转发到 syslog-ng 服务器。UF 将收集的日志转发到 SE。此配置保存在所有客户端中。
此设备以每台 VM 都具有的方式配置。例如,如果 VM1 具有 IP 172.16.1.1,VM2 具有 172.16.1.2,则在客户场所 cust1、cust2 和 cust3 VM1 具有相同的 IP 172.16.1.1,依此类推。
因此,这就是我们的问题:当 SE 通过 UF 从虚拟机接收日志时,我们无法确定谁是数据所有者,因为所有客户的虚拟机都有相同的 IP,因此当我们检查来自 Splunk 的数据并要求 172.16.1.1 时,我们不知道结果是来自 cust1、cust2 还是 cust3。事实上,我们认为结果是 cust1、cust2 和 cust3 日志的混乱。此外,虚拟机在客户处执行一些检查,因此有可能在 VM1 日志和 VM2 日志中找到条目,例如 IP 为 10.10.1.1 的 PC;因此,如果 syslog-ng 客户端将这些日志发送到 syslog-ng 服务器,我们如何知道条目是属于 VM1 日志还是 VM2 日志?
阅读上述 PDF 后,我发现我们可以通过标记来修改 syslog-ng 消息。因此,通过正确识别日志的客户,我们认为我们可以修改消息并添加唯一的客户 ID,这样客户的日志就可以在 SE 中进行查阅和关联,而不会造成混淆。
但是我不知道应该使用 syslog-ng 中的哪些命令/选项/功能来标记客户的日志,如前所述。
所以,我的问题如下:标记真的能解决我的问题吗?如果是,我应该如何在 syslog-ng 配置中使用标记?你能给我举几个例子吗?还有其他方法可以解决我的问题吗?
请,我真的对 syslog-ng 一无所知,任何帮助都将不胜感激,即使您认为您的支持、指南、建议或答案很基础。我真的愿意接受 syslog-ng 101 个答案。
请注意,如果您需要进一步解释我的问题,我希望我已经描述得足够多了。
非常感谢,并致以最诚挚的问候,
拉斐尔
答案1
以下是关于这个问题的一些说明和想法:
- 标记可能是一个很好的解决方案。但是,默认情况下,syslog-ng 不会将标记从 syslog-ng 客户端转发到 syslog-ng 服务器。如果您在客户端上添加标记,则必须明确将标记包含在转发的消息中,并在服务器上提取标记的值。如何执行此操作取决于您使用的协议和消息格式。如果您使用 network() 驱动程序,则必须使用在消息中包含标记的模板,并以某种方式在服务器上对其进行解析。更好的方法是使用 syslog() 驱动程序并将标记包含在消息的 SDATA 部分中(您可以在此博客文章中找到此示例:https://czanik.blogs.balabit.com/2015/03/using-rfc5424-syslog-to-forward-file-names/)还有一种方式就是以 JSON 格式发送消息。
- 如果您使用 TLS 加密 syslog-ng 客户端和服务器之间的通信,较新的 syslog-ng 版本可以使用客户端证书中的信息作为宏。因此,如果您的客户端主机具有唯一证书,您可以使用此信息来识别它们:https://www.balabit.com/sites/default/files/documents/syslog-ng-ose-latest-guides/en/syslog-ng-ose-guide-admin/html/reference-macros.html#macro-tls-x509
- 此外,如果您的客户端具有唯一的主机名(即使其 IP 地址不是唯一的),请根据您的环境检查其消息中与主机名相关的宏($HOST_FROM、$FULLHOST_FROM),它们可能包含您需要的信息。
- 如果你可以在 syslog-ng 服务器上以某种方式分离客户(例如,每个客户站点将消息发送到服务器的单独端口或 IP 地址),以便可以为每个客户端分配服务器上的单独源,那么你就可以使用源驱动程序的 host-override() 选项为消息分配唯一的主机名。
如果以上内容对您有帮助,或者您需要进一步的帮助,请告知我们。