courier-imap, mysql和horde's imp的基础上创建一个邮件服务器系统.
1. 序言
--------------------------------------------------------------------------------
不论你是为系统后台程序、单一的服务器或域名地址,还是为多个虚拟域名进行电子邮件派发传递, qmail都可以通过简单的设置满足你的需求。本指南将在着重说明远程访问和加密传输的基础上指导你完成上面所说的所有工作。
本指南将帮助你使用qmail,courier-imap, vpopmail和horde/imp。而这些内容也将涉及到 daemontools, ucspi-tcp, mysql, apache和mod_php。在相关核心组件中,qmail提供了核心mta功能, courier-imap提供了远程邮箱IMAP访问服务,vpopmail提供了虚拟域名管理,horde/imp则提供了webmail访问。
在emerge相关软件包之前,你需要激活以下的USE变量。如果你已经emerge了上述软件包中的任何一个,你也许需要再次emerge它们。USE="maildir ssl imap mysql"。另外,如果为你的webmail使用 horde/imp,你需要在emerge mod_php之前使用USE="nls"
注释: 本指南为分步骤进行,不论什么时候只要你认为完成了设置,你都可以不必再继续。
在课程的最后一步,你只需把所有的工作交给qmail来完成。当然,你可以使用许多其他的软件包来构建你的e-mail服务器系统。现在你该决定qmail是否适合你了,我们还为你准备了另外一个围绕 Postfix进行的有趣的指南 ,或者你也可以研究一下exim。对于你来说,你应该为你自己选择一个最佳的解决方案;而对于我们来说,则是为你展示如何使用qmail。
2. qmail (面向本地)
--------------------------------------------------------------------------------
代码 2.1: Emerge qmail
# emerge qmail
重要: 本指南是围绕qmail-1.03-r13 或更新的版本来进行讲解的。它对于以前的版本同样适用吗?也许吧。你应该升级一下你的qmail吗?是的――只要你确信这个指南能够正确指引你。
警告: 如果你遇到了the virtual/mta package conflicts with another package这样一条提示,你便需要unemerge系统上其他的MTA。要知道是哪些软件包导致了冲突,请运行emerge qmail -p。
Emerge qmail的同时也会emerge ucspi-tcp和daemontools。如果愿意的话你可以研究一下 ucspi-tcp和daemontools。daemontools主要负责将qmail作为服务来管理,而ucspi-tcp则负责管理引入到qmail服务上的的TCP连接。
首先我们来做一些安装后的相关设置。
代码 2.2: qmail的快速设置
(自定义你的个人信息)
# nano /var/qmail/control/servercert.cnf
# ebuild /var/db/pkg/net-mail/qmail-1.03-r*/qmail-1.03-r*.ebuild config
qmail的设计在很大程度上注重其安全性,因此它不会给root账号发送任何邮件。因此现在你需要在你的系统上指定一个可以代替root的帐号来接收邮件。在这篇指南中,我将使用'vapier'用户来进行相关的设置说明。
代码 2.3: 设置非root账号
# cd /var/qmail/alias
# echo vapier > .qmail-root
# echo vapier > .qmail-postmaster
# echo vapier > .qmail-mailer-daemon
现在启动并运行qmail邮件派发服务。
代码 2.4: 启动qmail邮件派发服务
# rc-update add svscan default
# /etc/init.d/svscan start
# cd /service
# ln -s /var/qmail/supervise/qmail-send qmail-send
我们想知道qmail是否可以正常工作,下面来对它进行快速测试。
代码 2.5: 测试邮件派发服务
# ssh vapier@localhost
# maildirmake .maildir
# qmail-inject root << EOF
test root e-mail!
EOF
# qmail-inject postmaster << EOF
test postmaster e-mail!
EOF
# qmail-inject vapier << EOF
test vapier e-mail!
EOF
# mutt(在收件箱中你应该有3封电子邮件)
完成了!现在你拥有了一个可以处理本地计算机或者系统后台程序/用户有关邮件发送请求任务的邮件系统。
警告: 如果你没有收到邮件或者在日志文件中(查看 /var/log/qmail/)看到有关 'localhost.localhost'奇怪的错误信息,这说明你的域名或dns没有设置好。在默认情况下, qmail会利用hostname --fqdn的输出信息。如果在你的机器上这条命令输出的是 'localhost',那么请检查/etc/hostname, /etc/hosts, 你的dns三者是否都已经设置好。完成这项工作后,编辑 /var/qmail/control/ 下面的配置文件。如果你需要更多的帮助,请参考下面的样例文件。
代码 2.6: /var/qmail/control/ 下的二级域名设置样例文件
# hostname --fqdn
wh0rd.org
# cat me
wh0rd.org
# cat defaultdomain
wh0rd.org
# cat plusdomain
wh0rd.org
# cat locals
wh0rd.org
# cat rcpthosts
wh0rd.org
代码 2.7: /var/qmail/control/ 下的三级域名设置样例文件
# hostname --fqdn
mail.wh0rd.org
# cat me
mail.wh0rd.org
# cat defaultdomain
wh0rd.org
# cat plusdomain
wh0rd.org
# cat locals
mail.wh0rd.org
# cat rcpthosts
mail.wh0rd.org
3. vpopmail
--------------------------------------------------------------------------------
代码 3.1: Emerge vpopmail
# emerge vpopmail
重要: 本指南是围绕vpopmail-5.4.0_rc1 或更新的版本来进行讲解的。它对于以前的版本同样适用吗?也许吧。你应该升级一下你的vpopmail吗?是的――只要你确信这个指南能够正确指引你。
vpopmail相对qmail来说需要多花一点时间来进行设置。由于vpopmail需要mysql才能运行,因此我们首先要启动并运行mysql,然后我们便可以设置vpopmail数据库并进行后面的步骤。在做这一步之前,你应该确保mysql已经进行了正确的emerge和相关设置。请注意,我对vpopmail设置的口令是'vpoppw',当然你应该选择一个不同的口令。。
代码 3.2: 在mysql中设置vpopmail
# rc-update add mysql default如果你是第一次emerged mysql, 请在启动mysql服务器之前务必运行
ebuild <mysql.ebuild> config命令并且根据提示完成相应的步骤.
# /etc/init.d/mysql start
# nano /etc/vpopmail.conf(修改口令:将'secret'更改为'vpoppw')
# mysql -p << EOF
create database vpopmail;
use mysql;
grant select, insert, update, delete, create, drop on vpopmail.* to vpopmail@localhost identified by 'vpoppw';
flush privileges;
EOF(下面的命令也许是不需要的,但是为了保险起见我们还是运行一下)
# chown root:vpopmail /etc/vpopmail.conf
# chmod 640 /etc/vpopmail.conf
# chown root:vpopmail /var/vpopmail/bin/vchkpw
# chmod 4711 /var/vpopmail/bin/vchkpw
警告: 如果你遇到了有关mysql/vpopmail的权限问题,你可能需要重新启动你的mysql。完成这一工作只需要运行 /etc/init.d/mysql restart。
现在,vpopmail可以运行了。在这篇指南中,我们将为"wh0rd.org"域名建立虚拟主机。这就是说,我们需要在vpopmail中指定虚拟主机所对应的域名。与此同时,我们也将快速添加一个名为 'vapier' 的帐号。
代码 3.3: 添加域名
# source /etc/profile(只有当你运行下面的vadddomain 得到"command not found"的时候你才有必要执行这个步骤)
# vadddomain wh0rd.org postpass(现在快速检查一下域名是否设置正确)
# printf "postmaster@wh0rd.org\0postpass\0blah\0" | vchkpw `which id` 3<&0
uid=89(vpopmail) gid=89(vpopmail) groups=0(root)
(如果你没有得到类似上面的内容, 则可能是权限设置不当)
# vadduser vapier@wh0rd.org vappw
每在vpopmail中创建一个域名都将生成一个名为'postmaster'的帐号。在这里我们为postmaster 账号设置的口令是'postpass'。在vpopmail能够完全正常工作之前,我们需要通过courier来接收邮件、通过qmail和SMTP来发送邮件。
4. Courier POP/IMAP
--------------------------------------------------------------------------------
代码 4.1: Emerge courier-imap
# emerge net-mail/courier-imap
重要: 你必须在emerge vpopmail之后emerge courier-imap,这样authvchkpw模块就将被创建。
重要: 本指南是围绕net-mail/courier-imap-2.1.2-r1或更新的版本来进行讲解的。它对于以前的版本同样适用吗?也许吧。你应该升级一下你的qmail吗?是的――只要你确信这个指南能够正确指引你。
现在进行一些基本的安装后的设置。只有当你准备使用SSL加密通信(你应该使用它!)的时候这些步骤才是必要的,否则,请直接跳到下面命令列表中每项设置的的最后两步,并且去掉init 脚本中的'-ssl'后缀。
代码 4.2: POP3/SSL的快速设置
# cd /etc/courier-imap
# nano authdaemonrc(设置authmodulelist变量使其只包含"authvchkpw")
# nano pop3d.cnf(编辑 [ req_dn ] 段落)
# mkpop3dcert
# rc-update add courier-pop3d-ssl default
# /etc/init.d/courier-pop3d-ssl start
代码 4.3: IMAP/SSL的快速设置
# cd /etc/courier-imap
# nano imapd.cnf(编辑 [ req_dn ] 段落)
# mkimapdcert
# rc-update add courier-imapd-ssl default
# /etc/init.d/courier-imapd-ssl start
现在你的邮件客户端应该可以登录到主机上收发邮件了。对于我来说,我可以用账号'vapier@wh0rd.org' 以及口令'vappw'进行登陆。
5. qmail (面向外界)
--------------------------------------------------------------------------------
现在开始启动并运行SMTP,同时确认一下我们没有为垃圾邮件制造另一个漏洞。
代码 5.1: 启动 qmail SMTP 服务
# cd /var/qmail/control/
# nano conf-smtpd(去掉SMTP-AUTH 变量并且将 QMAIL_SMTP_CHECKPASSWORD 设置到 /var/vpopmail/bin/vchkpw 上)
# nano servercert.cnf(编辑[ req_dn ] 段落)
# mkservercert
# cd /service
# ln -s /var/qmail/supervise/qmail-smtpd qmail-smtpd
# /etc/init.d/svscan restart
如果你还没有对qmail的配置文件进行调整,qmail将接受所有来自wh0rd.org虚拟域名和本地计算机用户的邮件。此外,qmail只为那些通过127.0.0.1发送邮件的用户以及通过了vpopmail身份验证的用户处理邮件发送请求。因此在使用邮件客户端发送邮件时,请务必选择类似“服务器需要身份验证”的选项。对于我来说,我使用用户名'vapier@wh0rd.org'和口令'vappw'进行登录。最后,你还需要设置邮件客户端为SMTP打开SSL/TLS选项,否则你将无法通过qmail的身份认证。
6. Horde / IMP Webmail Client
--------------------------------------------------------------------------------
虽然现在有相当多的webmail客户端(而且你可以免费使用它们),但我更偏向于使用由Horde 框架构成的IMP Webmail Client。其中最主要的理由是Horde可以为你提供方便的Webmail访问,并且你可以通过添加插件来处理诸如地址簿、日历、计划任务等工作。如果这些都不足以吸引你,那么也许你可以访问一下 Horde的官方网站。
好了! 现在,我们需要emerge IMP.
代码 6.1: Emerge IMP
# emerge horde-imp
重要: 本指南是围绕horde-2.2.4和horde-imp-3.2.2进行讲解的。CVS版本(也就是即将发布的下一个新版本)可能在相关配置设置上有较大的不同。
除非你已经很清楚的知道Horde该如何设置,否则初次配置Horde并不是那么容易。幸运的是,我知道该如何去做,因此你可以轻松的完成这项工作。
代码 6.2: Horde的快速设置
# cd /var/www/localhost/htdocs/horde/config/
# for f in *.dist ; do mv ${f} ${f/.dist} ; done
# nano horde.php(在 'Horde Authentication'段落:)
$conf['auth']['driver'] = 'imap';
$conf['auth']['params']['dsn'] = '{localhost:993/imap/ssl}';
(在 'Horde Logging'段落:)
$conf['log']['name'] = '/var/log/apache2/horde.log';
(在 'Problem Reporting'段落:)
$conf['problems']['enabled'] = true;
$conf['problems']['email'] = 'webmaster@wh0rd.org';
# nano registry.php(在 'Handlers'段落:)
$this->registry['auth']['login'] = 'imp';
$this->registry['auth']['logout'] = 'imp';
(在 'Application registry'段落:)
将['imp'] 中的 'status' 从 'inactive' 更改为 'active'
# touch /var/log/apache2/horde.log
# chown apache:apache /var/log/apache2/horde.log
注释: 由于某种原因也许你想更改'webmaster'的e-mail账号,如果是这样的话,你需要通过vpopmail来添加这个用户(或者参看下面有关qmailadmin的叙述)。
现在开始设置IMP。
代码 6.3: IMP的快速设置
# cd /var/www/localhost/htdocs/horde/imp/config/
# for f in *.dist ; do mv ${f} ${f/.dist} ; done
# nano servers.php(编辑 $servers['imap'] 阵列:)
$servers['imap'] = array(
'name' => 'wh0rd.org',
'server' => 'localhost',
'protocol' => 'imap/ssl/novalidate-cert',
'port' => 993,
'folders' => '',
'namespace' => 'INBOX',
'maildomain' => 'wh0rd.org',
'smtphost' => 'localhost',
'realm' => '',
'preferred' => ''
);
最后,启动Apache,开始使用webmail。
代码 6.4: 运行apache
# nano /etc/conf.d/apache2(取消 APACHE2_OPTS="-D SSL -D PHP4" 注释)
# rc-update add apache2 default
# /etc/init.d/apache2 start
警告: 你也许应该考虑一下强制horde用户通过https进行连接。这虽然算不上什么重要的问题,但为了安全因素你最好对此进行设置。
要测试你的IMP设置,启动Web浏览器然后访问http://localhost/horde/ (或者将localhost换成你正在进行设置的服务器)。你应该可以看见一个欢迎页面并且你可以从这个页面登陆 Horde。对于我的设置来说,我只需要使用'vapier@wh0rd.org' 和 'vappw' 作为用户名和口令就可以进行登录了。
现在,Hoede和IMP都已经设置好了。但也许你应该回头看看你的配置文件目录并且按照你所需要的进行优化。
7. 额外的软件包
--------------------------------------------------------------------------------
qmailadmin
我首先推荐的软件包是qmailadmin. 它是一个用于管理虚拟域名的基于web的管理界面。你只需要简单的emerge net-mail/qmailadmin 然后在你的web浏览器中打开http://localhost/cgi-bin/qmailadmin 就可以开始使用它了。这个软件会使你的工作变得格外轻松。
qmHandle
如果你在处理qmail队列并且在对某些情况进行排错时遇到了麻烦,我建议你使用qmHandle。它是一个允许你查看并且管理 qmail消息队列的perl小程序。同样,你需要做的仅仅是emerge net-mail/qmhandle。
horde附加软件
我想强烈推荐其他的一些Horde相关应用程序。Turba, Kronolith和Nag 可以在短时间内让IMP工作得更好。它们的配置过程与IMP比较类似,因此在这项工作上你应该不会遇到什么大碍。记得编辑 Hoede配置目录下的registry.php以便使这些新程序可以在horde管理页面的底部显现。
ucspi-tcp
qmail在处理引入到服务器的连接时会用到ucspi-tcp。如果你想自定义这些过滤规则,请参看/etc/tcprules.d/ 下面的配置文件。在这里你可以找到与每个服务相对应的两个相关文件,一个是配置文件(如tcp.qmail-smtp)另一个是ucspi-tcp使用的这个配置文件编译后的文件(如tcp.qmail-smtp.cdb)。当你对这两个文件进行更新后,你需要重建这些文件的二进制版本。要完成这项工作,只需要运行 tcprules tcp.qmail-smtp.cdb tcp.qmail-smtp.tmp < tcp.qmail-smtp即可。每当qmail接收到一个连接,其编译过的规则文件都会被重新读取一次,因此你不需要重新启动服务。
qmail-scanner
如果你想在你的服务器上实现内容过滤(垃圾邮件或者病毒扫描),那么你需要一个与默认不同的队列处理程序。qmail-scanner可以比较好的完成这一工作,你需要做的只是emerge net-mail/qmail-scanner,然后编辑/etc/tcprules.d/tcp.qmail-smtp 文件。
重要: qmail-scanner的build过程并不是令人愉快的,因为在emerge qmail-scanner之前你的系统中必须已经安装了相应的软件包,比如SpamAssassin 以及/或者 Clam AntiVirus。要获得更多信息请参阅以下的相关内容。
代码 7.1: 更改queuer
# cd /etc/tcprules.d/
# nano tcp.qmail-smtp(将 QMAILQUEUE="/var/qmail/bin/qmail-scanner-queue" 加入到catchall过滤规则中)
# tcprules tcp.qmail-smtp.cdb tcp.qmail-smtp.tmp < tcp.qmail-smtp
如果你想对垃圾邮件过滤和病毒过滤进行设置,请参阅以下的内容。你可以修改 /var/qmail/bin/qmail-scanner-queue.pl来进行一些自定义设置。
SpamAssassin
SpamAssassin是最好的开源垃圾邮件过滤程序之一. 你只需运行emerge dev-perl/Mail-SpamAssassin 来进行安装. 这个软件有command line(命令行版本)和client/server(客户端/服务器端)版本。 如果你的服务器处理的邮件不多,那么command line(命令行版本)就可以满足你的需要了;但是如果你的服务器需要处理大量的邮件,你则需要选择client/server(客户端/服务器端)版本。
代码 7.2: SpamAssassin的快速设置
# nano /etc/mail/spamassassin/local.cf(以下的选项设置为原始最低需求:)
required_hits 6
skip_rbl_checks 1
# rc-update add spamd default
# /etc/init.d/spamd start
# nano /var/qmail/bin/qmail-scanner-queue.pl(请确保$spamc_binary 已经设置到了'/usr/bin/spamc'上.)(如果它被设置到 '' 上, 请参看下面的注意事项.)
重要: 如果在emerge qmail-scanner之前你的系统中没有安装SpamAssassin,那么现在你需要重新 emerge qmail-scanner。qmail-scanner的build过程并不令人愉快,而且在build的过程中它只会将那些已经检测到的软件包加入到它的功能特性中去。
现在,所有的邮件都会通过qmail-scanner进行传输,同时SpamAssassin会对这些邮件进行扫描。
Clam AntiVirus
与SpamAssassin类似,Clam AntiVirus 也有两个版本,下面我将为你说明如何对client/server(客户端/服务器端)版本进行快速设置。但首先,你需要emerge net-mail/clamav。
代码 7.3: Clam AntiVirus的快速设置
# nano /etc/conf.d/clamd(设置 START_CLAMD=yes)
# nano /etc/clamav.conf(按你的需要对其进行修改和设置)
# rc-update add clamd default
# /etc/init.d/clamd start
# nano /var/qmail/bin/qmail-scanner-queue.pl(请确保 $clamscan_binary 变量已经设置到了 '/usr/bin/clamscan' 上.)(如果它被设置到 '' 上, 请参看下面的注意事项.)
# nano /var/qmail/control/conf-common(如果 ClamAV 报告有memory problem(内存读取问题)请尝试将softlimit的值设高一点)
重要: 如果在emerge qmail-scanner之前你的系统中没有安装Clam AntiVirus,那么现在你需要重新 emerge qmail-scanner。qmail-scanner的build过程并不令人愉快,而且在build的过程中它只会将那些已经检测到的软件包加入到它的功能特性中去。
现在,所有的邮件都会通过qmail-scanner进行传输,同时 Clam AntiVirus 会对这些邮件进行扫描。
8. 最后的提醒
--------------------------------------------------------------------------------
我没有什么最后的提醒,除非你在阅读本指南的时候遇到了了什么困难,如果你发现这个教程有什么 Bug,请通过Gentoo's Bugtracking Website 来与我进行联系。如果你有任何好的技巧可以为本指南增色,也请你务必给我来信。我很喜欢qmail,因此我想让这个指南更加丰富以便让大家更好的体验MTA