delphij's Chaos

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

27 Nov 2005

笔记:大型ICP如何将qmail替换为postfix

本文约 1314 字,阅读大致需要 3 分钟

假定你使用的是FreeBSD

  1. 在测试服务器上测试postfix配置文件,确认其能够与qmail提供同样的服务。
  2. 执行svc -d /services/qmail-smtpd,停止进信。
  3. 执行qmailctl flush,下发所有邮件,等待队列空。
  1. 重新编译一份world和kernel(建议:升级到FreeBSD 6.0-RELEASE,a.k.a. RELENG_6_0)
  2. 执行 make installkernel
  3. 重新启动,进入单用户,mount -u /, mount -a, mergemaster -p,合并用户和组的修改。
  4. 进入 /usr/src,执行 make installworld INSTALL=install -C
  5. 执行 mergemaster -i,合并全部配置文件的修改。这一步骤将还原 mailer.conf
  6. 整理crontab,删除其中不合理的设置
  7. 使用find删除/bin, /lib, /libexec, /sbin, /usr/bin, /usr/sbin, /usr/lib, /usr/libexec, /usr/man, /usr/share中所有修改日期早于昨天的文件。这一步非常重要。
  8. 完全删除qmail:删除/var/qmail
  9. 删除全部ports:删除/var/db/pkg以及/usr/local;删除/command和/service
  10. 再次执行make installworld,以确认全部文件已经安装。
  11. 重新启动
  12. 现在,被qmail挠的遍体鳞伤的系统得以恢复健康。将测试好的包复制上来,pkg_add,安装配置文件。
  13. 重新启动系统。
  14. 观察进信日志(/var/log/maillog)。

要点:
0. 邮件系统上的时间准确性至关重要,你应该使用ntpd来确保这一点。典型的 /etc/ntp.conf 如下:

server 131.107.1.10 prefer  
server 129.6.15.28  
server 129.6.15.29  
server 132.163.4.101  
server 132.163.4.102  
server 132.163.4.103  
server 128.138.140.44  
server 192.43.244.18  
server 66.243.43.21  
server 208.184.49.9  
server 207.126.98.204  
server 207.200.81.113  
server 205.188.185.33  

然后再到/etc/rc.conf中加入:

ntpd_enable="YES"  
ntpd_sync_on_start="YES"

注意第二句会确保系统启动时时间得以正确更新。否则需要再执行一次ntpdate。默认情况下,ntpd会缓慢地使始终同步,加入这一设置之后,ntpd在获得正确时间之后会立即设置时间,随后回到默认的时钟校准状态。

  1. 通常,邮件服务器应保持健康的DNS连接。要做到这一点,推荐在本地执行一份bind作为cache:
cd /etc/namedb  
sh make-localhost  

然后,在/etc/rc.conf中加入:

named_enable="YES"

注意:默认的BIND配置只监听127.0.0.1,因此这不会引致远程攻击问题。另外,FreeBSD 6附带的bind版本已经相当安全。

  1. postfix可以通过修改/etc/mail/mailer.conf来通过mailwrapper使用。我个人的经验,这种方式兼容性要更好一些。注意同时需要修改periodic.conf,方法参考port安装时显示的消息。

  2. 所有东西从ports安装。不要问我从port以外的方式或者在Linux上面怎么装,除非你愿意出一个合适的价格。

  3. 如果你的系统已经被qmail污染的乱七八糟,用下面的方法(在单用户模式)恢复/var/的清洁:

rm -fr /var/*
chflags -R 0 /var/*
rm -fr /var/* 
mtree -deUf /etc/mtree/BSD.var.mtree -p /var
mtree -deUf /etc/mtree/BSD.sendmail.mtree -p /
newsyslog -C
  1. 邮件服务器通常是全冗余结构。由于优秀的设计,在替换为postfix之后,可以放心地撤下至少1/3的服务器而不致导致负载能力不足的问题。不要一次完成所有替换,特别是历史比较长的系统,以免发生问题时难以应付。

  2. 撰写这篇笔记是希望它能有用,也希望它有助于减少不理性的MTA的装机量,从而减少互联网上飞来飞去的垃圾邮件——除非你有兴趣维护像乞丐的百衲衣的千层补丁——但无论如何,把qmail换成postfix是一个降低运营和维护成本的好选择。