我最近设置了一个中央系统日志服务器。日志以文件形式组织,存放在以客户端计算机命名的文件夹中(使用 DNS),并使用 logcheck 进行扫描。
有些客户端计算机有多个操作系统(即 Linux 和 Windows),最终拥有相同的 IP 地址和主机名。结果是 Windows 日志(消息)和 Linux 日志最终出现在同一个文件中,这让我和 logcheck 非常不高兴。我希望将不同操作系统的日志分开保存。
我的解决方案是让 syslog 监听多个端口,并在 Linux 和 Windows 客户端计算机上配置 syslog/rsyslog 以使用不同的端口号。这样,我就可以根据日志的来源轻松地将日志重定向到适当的文件中。
然而,我并不十分相信这个解决方案的优雅性——nmap 可以通过堆栈 TCP/IP 的指纹检测客户端操作系统。
有没有办法配置 Syslog-ng 来根据客户端机器的操作系统重定向传入的数据?
答案1
您对 Linux 和 Windows 机器使用不同端口的方法并不差。
备择方案:
- 在 syslog-ng 中使用程序作为目标(例如,检查客户端机器的当前操作系统并写入 linux.log 或 windows.log 的自定义脚本)——缓慢且不可靠。
- 在 syslog-ng 过滤器中使用 match(...) 来区分 linux 和 windows syslog 字符串(不确定它是否简单可靠,除非您可以将一些标记子字符串放入客户端的 syslog 中)并使用此类过滤器来选择目标日志文件。
两者都不太值得推荐。
另一个技巧是使用 tcp 传输来自 Linux 客户端的 syslog,使用 udp - 来自 Windows。然后您可以使用协议过滤器配置文件目标。