我有这样一个规则,
在/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
它应该匹配这个(这是根据我的正则expression式编辑器)根据模式;
servername.server.com sshd[26846]: PAM 2 more authentication failures; logname= uid=0 euid=0 tty=ssh ruser= rhost= user=kloggins
我们遇到了垃圾邮件问题,因为时间戳正在改变。 所以我重写了模式以匹配主机名后的所有内容。
但是,这似乎并没有工作,每次用户“身份validation失败”,我仍然收到一封电子邮件。
我一直在使用以下来testing;
logger -p syslog.err 'sshd[26846]: PAM 2 more authentication failures; logname= uid=0 euid=0 tty=ssh ruser= rhost= user='
有任何想法吗? 我可能只是误解了一下。 这是我第一次使用它! 任何帮助将不胜感激。 谢谢!
那么,经过几乎整整一天的拉扯之后,我终于明白了a)如何做到这一点,以及b)我对于sec的误解。
在阅读sec man页面,它描述了desc =基本显示匹配。 所以在我看来,这意味着它应该显示任何匹配的模式。 那么,是的,这是真的,在这种情况下,这种模式的匹配是; 主机名,rhost和用户。
所以当我做desc =login失败:$ 0时,我正在closures整条线。 那很糟。
所以相反,我改变它的关键字的用户名和主机名,然后导致它遵守窗口= 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
它会注意到用户[email protected],除非它在300秒后再次发生,否则将不会报告,因为它closures了[email protected]。
我已经testing过几次了,这是一个'werkin'。