如何让 sec 正确忽略时间戳

如何让 sec 正确忽略时间戳

我有一条如下设置的规则;

在 /etc/sec/rules.d 中我有;

type=SingleWithSuppress
ptype=regexp
pattern=(\S+) sshd\[\d+\]: PAM \d+ more authentication failures\; logname=.* uid=.* euid=.* tty=ssh ruser=.* rhost=(.*) user=(.*)
desc=Login Failure: $0
action=pipe '%s ' /bin/mail -s "login failure $2 to $3@$1" [email protected]
window=300

如果这是通过系统日志传来的;

Nov 21 11:24:10 servername.server.com sshd[26846]: PAM 2 more authentication failures; logname= uid=0 euid=0 tty=ssh ruser= rhost= user=kloggins

根据模式,它应该与此匹配(根据我的正则表达式编辑器,它确实如此);

servername.server.com sshd[26846]: PAM 2 more authentication failures; logname= uid=0 euid=0 tty=ssh ruser= rhost= user=kloggins

由于时间戳不断变化,我们遇到了垃圾邮件问题。因此我重写了模式以匹配主机名后的所有内容。

然而,这似乎不起作用,每次用户“身份验证失败”时,我仍然会收到一封电子邮件。

我一直在使用以下内容进行测试;

logger -p syslog.err 'sshd[26846]: PAM 2 more authentication failures; logname= uid=0 euid=0 tty=ssh ruser= rhost= user='

有什么想法吗?我可能只是误解了 sec。这是我第一次使用它!任何帮助都将不胜感激。谢谢!

答案1

好吧,经过将近一天的绞尽脑汁之后,我终于明白了 a) 如何做到这一点以及 b) 我对 sec 的误解。

在阅读 sec 手册页时,它将 desc= 描述为基本上显示匹配项。所以在我看来,这意味着它应该显示模式中匹配的任何内容。嗯,是的,这是真的,在这种情况下,该模式中的匹配项是:主机名、rhost 和用户。

因此,当我执行 desc=Login Failure: $0 时,我会删除整行。这很糟糕。

因此,我将其更改为关闭用户名和主机名,这样它就会遵守 window=300 规则,因为时间戳(整行)没有改变;又名以下的概要;

/etc/sec/rules.d/ssh.sec

type=SingleWithSuppress
ptype=regexp
pattern=(\S+) sshd\[\d+\]: PAM \d+ more authentication failures\; logname=.* uid=.* euid=.* tty=ssh ruser=.* rhost=(.*) user=(.*)
desc=Login Failure: $3@$1
action=pipe '%s $0' /bin/mail -s "Login Failure: $3@$1" [email protected]
window=300

错误线

Nov 21 01:58:10 test.test.com sshd[26846]: PAM 2 more authentication failures; logname= uid=0 euid=0 tty=ssh ruser= rhost=test.test.com user=kloggins

它会通知用户[电子邮件保护]除非 300 秒后再次发生,否则不会报告此情况,因为它已关闭[电子邮件保护]

我已经测试过好几次了,它是一个‘werkin’。

相关内容