本文将介绍 Linux/UNIX 类系统平台上的开源 IMAP 和 POP3 服务器 —— Dovecot,以及其在 NFS 作为存储时解决缓存(caching)问题的方案 —— Dovecot Director。您将看到如何配置 Dovecot Director 以及 Dovecot Director 是如何工作的。
What & Why Dovecot
Dovecot 这个名词也许对于很多人都比较陌生,但是如果提到 Courier,Cyrus 或者 UW,那肯定很多人都有所耳闻。没错,Dovecot 和他们一样,都是 IMAP Server。
先简单介绍一下 IMAP Server。IMAP,Internet Message Access Protocol,以前也称作“交互邮件">访问协议”,是用作从本地邮件客户端(如 Outlook,Thunderbird 等等)访问远程邮件。而如今应用的越来越多的网络邮件如 Gmail,Hotmail 等新兴邮件服务,同样也支持 IMAP。
尽管 Dovecot 是个后起之秀,但却来势汹汹,如果尝试在 Google 搜索 IMAP Server,Dovecot 是排在非常靠前的搜索结果,从侧面可知 Dovecot 之流行。但到底为什么选择 Dovecot 呢?
1. 高安全性。据 Dovecot 的作者声称,从 Dovecot 的设计和实现,安全性都是被高度关注和强调的。这里的安全性不单单指传统意义的安全漏洞,也包括软件的可靠性。而 Dovecot 高安全性的最佳佐证,就是“悬赏”。Dovecot 作者从 2006 年开始,对于第一个能够发现“remotely exploitable security hole”的人,奖赏 1000 英镑,结果时至今日,这 1000 英镑仍然没有人得到。这里的“remotely exploitable security hole”并不是简单的指软件缺陷。由此看出其安全性十分了得。而作为可直接访问用户数据和邮件的应用,如果存在被人非法访问的漏洞,后果何其严重。
2. 高性能。这里的高性能并不是泛指 Dovecot 软件本身运行多快,而是专指 Dovecot 在访问邮箱时的高性能。Dovecot 是通过对标准的邮件存储格式 mbox 和 maildir 进行索引来做到的。索引对用户是透明的,在后台悄悄的,并且是增量进行,也就是在每次有新邮件或者是用户对邮件进行修改或删除时进行,因此将索引的代价降至最低。Dovecot 只对那些用户客户端经常用到的信息,如邮件标题,邮件发送者等进行索引。保证索引文件不过于太大。在邮箱的邮件数很小的时候是看不出索引的好处的,但当邮件数量慢慢增大时,Dovecot 就显示出他的优势:每次打开邮箱,收发删除邮件都非常快。相比其他一些传统主流的 IMAP Server 如 uwimap,就不支持索引,因此每当打开邮箱,需要扫描整个文件系统,载入全部文件,放到内存,代价之大,可想而知。另外索引和我们接下来讨论的主题是紧密相关的。
3. 易于管理和扩展性。Dovecot 具有非常多的插件,使得配置十分方便和灵活。比如用于用户认证的 auth-mechanism,支持 plain,CRAM-MD5 等。下面是例子:
10-auth.conf: auth_mechanisms = plain login cram-md5
又比如用于用户密码认证的 passworddb,支持 password-file,LDAP,SQL,Static 等。下面是 SQL 的例子,非常简单直观:
dovecot-sql.conf: password_query = SELECT userid AS username, domain, password \ FROM users WHERE userid = '%n' AND domain = '%d'
又比如用于计算用户当前所用的磁盘配额(quota),Dovecot 同样提供了插件。类似这样的插件还有非常多,而且配置非常简单,使得学习和维护 IMAP Server 的成本降得很低。