delphij's Chaos

选择chaos这个词是因为~~实在很难找到一个更合适的词来形容这儿了……

07 Jun 2011

总算找到时间把邮件系统迁移给做了

之前用的邮件系统是基于 postfix、Cyrus IMAPd、amavisd-new等软件在2006年搭建的,跑了5年多,作为不折腾会死星人,对这套系统一直有相当多的不满意,举例来说:

Cyrus IMAPd支持 foo+box@domain.tld,也就是如果foo用户的邮箱中存在’box’这个子目录时直接投递到那个子目录很有问题;

Cyrus IMAPd采用的是自己的邮箱格式。支持这种格式的只此一家;我虽然不是Maildir的fans,但Maildir是一种事实标准,而且处理起来工具也要多的多;

amavisd-new和postfix的集成原先是采取双MTA的方式进行的,这种做法会导致至少多一倍的磁盘I/O(好处是在系统过载的时候不影响进信),并且由于多了一个环节有可能引入更多的不确定性【1】;

当然其实更重要的还有:

为了便于备份而采用的 ZFS 快照和远程复制机制,以及,

原先的服务器和我的物理距离太远,为了访问速度必须要做迁移。

新的方案大致如下,有时间慢慢整理howto出来:

  1. MTA:postfix(未变)
  2. 目录服务:OpenLDAP(未变)
  3. 反垃圾套件:amavisd-milter + amavisd-new
  4. IMAP/POP3服务:dovecot
  5. OS:FreeBSD 8.2-ATWATER-p2
  6. 撤掉了队列前的 SenderID milter,这部分功能已经由 amavisd 实现了,而且事实上现在也很少有人在生产系统中用 SenderID/SPF 来阻止别人冒充自己发邮件。

现在还差一个队列前会话期间反垃圾的策略服务。之前采用的是 postfix-gps,找了一圈没有找到一个让人感觉靠谱的,所以准备找时间自己拿 twisted 重新写一个然后开源放出来。


【1】这个说法可能是有争议的。我认为以milter方式集成的好处是对方看到的是超时而不是已经将邮件收下,因此出现问题的机会要少一些。


Archived: 9 Comments

johnpupu | June 7, 2011 6:46 PM

沒有考慮用 dspam + dovecot-sieve?

rick47 | June 9, 2011 12:19 AM

之前看到你提到pix干扰startls的问题,请问后来怎么解决的?

Xin LI | June 9, 2011 9:21 AM

解决方案是交涉失败,换了一个没PIX的机房,做人总要有点自己的态度对吧。

iget.myopenid.com | June 14, 2011 11:25 PM

跟老大请教个问题。一直觉得邮件服务器很重要的一点就是稳定,毕竟你不知道别人什么时候向你发送邮件嘛。但是这样的要求对网络、服务器、机房都要求比较高,再加上无处不在的垃圾邮件,个人维护一个自己邮件服务器的成本还是很高的。现在google、MS都提供了免费的邮箱服务,可以使用自己的域名搭建并管理自己的邮件服务,这就成了一个稳定、高效切低成本的新选择。
当然这样的服务也有缺点,就是你必须付出隐私和安全(信息安全)的代价作为交换。我正在为两种选择纠结。想请问的就是这样的服务我到底需要付出,或者无法控制的风险到底有哪些?如果能对这些风险,举一些例子就更好了,谢谢。

Xin LI replied to comment from iget.myopenid.com | June 15, 2011 12:39 AM

如果只是自己架邮件的话,我认为不合算(成本可能是托管到 Google 那里的几十倍;如果算上免费的版本——可以有10个用户——那就更不合算了),除非你和我有类似的考虑,例如:

a) 发生宕机时立即知道,以及可以立即获得的异地备份(我自己运行的系统有至少1份异地备份,差距不超过24小时)。Google 承诺的 uptime 是 99.9%,这个 uptime 完全可以满足绝大多数用户的需要,但是出现问题的时候有可能在第一时间拿不到自己的数据。
b) 立即知道邮件的处理情况。邮件是否已经到了对方服务器上?什么时间到的?对方发出的邮件是否已经收到?这些问题 Google 目前并不提供查询的方法,实现起来不难,但成本不一定会便宜。
c) 隐私。坦率地说这个不完全是问题(真正需要保密的邮件我会做端到端的加密,而不是依赖服务器不泄密,而且我并不认为 Google 做这件事一定会不如我自己来做,因为他们有足够的保安资源)
d) 求职需要。邮件系统涉及了典型的 Internet 系统所需要面临的很多方面的问题,包括如何配置 DNS、反解析、应对 abuse 投诉、服务器架设等等,这些经验如果自己开公司,或者出去找工作都会用得上。当然,这个不一定真的是一个问题。
e) 发信需要。我的某些应用软件需要发送邮件给其他人,我需要自己的邮件服务器。

所以,至少我想到的这些方面,都 *不是* 必须自己去架设邮件系统的理由。作为兴趣是可以的,如果真要去做个生产环境的话,最好还是评估一下成本和收益再决定。

iget.myopenid.com | June 23, 2011 2:34 AM

感谢这么详细的回复。想在问一下:
关于a),这里面第一时间拿不到自己的数据是什么意思?是说不能访问之前已经收到的邮件吗?关于这个我是采用了比较土的办法,就是用一台客户端每小时同步一下。不知道这种土鳖办法是不是能解决拿不到数据的问题。
关于e),我之前也遇到这个问题。我现在的解决办法就是不发邮件。不知道老大有什么解决办法没有。难道让gmail帮我发送这些邮件?

Xin LI replied to comment from iget.myopenid.com | June 24, 2011 12:42 AM

a) 基本可以解决。
e) 不发邮件不是解决方法,用 gmail 也不是(而且我认为白用别人提供的公共资源来做商业用途是不合适的;即使从自己的利益出发考虑,他们也可能随时关闭对你提供的服务)。维护邮件服务是费时费力的事情,除非是真有兴趣去研究,否则如果只是批量发送邮件的话可以试试看一些专业的服务,不一定非要自己架一套出来。

f5b | October 30, 2011 6:28 PM

啥时候整理个how to 出来呢?
准备研究一下,没有clue

Xin LI replied to comment from f5b | November 1, 2011 2:09 PM

暂时没时间整理。另外个人观点是邮件服务器就不应该有 HOWTO 文档,没有完整的背景知识就不应该配置自己的邮件服务器。