如何获取 Syslog Referer URL

如何获取 Syslog Referer URL

我有两个 URL one.example.com 和 two.example.com,是否有办法在 syslog conf 中捕获用于访问服务器的 URL?

我需要根据这些信息修改数据库文件。

更新

我有一台安装了 busybox 和 syslogd 的设备。我可以在设备上为 syslog 设置一个地址,例如 1.1.1.1:514。但除此之外,我无法在设备上执行任何其他操作。

例如,我有 100 台设备,其中 50 台为 A 型,50 台为 B 型。问题是,当每台设备都使用 1.1.1.1:514 作为 syslog 服务器地址时,在远程 syslog 服务器上接收设备信息时,我无法区分设备是 A 型还是 B 型。

我想到的是以下解决方案,尽管可能还有其他方法可以实现这一点。如果我创建两个子域并将它们指向同一个地址,即 typea.example.com 和 typeb.example.com,那么理论上,类型 AI 的设备会将远程系统日志地址设置为 typea.example.com:514,类型 B 的设备则设置为 typeb.example.com:514。这两个子域都将指向 1.1.1.1,因此类型 A 的设备和类型 B 的设备现在正在接收系统日志信息。

我现在需要弄清楚如何在远程服务器上的 syslog.conf 中找出信息是由使用 typea.example.com 还是 typeb.example.com 的设备接收的。

服务器没有安装 apache 等,但是,例如在 PHP 中我们可以使用$_SERVER,并且通常我能够从中检索此信息$_SERVER['HTTP_HOST']。有没有办法在远程 syslog 服务器上的 syslog.conf 中执行此操作。

如上所述,这是我想到的一个解决方案,但可能不是唯一的解决方案。Syslog 对我来说很新,我目前正在思考这个问题。据我所知,syslog 使用宏,而不是变量或参数。所提供的宏似乎都无法提供我需要的信息。

我知道我也可以通过以下方式设置系统日志

syslogd -R 1.1.1.1:514

无论如何我可以在这里提供更多信息吗,例如:

syslogd -R 1.1.1.1:514 type=a

然后我可以说用它$TYPE来获取值或者使用系统日志添加自定义标头。

您可能已经注意到,我绞尽脑汁寻找解决方案,但却无功而返。任何能为我指明正确方向的解决方案或文档都将不胜感激。

最后要说的是,我还在考虑将系统日志信息重定向到 PHP 脚本或 C(我会说脚本,但我知道我错了),以便在那里审查信息,然后将其插入数据库。

很简单,我需要一种方法来区分 A 型或 B 型。希望这能澄清问题,而这些不仅仅是一个疯子的胡言乱语。

答案1

考虑到您在原始帖子和其他评论中概述的限制以及所涉及的固有限制,实现您想要的目标的最简单方法是在主 syslog 机器上运行 syslog 服务器的两个实例。

在两个不同的端口(例如 30001 和 30002)上运行它们,并让它们将日志写入两个不同的文件。将“类型 A”客户端指向服务器的端口 30001,这会将条目记录到类型 A 文件中;将“类型 B”客户端指向系统日志服务器的端口 30002,这会将条目记录到类型 B 文件中。

上面选择的端口是任意的,但不与其他现有服务冲突。它还将其与服务器上的正常系统日志分开,以便您的输出不会与来自该机器的消息混合。

这假设您在服务器上运行的是完整的 Linux 发行版,该发行版具有完整的 syslogd,可以从配置文件中读取其设置(而不是像客户端那样内置在 busybox 中的受限 syslogd)。如果服务器上使用了防火墙,您还需要确保打开相应的端口。如何在服务器上执行此操作的确切细节取决于服务器上的 syslog 变体和服务器操作系统。

答案2

远程 syslogd 服务器应在日期和时间之后立即显示主机名(或 IP 地址)作为下一个字段。以下是 syslog 文件中的示例条目。机器的主机名/IP发送本例中的条目是“披萨”

Jun 16 15:45:01 pizza auth.info sshd[26861]: Failed password for user from 123.45.67.89 port 59903 ssh2

即使您将 -R 1.1.1.1:514 传递给每个客户端,这也是它们全部发送到的地址。每个客户端设备都应该有自己唯一的 IP 地址……否则它们就不能存在于同一个网络上。这个唯一地址应该记录在远程系统日志条目中。您应该能够推断出哪个是哪个。

相关内容