linux 邮件服务:nullermailer postfix 和 sendmail

    logwatchlinux 上的一个日志分析工具,能够利用 cron 每天执行日志分析工作,并将日志发送到指定用户的邮箱(具体配置方法请看我的另一篇博客 http://my.oschina.net/JerryBaby/blog/176826)。

    我手上一共用 3 台服务器,两台 CentOS,一台 gentoo 个人电脑。我都为它们配置了 logwatch。我的做法是,将 logwatch 加入 cront 任务,每天晚上 8 点给 root 发送一封邮件,内容是昨天的系统日志。但是我的 gentoo 却怎么也收不到邮件。整整折腾了两天,终于知道了原来是 mail 服务没有配置好。

    先来讲解一下 mail 服务的几个概念。

  • MUA(Mail User Agent)
         邮件用户代理。最典型的就是 linux 系统上的 thunderbir d 和 windows 系统上的 outlookexpress。它的主要功能就是接收邮件主机的邮件并提供用户浏览与 编写邮件的功能。
  • MTA(Mail Transfer Agent)

        邮件传输代理。最典型的就是 linux 系统上的 postfix 和 sendmail 以及我要介绍的 gentoo 上的 nullmailer。它的功能是将来自客户端或者是其他 MTA 的邮件收下(使用 SMTP 协议);传递目的地不是本主机的邮件。

    知道了这两个概念之后,来解释一下 logwatch 的工作原理。默认 logwatch 是加入 cron 服务的,所以在 /etc/cron.daily 目录下,有一个名为 00-logwatch 的脚本(不同的系统名称可能不同),cron 服务会根据设定每天自动执行这个目录下的脚本。那么 logwatch 是怎样实现发送邮件给 root 的呢?我们来看一下 00-logwatch脚本的内容。

  1. gentoo
  2. CentOS 1
    linux 邮件服务:nullermailer postfix 和 sendmail_第1张图片
  3. 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 文件里,有这样一个设定

         linux 邮件服务:nullermailer postfix 和 sendmail_第2张图片

    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 手册得来的结论。请看

  1. sendmail————gentoo
    linux 邮件服务:nullermailer postfix 和 sendmail_第3张图片
  2. sendmail————CentOS 1
    linux 邮件服务:nullermailer postfix 和 sendmail_第4张图片
  3. sendmail————CentOS 2
    linux 邮件服务:nullermailer postfix 和 sendmail_第5张图片

    我的 gentoo 使用的 MTA 是 nullmailer,CentOS 1 使用的 MTA 是 postfix,CentOS 2 使用的 MTA 就是 sendmail。从上面的图能够看出区别。

    关于 postfix 和 sendmail 的配置,在这里我就不再多说了,google 上有很多详细的配置。我重点是要说一下这个 nullmailer。

    在 google 排名前 20 的文章我几乎都看过了,但是几乎没有一篇能够解释得很清楚这个 nullmailer 到底该如何配置,到现在为止我还是不太明白究竟增样配合适。不过我还是要用它,身为一个 geek(虽然是个水货),就要不断尝试新的东西嘛。

    现在 gentoo 安装 logwatch 的时候,默认的安装的就是这个 MTA

         linux 邮件服务:nullermailer postfix 和 sendmail_第6张图片

    这是 gentoo 关于用 nullmailer 替代 ssmtp 的一些讨论http://www.gossamer-threads.com/lists/gentoo/dev/265171

    而且这个 nullmailer 和 postfix 在 gentoo 上还是两个冲突的包      linux 邮件服务:nullermailer postfix 和 sendmail_第7张图片

    官方的定义是: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
          linux 邮件服务:nullermailer postfix 和 sendmail_第8张图片

    鉴于自己能力有限,希望对于 nullmailer 熟悉的小伙伴们能够不吝赐教。

你可能感兴趣的:(centos,postfix,sendmail,Gentoo,nullmailer)