在Debian上配置邮件服务器:Postfix + Dovecot + SSL

很多同学都购买了VPS用于干各种各样好玩的事情,你们肯定也有人想过要架设自己的email服务器,以后都使用绑定自己域名的邮件地址,帅到没朋友,再也不用为那些又臭又长又丑的邮箱名发愁啦。

今天给大家带来这篇教程就是教你如何在Debian系统中架设基于postfix和dovecot的email服务器。本篇主要内容基于DigitalOcean的教程:How to set up a postfix email server with dovecot,其他参考内容有:
http://www.byteslounge.com/tutorials/postfix-dovecot-ssl-configuration-example
http://cnedelcu.blogspot.com/2014/01/how-to-set-up-simple-mail-server-debian-linux.html

快速链接:
软件简介⇒版本对应⇒SSL证书设置⇒DNS设置⇒Postfix配置⇒Dovecot配置⇒测试

Postfix介绍

本教程将教你如何设置一个最基本的email服务器,以及包括Postfix,Dovecot和SSL在内的一些基础知识。

Postfix本身由一系列服务组成,它们负责接收email,以及将email传递给其他服务。Postfix实现了email的接收、路由以及发送等的核心功能,但它同时也依赖第三方软件来完成其他的工作。
Postfix有好几百个参数可以设置,通过调节这些参数,你可以为庞大的组织结构配置可靠的邮件服务,如果你有兴趣了解详情可以查看它的官方页面或者使用man 5 postconf命令。这篇教程当然不会涵盖所有参数,但足够满足你为你自己或少数亲朋设置邮件服务器的需求。

Dovecot介绍

Dovecot也是个巨型软件,但我们仅会用到它的很小一部分。我们会很详细的介绍调整的每一个参数,你可以选择性的略过一些blahblah,当然后果也是自负:)

本教程针对的系统及软件版本是

  • Debian 7.1 wheezy x64_86
  • Postfix 2.9.6-2
  • dovecot 1:2.1.7-7

在我的VPS上已亲测成功,在其他基于Debian的系统(例如Ubuntu)上的设置也十分类似。值得注意的是,Postfix和Dovecot目前均有多个版本在使用(Postfix 1.x~2.10,Dovecot 1.x~2.1),他们之间的设置和功能都有些许差别,这里仅针对Postfix 2.9以及Dovecot 2.1.7有效,其他版本的设置请自行参阅相关文档。

系统设置

在开始安装软件之前,请先确保以下事项:

  • 一个域名,例如“mydomain.com”
  • 在该域名下,指向邮件服务器的子域名,例如“mail.mydomain.com”
  • 用于“mail.mydomain.com”的SSL证书

设置SSL证书

你需要为SSL生成一个证书与一个私钥,你可以运行以下命令生成证书文件/etc/ssl/certs/mailcert.pem以及私钥/etc/ssl/private/mail.key

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/mail.key -out /etc/ssl/certs/mailcert.pem

同时请确保这些文件只能被root读取!SSL证书有很多种类型,你可以阅读这篇文章对它们有更多了解,并根据你的网站结构及需求选择合适的证书类型。上述命令生成的是自签名证书,请注意这种证书仅应在测试时使用,在正式发布的产品中不要使用!你可以使用以下命令要求访问者申请证书署名(CSR)

sudo openssl req -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/mail.key -out mailcert.csr

命令中红字标出的-days 365代表证书的时效(天),可根据需求更改。生成过程中填入相应信息:

Generating a 2048 bit RSA private key
.............................+++
................+++
writing new private key to 'mail.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]: CN
State or Province Name (full name) [Some-State]: Beijing
Locality Name (eg, city) []: Beijing
Organization Name (eg, company) [Internet Widgits Pty Ltd]: Example Company
Organizational Unit Name (eg, section) []: Infrastructure Services
Common Name (e.g. server FQDN or YOUR name) []: mail.mydomain.com
Email Address []: postmaster@mydomain.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

DNS设置

