Biaobiaoqi的博客

邮件服务(三):实践服务器搭建

| Comments

背景

邮件服务系列博文中,前两篇介绍了邮件系统的基本功能和安全体系,本文记录了搭建邮箱服务器的实践。

Sendmail 是一种多用途、支援多种协定的跨网络电子邮件传送代理软件,于 1983 年随着 BSD 4.1c 首次发行,2001 年时的调查,互联网上的邮件服务器有 42%使用 Sendmail,但之后由于多次被发现重大的安全性漏洞,且其设定档过于复杂造成较高的学习门槛等因素,导致市占率下滑。

PostfixWietse Zweitze Venema 创造出来以取代 Sendmail。本次实践即使用 Postfix 为域名 biaobiaoqi.me 搭建邮箱服务器,服务器是 Linode 上的 VPS,Ubuntu 12.04LTS,DNS 服务器使用 DNSPod

检查 IP 信用度

在自建邮件服务器之前,先检查所要使用的 IP 的信用度。如果 IP 已经在垃圾邮件联盟的黑名单里面,意味着这个 IP 在此之前或许被用作发送垃圾邮件,不愿意给这个 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
;; ANSWER SECTION:
43.114.186.106.in-addr.arpa. 8640 IN  PTR mail.biaobiaoqi.me.

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
netstat -nltp | grep dovecot #查看 POP3 (993)和 IMAP (995)的端口是否运行

netstat -nltp | grep 25 #查看 SMTP(25)的端口是否运行

对于没有使用 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
->#opendkim-testkey -d biaobiaoqi.me -s mail -k /etc/postfix/dkim.key -vvv
opendkim-testkey: key loaded from /etc/postfix/dkim.key
opendkim-testkey: checking key 'mail._domainkey.biaobiaoqi.me'
opendkim-testkey: key not secure #这里大概是用户、权限的问题。不会影响基本功能
opendkim-testkey: key OK

邮箱服务器健康度测试

完成上述所有步骤后,一个完整的域名邮箱就可以投入使用了。在此之前,可以做一次全面的体检。

推荐使用在线监测服务: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:参见解释

管理队列中的邮件

在服务器端管理队列中得邮件使用postqueuepostsuper命令。使用详情参见:

其他参考资料