如何使用 Dovecot 设置 Postfix 电子邮件服务器

Postfix 介绍


本教程将告诉你如何设置基本的邮件服务器,并教你一些关于Postfix MTA(邮件传输代理)的过程。

Postfix 非常灵活,其架构基于一个宽松的服务组合,以接收电子邮件并将其传递给其他服务(在接收外端的smtp本地虚拟的服务,如果您正在寻找接收邮件)。

Postfix 有几百个配置参数(http://www.postfix.org/BASIC_CONFIGURATION_README.html)。如果你想管理一个可靠地交付业务要求的大型组织的邮件服务器,你应该让自己熟悉所有这些(man 5 postconf)。这个教程将是足够的,本身,使你成为一个有能力的专业电子邮件管理员.然而,如果你想熟悉postfix或为自己和几个朋友设置邮件服务器,这个教程,以及那些要遵循,将是你的朋友。

多德介绍


Dovecot 也是巨大的(这里是 wiki for dovecot 2),但我们只想从 dovecot 获得一组非常小的功能。

本文解釋了幾乎每個設定要詳細地設定。你可以繼續前進,如果你想要 - _ 在自己的風險。

本教程假定(并使用)下列设置:

  • Debian 7.1 wheezy x64_86
  • 邮件修复 2.9.6-2
  • dovecot 1:2.1.7-7

虽然任何基于 Debian 的操作系统都应该很好,但 Postfix 在广泛的版本中使用,包括 Postfix 1.x, Postfix 2.9 和 Postfix 2.10,这些版本有一些互相不兼容的设置和功能 - 并且使用 Postfix 2.9 这个教程并不在流血边缘。

这个教程也假设一些关于你的事情:

  • 您在 GNU/Linux 命令行上感到舒适,并且使用 Debian 等 GNU/Linux 系统的一般布局和工作原理。
  • 您的本地系统是 GNU/Linux 或合理兼容(MinGW, Cygwin, Mac OS X, *BSD)
  • 您知道如何在您的滴滴上获得 root 细胞。

默认情况下,将输入命令,并从滴子上的 root 编辑文件. 与大多数其他 DigitalOcean 文章一样,您需要定制的命令部分将被突出。

系统设置


以下成分是必要的,使您的滴子准备成为一个邮件服务器:

  • 域名,假设它是mydomain.com
  • 您的邮件服务器的托管名称,假设mail.mydomain.com
  • 对于mail.mydomain.com有效的SSL证书

设置SSL证书


在本教程中,我们将假设证书存储在 /etc/ssl/certs/mailcert.pem 和密钥存储在 /etc/ssl/private/mail.key. 确保密钥只能被 root 用户读取!

如何为您的网站和电子邮件设置SSL证书取决于您的网站结构和您使用的CA(自我签名、组织(子)CA或商业CA)。

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

并将默认值留下来,只需点击输入所有提问. 不要在生产中使用此证书!

大多数CAs将要求您提交证书签名请求(CSR)。

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

正确填写所查询的信息,如本转录中所述:(检查您打算使用的CA在CSR中需要哪些信息)

 1Generating a 2048 bit RSA private key
 2.............................+++
 3................+++
 4writing new private key to 'mail.key'
 5-----
 6You are about to be asked to enter information that will be incorporated
 7into your certificate request.
 8What you are about to enter is what is called a Distinguished Name or a DN.
 9There are quite a few fields but you can leave some blank
10For some fields there will be a default value,
11If you enter '.', the field will be left blank.
12-----
13Country Name (2 letter code) [AU]: US
14State or Province Name (full name) [Some-State]: Virginia
15Locality Name (eg, city) []: Langley
16Organization Name (eg, company) [Internet Widgits Pty Ltd]: Network Services Association
17Organizational Unit Name (eg, section) []: Infrastructure Services
18Common Name (e.g. server FQDN or YOUR name) []: mail.mydomain.com
19Email Address []: [email protected]
20
21Please enter the following 'extra' attributes
22to be sent with your certificate request
23A challenge password []:
24An optional company name []:

(请注意,在没有额外工作的情况下,您无法使用subjectAltName字段创建一个有效的证书,再次检查CA的文档!)

设置DNS


您必须设置 DNS 以指向您的邮件服务器 IP 的 A 记录和指向邮件服务器主机名的 MX 记录。

如果你正在使用DigitalOcean的DNS,这里是如何做到这一点:

  • 进入您的 DigitalOcean 面板中的DNS区域
  • 创建一个新的域名或选择您之前创建的域名
  • 点击右上角的添加记录按钮
  • 添加一个记录:

Adding an A record

  • 再次点击添加记录,然后添加指向 A 记录的 MX 记录:

Adding an MX record

其他信息可以在 [ 主机名称设置]( / 社区 / 文章 / 如何设置-a-host-name-with-digitalocean)和 [ DNS 提示和技巧]( / 社区 / 文章 / dns-tips-and-tricks)文章中找到。

检查DNS


DNS 需要几个小时才能在整个互联网上传播,但它应该在几分钟后在您的 DNS 服务器上设置。

1[root@yourbase] ~# dig MX mydomain.com +short @ns1.digitalocean.com
250 mail.mydomain.com.
3[root@yourbase] ~# host mail.mydomain.com ns1.digitalocean.com
4Using domain server:
5Name: ns1.digitalocean.com
6Address: 198.199.120.125#53
7Aliases:
8
9mail.mydomain.com has address 82.196.9.119

邮局


我们现在将设置Postfix来接收和发送当地用户的邮件。

包装


Debian 的默认 MTA 是 Exim. 关闭它! 安装后,我们也会停止 postfix,因为我们不希望它在运行。

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

一个小插件: Postfix 自行管理其 DAEMON,不需要服务(init.d)系统. postfix 开始, postfix 停止和 postfix 重新加载等同于服务 postfix 开始,服务 postfix 停止和服务 postfix 重新加载。

Postfix 配置


Postfix 有两个主要的配置文件: main.cf,它指定了您认为的配置选项,以及 master.cf,它指定了服务postfix应该运行。

首先,配置 master.cf文件(在 /etc/postfix/)。添加一个额外的smtpd实例,称为提交,它将从可信的客户端接收邮件,以便向世界发送,我们不允许任何人。 要做到这一点,打开 master.cf(如果您想了解发生了什么,请查看 man 5 master),并解除提交配置并添加选项以启用 SASL:

1submission inet n       -       -       -       -       smtpd
2  -o syslog_name=postfix/submission
3  -o smtpd_tls_wrappermode=no
4  -o smtpd_tls_security_level=encrypt
5  -o smtpd_sasl_auth_enable=yes
6  -o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject
7  -o milter_macro_daemon_name=ORIGINATING
8  -o smtpd_sasl_type=dovecot
9  -o smtpd_sasl_path=private/auth

这保证了一点解释. 选项-o...超出了从默认值中取出的设置或在配置中定义的设置,我们将在稍后设置。 简而言之,这里发生的事情是,这允许TLS的提交示威者确保外部连接,并通过doveCot介导的SASL来检查连接客户端的用户名和密码。

重要细节是看不见的细节:‘smtpd_recipient_restrictions’缺少了 reject_unauth_destination,这是默认存在的,并且限制了传输。

然后我们继续到 main.cf. 我们将从这里开始一个干净的页面 - 运行cp /etc/postfix/main.cf /etc/postfix/main.cf.orig如果你想保存默认配置文件(它也位于/usr/share/postfix/main.cf.dist),然后打开它并清除它!

让我们先设置网络信息:(postfix 正在处理邮件的域信息,以及一些额外的信息)

1myhostname = mail.domain.com
2myorigin = /etc/mailname
3mydestination = mail.domain.com, domain.com, localhost, localhost.localdomain
4relayhost =
5mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
6mailbox_size_limit = 0
7recipient_delimiter = +
8inet_interfaces = all

我们设置了主机名和默认来源,由 debian convention 源于 /etc/mailname. 如果您没有 /etc/mailname,您可以明确设置它。默认来源用于构建本地用户的From地址。 mydestination将域名设置为postfix接受电子邮件作为最终目的地,我们将relayhost设置为空,以禁用转发邮件(转发意味着接受邮件,然后转发到邮件的最终目的地不是邮件的邮件服务器,我们不需要这样做;例如,在企业内部网络中,中央邮件服务器应该在离开网络之前检查邮件)。

附加提示:这与开放传递一词无关,这是一个接收任何人没有身份验证的邮件服务器,并将其发送到MTA,用于不在其自身网络中的域名 - 为此使用其他传递__设置,我们将其保留为默认和禁用)

