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

一直都想有一台自己的邮件服务器,原因有俩:

  1. 可以使用自己的域名,不必看Google apps等服务的脸色(自打Google Apps免费版只能添加域别名后就放弃使用了,虽然这是一个可以添加1000个用户的帐号)。
  2. 对新闻组特别有好感,也喜欢由MHonArc生成的archive,展现的方式远远优于目前各种论坛组织方式,将来我也会找时间学习一下MHonArc的配置使用。

正好头脑一时发热又注册了一枚域名,且并没有拿去建站的想法,所以干脆趁热搭建自己的邮件服务器吧。 嗯,本文参考了3篇教程:


注:本文所有操作均在root下进行

所涉及的软件介绍

  • Postfix是一个著名的邮件服务器,由任职于IBM华生研究中心(T.J. Watson Research Center)的荷兰籍研究员Wietse Venema为改良sendmail而开发。Postfix是一个著名的邮件服务器,由任职于IBM华生研究中心(T.J. Watson Research Center)的荷兰籍研究员Wietse Venema为改良sendmail而开发。
  • Dovecot是CentOS系统中著名的POP3/IMAP服务器实现。POP3/IMAP是从邮件服务器中读取邮件时使用的协议,POP3将邮件全部从服务器中拖取下来;IMAP则每次从服务器获取邮件名等关键信息,要读某封邮件时,才从服务器下载。
  • DKIM(DomainKeys Identified Mail)是一种电子邮件的验证技术,使用密码学的基础提供了签名与验证的功能。发送方会在电子邮件的标头插入 DKIM-Signature 及电子签名资讯。而接收方则透过DNS查询得到公开金钥后进行验证。

DNS设置

  • 添加一条SPF记录:
v=spf1 a mx ip4:123.123.123.123 ~all
  • Reverse DNS设置,IP到域名的映射,可通过vps控制面板进行设置。
  • MX设置
example.com         MX      10      example.com
example.com         MX      10      12.34.56.78
mail.example.com    MX      10      12.34.56.78

安装及配置Postfix

Debian默认的邮件服务器软件是exim,首先我们卸载它并安装Postfix。

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

Postfix有两个主要配置文件,主配置文件 /etc/postfix/main.cf ,配置postfix所需的服务 = /etc/postfix/master.cf = 。

  • 编辑配置 = /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功能用于验证用户名和密码。

  • 编辑配置 /etc/postfix/main.cf ,备份原有的main.cf文件,创建一个空白main.cf。
mv /etc/postfix/main.cf /etc/postfix/main.cf.orig
emacs /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配置,这里禁用SSLv2和SSLv3,而仅仅使用TLSv1.0。

smtpd_tls_cert_file=/etc/dovecot/dovecot.pem
smtpd_tls_key_file=/etc/dovecot/private/dovecot.pem
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

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

local_recipient_maps = proxy:unix:passwd.byname $alias_maps
  • 你可以通过设置别名,将发往这些“用户”的邮箱转向给root,或其他特定用户。打开编辑 /etc/aliases 文件,添加如下设置,将所有邮件转给root(也可以设置发给其他用户):
mailer-daemon: postmaster
postmaster: root
nobody: root
hostmaster: root
usenet: root
news: root
webmaster: root
www: root
ftp: root
abuse: root

安装及配置Dovecot

首先安装Dovecot包:

aptitude install dovecot-core dovecot-imapd dovecot-common

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

mv /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.orig
emacs /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用户组来管理本地邮箱,maillocation选线顾名思义指定本地邮箱的具体存放位置。同时,你还可以让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/dovecot/dovecot.pem
ssl_key = </etc/dovecot/private/dovecot.pem

安装及配置DKIM

首先安装 OpenDKIM

apt-get install opendkim opendkim-tools

编辑 /etc/opendkim.conf 文件:

Domain            mydomain.com
AutoRestart Yes
AutoRestartRate 10/1h
UMask 002
Syslog yes
SyslogSuccess Yes
LogWhy Yes
Canonicalization relaxed/simple
ExternalIgnoreList refile:/etc/opendkim/TrustedHosts
InternalHosts refile:/etc/opendkim/TrustedHosts
KeyTable refile:/etc/opendkim/KeyTable
SigningTable refile:/etc/opendkim/SigningTable
Mode sv
PidFile /var/run/opendkim/opendkim.pid
SignatureAlgorithm rsa-sha256
UserID opendkim:opendkim
Socket inet:12301@localhost

编辑 /etc/default/opendkim 文件,加入:

SOCKET="inet:12301@localhost"

这时需要再次修改一下Postfix的配置文件 /etc/postfix/main.cf 了。

milter_protocol = 2
milter_default_action = accept
smtpd_milters = inet:localhost:12301
non_smtpd_milters = inet:localhost:12301

增加信任列表:

mkdir /etc/opendkim
mkdir /etc/opendkim/keys

编辑 /etc/opendkim/TrustedHosts

127.0.0.1
localhost
192.168.1.1/24
*.mydomain.com
#*.example.net
#*.example.org

编辑 /etc/opendkim/KeyTable

mail._domainkey.ipb.tw ipb.tw:mail:/etc/opendkim/keys/ipb.tw/mail.private
#mail._domainkey.example.net example.net:mail:/etc/opendkim/keys/example.net/mail.private
#mail._domainkey.example.org example.org:mail:/etc/opendkim/keys/example.org/mail.private

编辑 /etc/opendkim/SigningTable

*@mydomain.com mail._domainkey.mydomain.com
#*@example.net mail._domainkey.example.net
#*@example.org mail._domainkey.example.org
cd /etc/opendkim/keys
mkdir mydomain.com
cd mydomain.com
sudo opendkim-genkey -s mail -d mydomain.com
sudo chown opendkim:opendkim mail.private

最后查看 /etc/opendkim/keys/mydomain/mail.txt ,根据里面的内容给域名增加一条TXT记录:

mail._domainkey.mydomain.com. 300 IN TXT "v=DKIM1; k=rsa; p=一大串的編碼9fFUwIDAQAB"

重启 PostfixDovecot 服务。

给邮件服务器打分

可以通过 http://www.mail-tester.com 来给你发出的邮件进行打分: mail-tester.png 对于结果小过表示相当满意。


本页最后更新时间:2015-10-26 Mon 10:28.
小过的布拉格 - Copyright©2013-2017 - @xiaoguo - Powered by Emacs 26.1 (Org mode 9.1.1)
行路难,行路难, 多歧路,今安在。长风破浪会有时,直挂云帆济沧海。