delphij's Chaos

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

27 Nov 2005

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

假定你使用的是FreeBSD

  1. 在测试服务器上测试postfix配置文件,确认其能够与qmail提供同样的服务。
  2. 在第一台机器上执行下述操作:
    1准备a:执行svc -d /services/qmail-smtpd,停止进信。
    1准备b:执行qmailctl flush,下发所有邮件,等待队列空。

1a. 重新编译一份world和kernel(建议:升级到FreeBSD 6.0-RELEASE,a.k.a. RELENG_6_0)
1b. 执行make installkernel
1c. 重新启动,进入单用户,mount -u /, mount -a, mergemaster -p,合并用户和组的修改。
1d. 进入/usr/src,执行make installworld INSTALL=install
1e. 执行mergemaster -i,合并全部配置文件的修改。这一步骤将还原mailer.conf。
1f. 整理crontab,删除其中不合理的设置
1g. 使用find删除/bin, /lib, /libexec, /sbin, /usr/bin, /usr/sbin, /usr/lib, /usr/libexec, /usr/man, /usr/share中所有修改日期早于昨天的文件。这一步非常重要。
1h. 完全删除qmail:删除/var/qmail
1i. 删除全部ports:删除/var/db/pkg以及/usr/local;删除/command和/service
1j. 再次执行make installworld,以确认全部文件已经安装。
1k. 重新启动
2. 现在,被qmail挠的遍体鳞伤的系统得以恢复健康。将测试好的包复制上来,pkg_add,安装配置文件。
3. 重新启动系统。
4. 观察进信日志(/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

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

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