linux 邮件服务:nullermailer postfix 和 sendmail

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

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

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

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

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

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

  1. gentoo
  2. CentOS 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 如何收集日志我也没有深究。至于它如何发送邮件,请往下看。
post

    在 logwatch.conf 文件里,有这样一个设定
google

        

    mailer = "/usr/sbin/sendmail -t"
    这个设定项规定了 logwatch 发送邮件的发送者是 /usr/sbin/sendmail 脚本。
spa

    到此,应该都明了了。 cron 天天执行 00-logwatch 脚本,00-logwatch 脚本又调用 logwatch.pl 或 logwatch 命令,而后利用 sendmail 命令来发送日志邮件到 root 用户的邮箱。 .net

    这里又有一个最容易让人混乱的地方,那就是 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

  2. sendmail————CentOS 1

  3. 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 熟悉的小伙伴们可以不吝赐教。

相关文章
相关标签/搜索