我们不需要设置此设置,因为我们只是保持默认设置,但如果我们稍后想要添加另一种定义字母地图的方法,则可以明确它。

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

然后我们设置了SSL:

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

我们为它设置了 cert 文件和密钥,启用 tls,并设置缓存文件,然后我们使 TLS 成为可选的,因为我们不允许在公共 smtp 服务器上每 RFC2487上要求 TLS。

另一个默认设置是好的,但如果您希望稍后添加它,则应该明确指定 local_recipient_maps:

1local_recipient_maps = proxy:unix:passwd.byname $alias_maps

此设置告知 Postfix 检查搜索表并拒绝向无法在表中找到的用户发送电子邮件。这很重要,因为如果local_recipient_maps没有设置,其替代行为是先接受邮件,然后稍后反弹。这会导致反弹:如果 postfix 无法立即确定所有有效的用户(在 smtpd 服务中),例如当local_recipients_maps没有设置时,它会接受邮件,然后在稍后发送通知(当它发现邮件在 smptd 发送后无法发送时)。

合适的配置


例如,SMTP RFC(http://www.ietf.org/rfc/rfc5321.txt)命令任何接受任何邮件的公共邮件服务器都必须接受邮件到邮件管理员帐户,有些人可能会期望主机,滥用,网页管理员和其他邮箱存在。您可以将这些邮件地址重定向到根,或向特定用户。

 1mailer-daemon: postmaster
 2postmaster: root
 3nobody: root
 4hostmaster: root
 5usenet: root
 6news: root
 7webmaster: root
 8www: root
 9ftp: root
10abuse: root

如果你想将所有这些重定向到特定本地用户,说你的名字只需添加

1root: yourname

Postfix 将为您解决整个代码链,并将所有这些邮件地址转发到您的姓名(由 本地 戴蒙使用 代码 规格来完成)。

正如代名所说,在更新 /etc/aliases文件后,您必须运行

1newaliases

将文件编译成数据库 Postfix 用于快速搜索。

多德


这将是更少的文本墙!深呼吸,我们几乎完成了。

包装


1aptitude install dovecot-core dovecot-imapd

如果您想要所有默认包,请运行

1aptitude install dovecot-common

然后进入 /etc/dovecot/dovecot.conf 并再次清除文件(这一次很重要 - 默认配置包括我们不想要的 `/etc/dovecot/conf.d 中的一堆子 config 文件)。

现在输入以下 config:

 1disable_plaintext_auth = no
 2mail_privileged_group = mail
 3mail_location = mbox:~/mail:INBOX=/var/mail/%u
 4userdb {
 5  driver = passwd
 6}
 7passdb {
 8  args = %s
 9  driver = pam
10}
11protocols = " imap"

这允许 plaintext auth(plaintext身份验证将通过TLS进行隧道化),告诉doveCot使用mail系统组访问本地邮箱(加上邮箱的位置),使用Unix身份验证系统来身份验证用户,并只启用imap。

如果你愿意,你可以让doveCot自动将垃圾和发送文件夹添加到邮箱中:

1protocol imap {
2  mail_plugins = " autocreate"
3}
4plugin {
5  autocreate = Trash
6  autocreate2 = Sent
7  autosubscribe = Trash
8  autosubscribe2 = Sent
9}

接下来,我们需要打开一个接口,postfix 可以用来对 dovecot 的身份验证进行 piggy-back:

1service auth {
2  unix_listener /var/spool/postfix/private/auth {
3    group = postfix
4    mode = 0660
5    user = postfix
6  }
7}

最后是SSL Config:

1ssl=required
2ssl_cert = </etc/ssl/certs/mailcert.pem
3ssl_key = </etc/ssl/private/mail.key

注意角盘!他们告诉douecot从文件中读取。

结局


保存并关闭所有 config 文件,并执行

1newaliases
2postfix start
3service dovecot restart

测试您的配置与邮件客户端,例如Mozilla Thunderbird. 你应该能够发送和接收邮件从任何地方和到任何地方!

继续


如果要添加虚拟邮箱(邮箱不与本地用户帐户相关联,但可以使用本地数据库进行配置),请继续使用 部分 2

现在您可以测试发送电子邮件的两种方式,从一个终端到滴滴:

1~# mail [email protected]
2Subject: test email from postfix
3this is a test
4.
5EOT

来自[email protected]的邮件应该很快到达[email protected](填写您控制的电子邮件地址,显然)。

1~# mail
2Heirloom mailx version 12.5 6/20/10. Type ? for help.
3"/var/mail/root": 1 message
4>N 1 Your Name Wed Nov 13 23:45 41/1966 Re: test email from postf

如果你按 Enter 键,它会显示消息(然后键入 q并按 Enter离开邮件客户端)

与本地电子邮件客户端相同的工作. 设置一个新的系统用户:

 1~# adduser joe
 2Adding user `joe' ...
 3Adding new group `joe' (1001) ...
 4Adding new user `joe' (1001) with group `joe' ...
 5Creating home directory `/home/joe' ...
 6Copying files from `/etc/skel' ...
 7Enter new UNIX password: Enter password here
 8Retype new UNIX password: Enter password here
 9passwd: password updated successfully
10Changing the user information for joe
11Enter the new value, or press ENTER for the default
12        Full Name []:
13        Room Number []:
14        Work Phone []:
15        Home Phone []:
16        Other []:
17Is the information correct? [Y/n] Y

你在这里输入的密码是用于电子邮件的密码. Joe 现在可以使用地址 [email protected] 与 Thunderbird 这样的本地邮件客户端. 在 Thunderbird 中,只需添加一个新的帐户(文件 -> 新 -> 现有邮件帐户')并在对话框中输入[email protected]` 和密码。

如果您的邮件客户端无法自动检测所需的设置:IMAP连接的用户名为joe,端口为143,身份验证方法是通过STARTTLS未加密的密码。

如果有什么不起作用,请检查系统日志中的错误消息,其中包含「tail -n 50 /var/log/syslog」,以及邮件日志中的错误消息,其中包含「tail -n 50 /var/log/mail.log」。

主持人:

Published At
Categories with 技术
Tagged with
comments powered by Disqus