在DNS设置中,你需要一个将域名指向邮件服务器IP地址的A记录,以及一个指向邮件服务器主机名的MX记录(Mail eXchange)。此处以使用DigitalOcean DNS系统为例,如果你使用的是其他主机供应商,也能找到类似的设置页面。首先添加A记录让mydomain.com指向服务器IP,然后添加MX记录将mail.mydomain.com指向刚才的A记录。MX记录包含一个优先级,数字越小表示优先级越高,DNS会按照优先级高低选择邮件服务器来处理邮件。

Adding an A record
Adding an MX record

DNS记录通常要经过数小时才能广播到全网,你可以通过这两个工具来检测DNS的广播情况:DNS PropagationMX Lookup。或者运行dighost命令测试

[root@yourbase] ~# dig MX mydomain.com +short @8.8.8.8
50 mail.mydomain.com.
[root@yourbase] ~# host mail.mydomain.com 8.8.8.8
Using domain server:
Name:
Address: 8.8.8.8
Aliases:

mail.mydomain.com has address 82.196.9.119
 其中8.8.8.8是Google架设的DNS服务器,你可以换成你自己使用的DNS服务器地址来检测本地情况。

Postfix

做好上述所有准备工作之后,我们可以开始安装并设置Postfix。Debian默认的邮件服务器软件是exim,首先我们卸载它并安装Postfix

aptitude remove exim4 && aptitude install postfix && postfix stop

配置Postfix

Postfix有两个主要配置文件:

  • /etc/postfix/main.cf 主配置文件
  • /etc/postfix/master.cf 配置postfix所需的服务

首先我们打开/etc/postfix/master.cf

sudo vim /etc/postfix/master.cf

找到#submission,移除#并添加如下内容

submission inet n       -       -       -       -       smtpd
  -o syslog_name=postfix/submission
  -o smtpd_tls_wrappermode=no
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING
  -o smtpd_sasl_type=dovecot
  -o smtpd_sasl_path=private/auth

这样我们添加了一个名为“submission”的smtpd实例,这样它将接受所有来自可信用户的邮件,你可以通过man 5 master命令查看这些配置的详情。简而言之我们开启了TLS用于安全连接,以及由Dovecot提供的SASL功能用于验证用户名和密码。

接着备份原有的main.cf文件,创建一个空白main.cf

sudo mv /etc/postfix/main.cf /etc/postfix/main.cf.orig
sudo vim /etc/postfix/main.cf

添加如下网络配置:

myhostname = mail.mydomain.com
myorigin = /etc/mailname
mydestination = mail.mydomain.com, mydomain.com, localhost, localhost.localdomain
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all

这里我们用Debian中提供的/etc/mailname作为默认的发件人地址,你也可以根据需求指定为其他内容。Postfix只会接受收件人地址为mydestination中限定的域名的邮件。relayhost适用于邮件中继转发,例如公司对所有内网发出的邮件进行审查后再发送时使用,此处设为空。

接着添加以下内容,用来指定本地别名映射(alias maps):

alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases

接下来添加SSL配置:

smtpd_tls_cert_file=/etc/ssl/certs/mailcert.pem
smtpd_tls_key_file=/etc/ssl/private/mail.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_tls_security_level=may
smtpd_tls_protocols = !SSLv2, !SSLv3

这些配置包括指定证书和私钥文件,开启TLS,指定缓存等。根据RFC2487,我们将TLS设置为可选,使得它在其他公共smtp服务器上不是必须使用。同时,由于近来披露的SSL Poodle漏洞,我们禁用SSLv2和SSLv3,而仅仅使用TLSv1.0。

最后我们添加local_recipient_maps参数:

local_recipient_maps = proxy:unix:passwd.byname $alias_maps

通过设置这个参数,Postfix将会主动查询一张记录有所有收件人的表,当邮件收件人不在表中时则拒收。如果不设置该参数,则可能会引起“退信错误”(backscatter)。

别名设置

另外在别名设置中我们有必要添加几个特定的用户。根据SMTP RFC中规定,任何公共邮件服务器必须接收发往“postmaster”用户的邮件,另外像“hostmaster”,“webmaster”等等也是很多场合下默认使用的邮件地址。你可以通过设置别名,将发往这些“用户”的邮箱转向给root,或其他特定用户。打开/etc/aliases文件

