Rsyslog 邮件模块不工作

Rsyslog 邮件模块不工作

我想从我的 Debian Lenny fw 通过电子邮件发送 snort 警报。Syslog 正在将日志消息从防火墙发送到中央 rsyslog。

在我的中央 rsyslog 上,我得到了类似的信息:

$ModLoad ommail
$ActionMailSMTPServer server.company.local
$ActionMailFrom [email protected]
$ActionMailTo [email protected]
$ActionExecOnlyOnceEveryInterval 1

$template mailSubject,"[SNORT] Alert from %hostname%"
$template mailBody,"Snort message\r\nmsg='%msg%'"
$ActionMailSubject mailSubject
if $msg regexp 'snort\[[0-9]*\]: \[[0-9]*:[0-9]*:[0-9]*].*' then ommail:;mailBody

但是我没有收到任何邮件,我甚至可以用类似的方法触发 snort ping -s 1400,它会记录类似以下的内容,但仍然没有邮件!

2010-01-08T09:25:58+00:00 Hostname snort[4429]: [1:499:4] ICMP Large ICMP Packet [Classification: Potentially Bad Traffic] [Priority: 2]: {ICMP} ip_dest -> ip_src

答案1

ommail 前面缺少一个冒号。

if $msg regexp 'snort[[0-9]]: [[0-9]:[0-9]:[0-9]].*' then :ommail:;mailBody

我无法代表您的 RegEx 的准确性,但您可以尝试“contains”而不是“regex”,并尝试使用更简单的测试来缩小问题范围(如果它仍然存在于上述语法之外)。

我还建议在理清事情之后增加 $ActionExecOnlyOnceEveryInterval。

答案2

本周我刚刚测试了 rsyslog,发现其中有一些错误。我将其升级到 backuports,现在一切正常。你可以尝试一下,因为这是一个重大升级。

答案3

我自己也为此绞尽了脑汁,可以确认以下 rsyslog 和语法组合确实有效(我现在正在生产中使用它)。我有 Ubuntu 10.4.1,出于某种奇怪的原因(它真的很旧),它附带了 rsyslog 4.2。因此,在删除它并安装 4.6.4.1 后,我就可以正常运行了。

从 Debian Squeeze repo 获取 rsyslog 4.6.4.1这里。版本 4.6.4(或一两个更早的版本;现在记不清了)修复了 ActionExecOnlyOnceEveryInterval 被忽略的一个错误。

我对 Snort 使用以下语法,并确认它确实有效:

$IncludeConfig /etc/rsyslog.d/mail-settings.conf
$template mailSubjectSnort,"Snort Alert"
$template mailBodySnort,"this is the body, here's the host: %hostname%, here's the time    it was reported: %timereported% and heres the message: %msg%"
$ActionMailSubject mailSubjectSnort
# make sure we receive an email only once per hour
$ActionExecOnlyOnceEveryInterval 3600
:msg, contains, "some_string" :ommail:;mailBodySnort

我将各种日志记录设备分成单独的日志文件,并配有相应的 .conf 文件。我还在名为 的文件中设置了邮件服务器指令,mail-settings.conf并将其包含在每个 conf 文件的顶部。

我还为每个 conf 中的每个模板变量(mailBodySnortmailBodySquid等)使用一个唯一的名称,因为它似乎是一个常量,因为每个后续包含另一个 .conf 文件都不会覆盖先前 .conf 中分配的值。

答案4

揭穿一个旧问题,但由于问题仍然会影响那些运行 Debian Squeeze 的人,即使使用来自反向移植的 rsyslog(目前为 5.8.11-1~bpo60+2),也值得分享,感谢 @abeverley这里$ActionExecOnlyOnceEveryInterval 0,我可以通过“在电子邮件通知规则末尾添加”重置值来解决此问题。

例如,这里现在是我的/etc/rsyslog.d/bonding.conf

$template bondingMailSubject,"%hostname%: bonding Event"
$template bondingMailBody,"%msg%"
$ActionMailSubject bondingMailSubject
$ActionMailTo root
$ActionExecOnlyOnceEveryInterval 300
if $programname == 'bonding' and ($msg contains 'WARNING' or $msg contains 'CRITICAL') then :ommail:;bondingMailBody
$ActionExecOnlyOnceEveryInterval 0

相关内容