rsyslog relp - 防止远程日志写入我的本地 /var/log

rsyslog relp - 防止远程日志写入我的本地 /var/log

我已经使用 rsyslog 和 relp 设置了一个日志服务器。它可以很好地接收远程日志并将其放置在 /var/spool/rsyslog 中。

我的问题是:大多数这些消息也出现在我的 /var/log/messages 文件中,该文件会变得相当庞大,而且速度相当快。

我在日志服务器上的配置:

    #### MODULES ####

$ModLoad imuxsock # provides support for local system logging
$ModLoad imklog   # provides kernel logging support (previously done by rklogd)

# RELP config
$ModLoad imrelp
$InputRELPServerRun 2514

#### GLOBAL DIRECTIVES ####

# Filter duplicated messages
$RepeatedMsgReduction on

# Set the default permissions for all log files.
$FileOwner syslog
$FileGroup adm
$FileCreateMode 0640
$DirCreateMode 0755
$Umask 0022
$PrivDropToUser syslog
$PrivDropToGroup syslog

# Where to place spool files
$WorkDirectory /var/spool/rsyslog

# Include all config files in /etc/rsyslog.d/
$IncludeConfig /etc/rsyslog.d/*.conf

# global templates
# DONT CHANGE UNLESS YOU KNOW WHAT YOU ARE DOING
$ActionFileDefaultTemplate RSYSLOG_ForwardFormat
$template precise,"%syslogpriority% %syslogfacility% %timegenerated% %HOSTNAME% %syslogtag% %msg%\n"
$ActionFileDefaultTemplate precise

# This should place all remote log items into /var/spool/rsyslog
$template RemoteHost,"/var/spool/rsyslog/%programname%.log"

# My brain says: this prevents anything coming in from a remote host from
# being written in /var/log/whatever - MY BRAIN LIES TO ME!
if ($hostname != 'my.server.name') then ?RemoteHost
&~

我读了手册页后发现,主机名检查和“& 符号波浪号”应该可以防止远程内容污染我的日志文件。

线索?

DISTRIB_DESCRIPTION="Ubuntu 12.04.3 LTS"

答案1

你的 rsyslog 配置文件中必须有类似的东西

*.*;auth,authpriv.none          -/var/log/syslog

如果您仔细查看,就会发现您正在将所有设施的所有严重性注册到 syslog 文件中,auth 和 authpriv 设施除外。

只需添加您不想记录的功能,再加上“无”严重性即可。IE:local6:

*.*;auth,authpriv.none;local6.none          -/var/log/syslog

当然,修改配置文件后必须重新启动或重新加载rsyslog守护进程。

希望这会有所帮助,如果远不是简单地使用复杂的 rsyslog 过滤器的话。

答案2

我不确定您是否能够使用主机名。

我个人使用 $fromip == 'xxxx' 作为不同文件名的条件。

下面是一个很好的例子,它适用于我的设置,但如果您有很多不同的 IP 范围,它可能会是一个问题。

这是复制自

http://www.rsyslog.com/tag/more-complex-scenarios/

将远程系统的消息存储到特定文件中 2010 年 2 月 23 日星期二

这是一个日志整合场景。至少有两个系统,一个服务器和至少一个客户端。服务器用于收集所有客户端的日志数据。客户端可能会(也可能不会)在本地处理和存储消息。如果它们这样做,这里就无关紧要了。请参阅“向远程 Syslog 服务器发送消息”一文,了解如何配置客户端。

来自 192.0.1.x 网络中远程主机的消息应写入一个文件,来自 192.0.2.x 网络中远程主机的消息应写入另一个文件。需要考虑的事项

TCP 接收不是内置功能。您需要加载 imtcp 插件才能启用它。这只需要在 rsyslog.conf 中执行一次。在顶部执行即可。

注意,$InputTCPServerRun 中指定的服务器端口地址必须与客户端发送消息的端口地址相匹配。配置语句

$ModLoad imtcp
$InputTCPServerRun 10514
# do this in FRONT of the local/regular rules
if $fromhost-ip startswith '192.0.1.' then /var/log/network1.log
& ~
if $fromhost-ip startswith '192.0.2.' then /var/log/network2.log
& ~
# local/regular rules, like
*.* /var/log/syslog.log

答案3

这就是对我有用的。

用于接受来自远程主机的系统日志信息

$template TempAuth, "/var/log/infosys/%HOSTNAME%/%PROGRAMNAME%.log"
$template TempMsg,  "/var/log/infosys/%HOSTNAME%/%PROGRAMNAME%.log"

if ($fromhost-ip != "127.0.0.1" ) then ?TempAuth
& ~
if ($fromhost-ip != "127.0.0.1" ) then  ?TempMsg
& ~

答案4

那么下面的怎么样?

if ($hostname != $fromhost) then {
    ## No further processing.
    stop
}

相关内容