使用 RSYSLOG 将剩余的网络流量发送到特定文件

使用 RSYSLOG 将剩余的网络流量发送到特定文件

我正在尝试将来自多个客户端的多个设备的日志集中在我的 RSYSLOG 服务器上。

我的服务器在 Debian 11 上运行,带有 RSYSLOG v8.2102

目前的配置非常简单:我只是在 /etc/rsyslog.conf 中允许 UDP 和 TCP 连接,并在 UFW 中打开端口 514。

在 /etc/rsyslog.d/ 中,我为每个设备添加了一条规则。例如,为了匹配 Fortinet,我在 /etc/rsyslog.d/10-Fortinet-SiteName-ClientName.conf 中添加了此规则:

if $msg contains 'devid="FGT_SerialNumber"' then /ClientsLogs/ClientName/SiteName/Fortinet.log
& stop

它按预期工作。

我想发送所有剩余网络流量在另一个文件中,/var/log/syslog 帮助我识别诸如缺少设备配置之类的问题,并防止 /var/log/syslog 增长(防火墙日志非常冗长!)

我尝试使用 $fromhost-ip 进行过滤,但没有成功:

if not $fromhost-ip == '127.0.0.1' then /ClientsLogs/Undefined.log
& stop

我确信它一定很简单但我无法让它工作!

答案1

根据您自己的回答,您不能将其用作'`hostname`'字符串并期望它变成,例如,'abc'其中abc是您的本地主机名。您只能以两种形式使用反引号:`echo $VARNAME`对于某些环境变量或`cat filename`对于某些文件名。

这就是为什么您的if陈述与所有输入相匹配。

但是,有一个预定义的系统属性$myhostname应该保存主机名,尽管我不确定它是否是完全限定的域名。您必须将它与额外的$前缀一起使用:

... and $fromhost != $$myhostname then ...

答案2

我找到了这个解决方案,但它破坏了 /var/log/syslog 的正常记录 :-(

/etc/rsyslog.d/99-Undefined.conf 的内容

if $fromhost != '127.0.0.1' and $fromhost != 'localhost' and $fromhost != '`hostname`' then /ClientsLogs/Undefined.log
& stop

相关内容