logwatch 是 linux 上的一个日志分析工具,能够利用 cron 每天执行日志分析工作,并将日志发送到指定用户的邮箱(具体配置方法请看我的另一篇博客 http://my.oschina.net/JerryBaby/blog/176826)。
我手上一共用 3 台服务器,两台 CentOS,一台 gentoo 个人电脑。我都为它们配置了 logwatch。我的做法是,将 logwatch 加入 cront 任务,每天晚上 8 点给 root 发送一封邮件,内容是昨天的系统日志。但是我的 gentoo 却怎么也收不到邮件。整整折腾了两天,终于知道了原来是 mail 服务没有配置好。
先来讲解一下 mail 服务的几个概念。
- MUA(Mail User Agent)
- MTA(Mail Transfer Agent)
邮件传输代理。最典型的就是 linux 系统上的 postfix 和 sendmail 以及我要介绍的 gentoo 上的 nullmailer。它的功能是将来自客户端或者是其他 MTA 的邮件收下(使用 SMTP 协议);传递目的地不是本主机的邮件。
知道了这两个概念之后,来解释一下 logwatch 的工作原理。默认 logwatch 是加入 cron 服务的,所以在 /etc/cron.daily 目录下,有一个名为 00-logwatch 的脚本(不同的系统名称可能不同),cron 服务会根据设定每天自动执行这个目录下的脚本。那么 logwatch 是怎样实现发送邮件给 root 的呢?我们来看一下 00-logwatch脚本的内容。
- gentoo
- CentOS 1
- CentOS 2
CentOS 2 的 00-logwatch 是一个指向 logwatch 脚本的软链接,由于内容太长,此处不截图。
从上面的内容可以看出:gentoo 系统是调用 logwatch.pl 脚本执行命令;CentOS 1 是调用 logwatch 脚本执行命令;CentOS 2 也是调用 logwatch 脚本执行命令。
现在还看不出 logwatch 的原理,但是我分别查看了一下 logwatch.pl 和 logwatch 脚本,它们默认都会读取 /usr/share/logwatch/default.conf/logwatch.conf 文件来执行 logwatch。关于 logwatch 如何收集日志我也没有深究。至于它如何发送邮件,请往下看。
在 logwatch.conf 文件里,有这样一个设定
mailer = "/usr/sbin/sendmail -t"
这个设定项规定了 logwatch 发送邮件的发送者是 /usr/sbin/sendmail 脚本。
到此,应该都明了了。 cron 每天执行 00-logwatch 脚本,00-logwatch 脚本又调用 logwatch.pl 或 logwatch 命令,然后利用 sendmail 命令来发送日志邮件到 root 用户的邮箱。
这里又有一个最容易让人混乱的地方,那就是 sendmail。
不是说 sendmail 是 linux 下的 MTA 吗?我只能说:此 sendmail 非彼 sendmail。
linux 系统要想能够读取邮件,必须安装上 MUA。要想转发邮件给 root 用户,必须要安装上 MTA。系统上最常见的 MUA 是 mailx,也就是经常使用的 mail 命令。而最常见的 MTA 就是 sendmail 和 postfix。还有几乎没有人使的 nullmailer(但是我使了 ^^)。
那么刚才说的,logwatch.pl 脚本调用的 sendmail 命令是什么呢。它并不是 MTA-sendmail。只是一个 MTA 的前端。也就是说,postfix 会提供一个名为 sendmail 的前端,nullmailer 也会提供一个名为 sendmail 的前端,而 sendmail(MTA)也会提供一个名为 sendmail 的前端。这些我也是从 man 手册得来的结论。请看
- sendmail————gentoo
- sendmail————CentOS 1
- sendmail————CentOS 2
我的 gentoo 使用的 MTA 是 nullmailer,CentOS 1 使用的 MTA 是 postfix,CentOS 2 使用的 MTA 就是 sendmail。从上面的图能够看出区别。
关于 postfix 和 sendmail 的配置,在这里我就不再多说了,google 上有很多详细的配置。我重点是要说一下这个 nullmailer。
在 google 排名前 20 的文章我几乎都看过了,但是几乎没有一篇能够解释得很清楚这个 nullmailer 到底该如何配置,到现在为止我还是不太明白究竟增样配合适。不过我还是要用它,身为一个 geek(虽然是个水货),就要不断尝试新的东西嘛。
现在 gentoo 安装 logwatch 的时候,默认的安装的就是这个 MTA
这是 gentoo 关于用 nullmailer 替代 ssmtp 的一些讨论http://www.gossamer-threads.com/lists/gentoo/dev/265171
而且这个 nullmailer 和 postfix 在 gentoo 上还是两个冲突的包
官方的定义是:nullmailer is a simple and secure relay-only mail transport agent.
nullmailer 的主要配置文件在 /etc/nullmailer 目录下面。它提供 3 个命令:nullmailer-queue,nullmailer-inject,nullmailer-send。
nullmailer-queue:从标准输入读取邮件到队列(/var/nullmailer/queue/)。
nullmailer-inject:从标准输入读取邮件并加入 RFC8822 格式的头部放入队列。
nullmailer-send:检查邮件队列,如果存在邮件,就发送。
最主要的配置文件是 /etc/nullmailer/remove,它规定了将邮件转发到何处,这里我只提供一个将系统日志发送到我 gmail 的配置
smtp.gmail.com smtp --port=587 --auth-login --user=you@gmail.com --pass=Yourpassword --starttls
确实能够发送到我的 gmail
鉴于自己能力有限,希望对于 nullmailer 熟悉的小伙伴们能够不吝赐教。
来源:oschina
链接:https://my.oschina.net/u/1161070/blog/176998