【问题标题】:how to spoof hostname in syslog messages?如何在系统日志消息中欺骗主机名?
【发布时间】:2011-12-30 01:11:13
【问题描述】:

我在 perl 中记录这样的消息 -

syslog ("LOG_INFO", "this is info");
syslog ("LOG_WARNING", "this is warning");

当我看到这些消息时,我明白了——

Nov 15 20:20:47 ubuntu tag-0.0.2[13399]: this is info
Nov 15 20:20:47 ubuntu tag-0.0.2[13399]: this is warning

系统日志消息中的“ubuntu”一词恰好是本地主机的主机名。

有没有一种方法可以在本地登录并指定主机名?

我的应用程序处理来自其他主机的数据并记录有关它们的信息。如果我可以在记录消息时指定主机名,那就太好了,这样我就可以轻松地使用第三方工具,因为它们可以轻松地根据主机名过滤掉日志。

顺便说一句,如果我可以添加其他问题 - 为什么日志没有显示消息级别?我不应该期望在我正在记录的信息系统日志消息中看到“信息”吗?

【问题讨论】:

  • 您是否使用标准的syslog on UDP 514,或syslog on TCP 514,或rsyslogRELP 连接接收日志?或者这一切都是“事后”在单台机器上通过日志消息完成的?
  • 我正在使用tail -f /var/log/syslog 命令读取我的日志消息...这些消息正在本地写入。我如何确定这些是否来自 tcp/udp/relp?
  • 您的其他主机是否设置为自动将消息转发到您的本地计算机?在这种情况下,它通常“正常工作”——至少在rsyslog(8) 下是这样。其他 syslog 守护进程可能不会发送所需的 Host 标头:rsyslog.com/article19
  • 不是真的.. 我不接受来自其他主机的系统日志消息。我想将日志放在本地,但指定我自己的主机名

标签: logging ubuntu rsyslog


【解决方案1】:

完成此任务的最简单方法可能是将syslog 设置为通过网络接收消息。对于rsyslog,这通常在/etc/rsyslog.conf

# provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514

我在这里使用 UDP,因为它很容易在几乎任何 syslog 守护进程上执行,并且很容易演示:

$ echo "<0>Oct 11 22:14:15 mymachine testing" | nc -u localhost syslog
^C
$ tail -1 /var/log/syslog
Oct 11 22:14:15 mymachine testing

简而言之:&lt;nnn&gt; 代表设施和优先级,如section 4.1.1 of the RFC 中所述。时间戳在 4.1.2 中高度指定:简而言之,三个字母的英文月份缩写,没有前导 0 -- 而是前导空格:Aug__8 而不是 Aug_8(使用下划线,因为空格在代码块中折叠) .主机名不能有任何域部分。 IP 地址没问题,IPv4 和 IPv6 都可以。

您还可以使用 Unix 域套接字 (unix(7)),例如 /dev/log。那会比 UDP 更可靠。

【讨论】:

  • 嘿,也谢谢你——这是我第一次接触到 syslog 在线协议,我不知道为什么我对它如此人性化感到如此惊讶——友好的。我预计会有一堆可怕的 ASN.1 风格的结构。
【解决方案2】:

不幸的是,如果您在本地登录,我认为不可能指定主机名。

此外,您不应该在日志前看到“信息”。日志级别会影响消息的去向(您可以在 /etc/syslog.conf 中自定义)。默认情况下,LOG_INFO 和 LOG_WARNING 转到 /var/log/messages.log,LOG_EMERG 和 LOG_ERR 转到 /var/log/errors.log。该级别不会出现在输出中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-03
    • 2010-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-25
    • 1970-01-01
    相关资源
    最近更新 更多