背景
邮件服务系列博文中,前两篇介绍了邮件系统的基本功能和安全体系,本文记录了搭建邮箱服务器的实践。
Sendmail 是一种多用途、支援多种协定的跨网络电子邮件传送代理软件,于 1983 年随着 BSD 4.1c 首次发行,2001 年时的调查,互联网上的邮件服务器有 42%使用 Sendmail,但之后由于多次被发现重大的安全性漏洞,且其设定档过于复杂造成较高的学习门槛等因素,导致市占率下滑。
Postfix 被 Wietse Zweitze Venema 创造出来以取代 Sendmail。本次实践即使用 Postfix 为域名 biaobiaoqi.me 搭建邮箱服务器,服务器是 Linode 上的 VPS,Ubuntu 12.04LTS,DNS 服务器使用 DNSPod。
检查 IP 信用度
在自建邮件服务器之前,先检查所要使用的 IP 的信用度。如果 IP 已经在垃圾邮件联盟的黑名单里面,意味着这个 IP 在此之前或许被用作发送垃圾邮件,不愿意给这个 IP 擦屁股的话,就换个 IP 好了。
可以点下面的链接查看:
- http://anti-spam.org.cn/
- http://www.justspam.org/check-an-ip
- http://www.spamhaus.org/query/bl?ip=74.125.129.27 #需要将连接末尾的 IP 替换为邮箱服务器的 IP
域名、IP 相关配置
FQDN 配置
选定的邮箱服务器需要有合适的全名。比如可以设定 biaobiaoqi.me 的邮箱服务器的 FQDN 为 mail.biaobiaoqi.me。修改 FQDN 的命令如下:
hostname mail.biaobiaoqi.me
查看 FQDN 的命令为:
hostname -f
FQDN 需要记住,之后配置 DNS 记录时需要。
MX 记录和 A 记录
配置 MX 记录指向邮箱服务器 IP。
biaobiaoqi.me. 600 IN MX 10 biaobiaoqi.me.
使用如下命令查询:
dig mx biaobiaoqi.me
在 DNS 服务器里增加针对邮箱服务器的 FQDN 的 A 记录。
mail.biaobiaoqi.me. 10 IN A 106.186.114.43
使用如下命令查询:
dig a mail.biaobiaoqi.me
PTR 配置
Linode 的域名反向解析设置教程参见:Setting Reverse DNS
查看 PTR 的命令如下:
dig -x 106.186.114.43
得到的结果中有如下项则为正确:
1 2 |
|
SPF 配置
在 DNSPod 上设置 SPF 记录。由于 DNS 本身不支持 SPF 类型,可以使用 TXT 记录代替:
biaobiaoqi.me. 600 IN TXT "v=spf1 a mx -all"
可以通过如下命令查询:
dig txt biaobiaoqi.me
在线测试 SPF 是否部署成功:http://www.openspf.org/Why?show-form=1
Postfix 搭建
使用 Postfix 做 SMTP 服务器,Dovecot 来做 IMAP/POP3 服务器,并使用 Mysql 存储加盐密码作认证。具体教程如下:
Email with Postfix, Dovecot, and MySQL
启动 postfix:
sudo service postfix start
启动 dovecot:
sudo dovecot -c /etc/dovecot/dovecot.conf
邮件服务启动后,测试相应的端口是否正常开放:
1 2 3 |
|
对于没有使用 TLS 或者 STARTTLS 的邮件服务器,可以使用 telnet 测试 SMTP 是否部署成功。而本次实践中增加了用户认证,telnet 这种明文传输的协议无法作为测试工具,只好直接使用邮件客户端做功能测试。
DKIM 配置安装
具体部署过程参照:dkim-postfix-ubuntu
其中需要注意,如果使用的 Postfix 版本不低于 2.6,需要将/etc/postfix/main.cf 中的 milter_protocol 赋值为 6。
postconf mail_version
可以查看 postfix 的版本。
本地测试公钥密钥是否正确:(opendkim-testkey 命令的介绍)
1 2 3 4 5 |
|
邮箱服务器健康度测试
完成上述所有步骤后,一个完整的域名邮箱就可以投入使用了。在此之前,可以做一次全面的体检。
推荐使用在线监测服务:mail-tester。这是一个全面、界面友好的邮件测试网站。按照要求发送邮件到某邮件地址,然后就可以查到邮件服务器的体检报告了。每项都会有详细的说明。
遇到的问题记录
安装部署的过程中,遇到不少问题。简略记录下其中有代表性的一些:
能成功发送邮件,但无法接受邮件,在日志中查看,全是 status=deferred。解决:FQDN 的设定错误。
使用
sudo service opendkim start
无法启动 OpenDKIM。解决:不要使用 service 命令,而是用如下命令启动:/etc/init.d/opendkim start
在使用 Maildir 格式接收邮件时,无法接受邮件。解决:需要自己在用户目录下构建 Maildir/tmp、Maildir/cur、Maildir/new 目录。
在使用 Maildir 格式接收邮件时,无法接受邮件。解决:本地 Maildir 的权限会造成 Permission denied。
给 qq 邮箱发送邮件,提示『此地址未验证,请注意识别』。解决:这是 qq 的 bug:参见解释
管理队列中的邮件
在服务器端管理队列中得邮件使用postqueue
和postsuper
命令。使用详情参见: