网络寻租

Programmer, Gamer, Hacker

Postfix架构初探

| Comments

image

最近几天我们的服务器没有办法收到邮件了, 为了解决这个问题, 我必须弄清楚现在服务器邮件系统的架构, 然后找到到底问题出在哪里。 我们服务器是采用postfix的, 当初配置的时候不是我, 也没有留下配置文件。 弄清楚状况以及解决问题花费了我比较多的时间, 在这里整理一下具体的信息, 下次再遇到问题的时候可以回来看看。 根据我的个人经验, 对于用到的一个技术, 如果没有研究透彻以及留下对应的文档, 以后一定会后悔。 所以在下面稍微整理一下, 没有兴趣就跳过吧。

什么是postfix

简单地说, postfix就是一个邮件服务器, 它用来处理邮件收发的一些工作。 postfix控制了无数小的模块, 而自己可以说是一个路由器的角色。

image

但是postfix内部细看的话又非常复杂, 文章开始的那个图片就是一个模块化的流程图。这里面有几篇文章可以看看的:

如何配置

我发现linode的ubuntu的配置文档 很不错,采用mysql作为数据库,存储域名,邮件用户,邮件用户别名信息,然后用dovecot来作为用户和外界通讯的服务器, 按照这个配置,可以搭建好一个可用的邮件系统。

邮件流程

为了弄清楚具体做了什么, 以便遇到问题的时候可以快速定位, 需要关注几点:

邮件是如何从外面发送进来, 被客户端接收的

外面的服务器会通过smtp发送邮件到postfix,postfix服务器会接收邮件,经过一系列的处理过程,最后保存到本地的邮件目录存放地里面。 按照上面的设置,会保存在/var/mail/%domain/%username目录中。

邮件是如何通过客户端, 发送给其他邮件的。

通过devocot pop/imap服务器, 客户端发送对应的请求, 然后转存到本地mail地址, 然后postfix做发送处理。

postfix也提供一个命令行的工具sendmail来在本地发送邮件

如何验证用户

dovecot设置文件里面具体设置如何做验证, 是否支持纯文本密码(非常不安全), 是否支持ssl, 采用什么方式来验证等等。

具体的邮件本地缓存位置,配置文件和进程。

  • 邮件本地存储的目录, 见postfix配置参数virtual_mailbox_base
  • postfix配置目录在/etc/postfix
  • dovecot配置目录/etc/dovecot
  • 里面的配置文件会设置日志目录。 如果没有写的话, 可以去看 /var/log/mail.log
  • postfix master进程 /usr/lib/postfix/master, 它会跑一些其他worker进程干活, 可以看用户是postfix的进程们。
  • dovecot进程 /usr/sbin/dovecot, 用户验证进程 dovecot-auth, 还有以dovecot为用户的一些pop/imap服务器。

更进一步的需求

前面做的事情只是比较基本的部分,如果要成为一个可靠的生产环境,还是需要一些其他的事情:

很多时候, 还是购买现成的服务比较好, 自己做的话成本太高了, 也做不到专业。

2012-10-26问题整理

本次发生邮件系统不能用的根本原因没有找到, 主要发现postfix, dovecot进程没有起来。 花费了2个晚上的时间, 终于把问题解决了, 具体的挫折路线:

  • 不是很懂postfix, 看文档
  • pop服务器不知道是什么, 最后看postfix设置才知道是dovecot
  • 跑起来后发现没有起来pop, 安装dovecot-pop3d
  • 用gmail来获取邮件一直不成功, 后来发现google pop3方式ssl可能会去验证服务器ssl有效性, 需要服务器注册合法ssl(需要花钱), 所以只能用plain的方式, 需要改 dovecot 设置支持plain。

2013-12-08问题整理

因为服务器更换,需要重新装一遍邮件系统,前一次安装的日志没有留下来, 于是我采用ubuntu的教程,结果耗费了一个星期都没有安装成功,几乎要崩溃了。 后来找到现在用的安装教程,也是一路磕磕碰碰遇到很多问题。总结一下经验:

  • 一定一定要跟着教程走,不要自己想当然随便改,不然死都不知道怎么死的。
  • 走长路,每一步都要验证这一步走得正确。
  • 出现问题看log,好的日志会引导你走向正确的方向。

回头看看, 走了不少弯路, 但是整理一下发现, 其实整个系统也并不是那么复杂。

Comments