sudo vim /etc/aliases

添加如下设置,将所有邮件转给root:

mailer-daemon: postmaster
postmaster: root
nobody: root
hostmaster: root
usenet: root
news: root
webmaster: root
www: root
ftp: root
abuse: root

你还可以再将所有发往root的邮件转给某个用户:

root: yourname

编辑完/etc/aliases文件后运行以下命令完成编译。

newaliases

Dovecot

由于只用到Dovecot的一小部分功能,所以它的配置相对简单,胜利就在眼前!

首先安装Dovecot包:

aptitude install dovecot-core dovecot-imapd dovecot-common

同样的,备份/etc/dovecot/dovecot.conf然后新建空白文件


sudo mv /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.orig
sudo vim /etc/dovecot/dovecot.conf

添加如下配置:

disable_plaintext_auth = no
mail_privileged_group = mail
mail_location = mbox:~/mail:INBOX=/var/mail/%u
userdb {
  driver = passwd
}
passdb {
  args = %s
  driver = pam
}
protocols = " imap"

其中mail_privileged_group选项指定了mail用户组来管理本地邮箱,mail_location选线顾名思义指定本地邮箱的具体存放位置。同时,你还可以让Dovecot自动创建“垃圾箱”和“已发送”邮件夹:

protocol imap {
  mail_plugins = " autocreate"
}
plugin {
  autocreate = Trash
  autocreate2 = Sent
  autosubscribe = Trash
  autosubscribe2 = Sent
}

接着我们设置socket让Postfix可以与Dovecot验证过程同时发生:

service auth {
  unix_listener /var/spool/postfix/private/auth {
    group = postfix
    mode = 0660
    user = postfix
  }
}

最后设置SSL:

ssl=required
ssl_cert = /etc/ssl/certs/mailcert.pem
ssl_key = /etc/ssl/private/mail.key

大功告成!

结束语

保存好所有设置文件,然后运行以下命令重启各项服务:

newaliases
postfix start
service dovecot restart

一切正常的话,你现在可以使用这台服务器接收和发送邮件了。作为最简单的测试,你可以登陆其他的邮箱,发送邮件给root@mydomain.com,或者使用mail指令进行测试。

当然你还可以添加新的用户,让他们使用你的邮件服务器,例如:

~# adduser joe
Adding user `joe' ...
Adding new group `joe' (1001) ...
Adding new user `joe' (1001) with group `joe' ...
Creating home directory `/home/joe' ...
Copying files from `/etc/skel' ...
Enter new UNIX password: Enter password here
Retype new UNIX password: Enter password here
passwd: password updated successfully
Changing the user information for joe
Enter the new value, or press ENTER for the default
        Full Name []:
        Room Number []:
        Work Phone []:
        Home Phone []:
        Other []:
Is the information correct? [Y/n] Y

先在用户Joe就可以使用joe@mydomain.com这个邮箱地址来收发邮件了。

你可以查阅系统日志/var/log/syslog和邮件日志/var/log/mail.log来分析和处理遇到的问题。

以上就是liwen.com上的第一篇教程日志,在本篇的后续教程中我会接着讲解如何设置虚拟邮箱等内容,今后也会带来更多IT相关的精彩内容,欢迎关注~

3 Comment

  1. hai says: 回复

    SSL证书有点小贵啊,如果我自己生成的SSL证书,然后用到自己使用的email服务器可以么?

    1. Liwen says: 回复

      自己使用的话完全没有问题!比如我现在就是用的自签名的证书 –> https://g.xuliwen.com
      另外startssl.com提供免费的入门级ssl证书,为期一年,后续是否需要续费我也不太清楚。网上有相应教程如何申请。

  2. hai says: 回复

    另外还有个问题,就是我怎么样配置,才能使用foxmail这样的客户端连接上邮件服务器? 以及输入用户名 密码 stmp地址和端口这些?

发表评论