每台 FreeBSD 机器每天都会向管理员发送两封电子邮件(root
通常是某人的别名):
- 每日 cron 输出(包括磁盘、网络接口等的状态)
- 每日安全输出(在日志中发现渗透尝试等)
还有每周和每月的报告对,其中作业的输出被视为“较重”(例如locate
更新),不需要每天运行。
大多数时候,这些电子邮件非常乏味,我经常发现自己不阅读就删除了它们。但我这样做感到内疚——因为有一天我很可能会错过一些重要的事情,而且因为,如果我不读它,我也可能会把它们重定向到一/dev/унітаз
开始。
我有 5-7 个 FreeBSD 盒子(我自己的和直系亲属的)在我的照顾下,这变得很麻烦 —— 是否有某种软件可以提醒我潜在的“有趣”报告,同时悄悄地将其余的隐藏起来?某种“可训练”的东西——比如贝叶斯垃圾邮件过滤器?
理想情况下,它会与 Seamonkey/Thunderbird 集成,但也可以基于命令行(我将从内部运行它~/.procmailrc
)...
答案1
procmail 中的正则表达式可以跨越多行(但是,与 procmail 中的所有内容一样,您需要小心,以免拼写错误导致您的规则默默失败)。过去,我编写过 procmail 配方,当一切顺利时与报告相匹配,并将它们保存到noise
邮箱中。然后,如果该报告到达我的邮箱,则意味着我需要查看一个问题(要么是,要么是我的.procmailrc
)
下面是一个示例,它查看消息的标头和正文,并检查我过去在旧 orkplace 收到的复杂报告:
:0 :
* ^From: [email protected]
* ^To: [email protected]
* ^Subject: cron output from host.my.dom.ain
* B ?? ^^No account processing to do this run\.\.\.\
^Configuring databases\. Please wait\.\.\.\
(^\*\*\* No IP address for.*)*\
^Processed [0-9]+ total hosts with the following distribution:\
(^[0-9]+ (common|osX|win(7|8)))+
\
^Generated [0-9]+ ganglia clusters containing [0-9]+ machines\
(^Installing new ssh_known_hosts\.\.\.)?\
^Looking for sendmail aliases to generate\
(^No users in passwd file that have no \(valid\) entry in aliases\.forward)?\
(^()\
^Updating the serial number in .*\.Zone )*\
(^Updating hosts file)?)+
noise
当您编写食谱时,我建议您使用测试消息文件和测试 procmail 文件。让配方将消息保存到测试文件,然后procmail
手动运行。检查日志输出以确保所有条件都匹配。对于身体匹配部分,尝试一次写一行。