如何使用Dovecot设置Postfix电子邮件服务器
后缀介绍
本教程将告诉您如何设置一个基本的邮件服务器,并在此过程中教您一些有关 Postfix MTA(邮件传输代理)的知识。
Postfix 非常灵活。 它的架构基于一个松散的服务组合,这些服务接收电子邮件并将它们传递给其他服务(接收外缘上的“smtp”等服务,以及传递外缘上的“本地”和“虚拟”服务,如果你'重新查看接收邮件)。 Postfix 本身实现了接收、路由和传递邮件的核心要求,并依赖第三方扩展来完成其余的工作。
Postfix有数百个配置参数。 如果您想管理一个可靠地将业务需求传递给一个大型组织的邮件服务器,您应该让自己与所有这些服务器保持密切联系(man 5 postconf)。 本教程将 而不是 本身就足以使您成为称职的专业电子邮件管理员。 但是,如果您想熟悉 postfix 或为自己和几个朋友设置邮件服务器,那么本教程以及后续教程将是您的朋友。
鸽舍简介
我不会在 dovecot 上花太多介绍性的话。 Dovecot 也很大(这里是 dovecot 2 的 wiki),但我们只需要 dovecot 的一小部分功能。
本文详细解释了几乎每一个要设置的设置。 如果需要,您可以继续浏览解释 - 风险自负。
本教程假设(并使用)以下设置:
- Debian 7.1 wheezy x64_86
- 后缀 2.9.6-2
- 鸽舍 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)
- 你知道如何在你的 droplet 上获得一个 rootshell
- 你知道如何使用文本编辑器(例如 Linux 上的 vim、nano、emacs 或标准编辑器
ed
)
默认情况下,将从 droplet 的 rootshell 输入命令和编辑文件。 与大多数其他 DigitalOcean 文章一样,您需要自定义的部分命令将被 突出显示 。
系统设置
要使您的 Droplet 准备好成为邮件服务器,以下要素是必要的:
- 一个域,假设它是“mydomain.com”
- 邮件服务器的主机名,假设“mail.mydomain.com”
- 对“mail.mydomain.com”有效的 SSL 证书
设置 SSL 证书
对于 SSL,您需要证书和私钥。 在本教程中,我们将假设证书保存在 /etc/ssl/certs/mailcert.pem
中,密钥保存在 /etc/ssl/private/mail.key
中。 确保密钥只能由 root 用户读取!
如何为您的网站和电子邮件设置 SSL 证书取决于您的网站结构和您使用的 CA(例如自签名、组织(子)-ca 或商业 ca)。 创建自签名测试证书就像执行一样简单
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/mail.key -out /etc/ssl/certs/mailcert.pem
只需在所有询问的问题上按回车键即可保留默认值。 不要在生产中使用此证书!
大多数 CA 会要求您提交证书签名请求。 (CSR)您可以生成一个这样的:
sudo openssl req -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/mail.key -out mailcert.csr
正确填写查询的信息,如以下成绩单:(与您打算使用的 CA 确认 CSR 中需要包含哪些信息)
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]: US State or Province Name (full name) [Some-State]: Virginia Locality Name (eg, city) []: Langley Organization Name (eg, company) [Internet Widgits Pty Ltd]: Network Services Association 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 []:
(请注意,如果没有一些额外的工作,您无法使用 subjectAltName
字段创建对多个域有效的证书 - 再次检查 CA 的文档!)
设置 DNS
您必须使用指向您的邮件服务器 IP 的 A 记录和指向邮件服务器主机名的 MX 记录来设置您的 DNS。
如果您使用的是 DigitalOcean 的 DNS,请按以下步骤操作:
- 转到 DigitalOcean 面板中的“DNS”区域
- 创建一个新域或选择一个您之前创建的域
- 点击右上角的“添加记录”按钮
- 添加一条 A 记录:
- 再次点击“添加记录”,添加一条指向A记录的MX记录:
可以在 主机名设置 和 DNS 提示和技巧 文章中找到更多信息。
验证 DNS
DNS 将需要几个小时才能在整个 Internet 上传播,但应该在几分钟后在您的 DNS 服务器上设置。 你可以检查挖 & 主持人 :
[root@yourbase] ~# dig MX mydomain.com +short @ns1.digitalocean.com 50 mail.mydomain.com. [root@yourbase] ~# host mail.mydomain.com ns1.digitalocean.com Using domain server: Name: ns1.digitalocean.com Address: 198.199.120.125#53 Aliases: mail.mydomain.com has address 82.196.9.119
后缀
我们现在将设置 Postfix 来为本地用户接收和传递邮件。
套餐
Debian 上的默认 MTA 是 Exim。 干掉它! 我们还将在安装后停止 postfix,因为我们不希望它运行。
aptitude remove exim4 && aptitude install postfix && postfix stop
一个小插曲:Postfix 自己管理它的守护进程,不需要服务(init.d)系统。 postfix start、postfix stop 和 postfix reload 等价于 service postfix start、service postfix stop 和 service postfix reload。
后缀配置
Postfix 有两个主要的配置文件:main.cf,它指定你认为的配置选项,和 master.cf,它指定 postfix 应该运行的服务。
首先,配置master.cf文件(在/etc/postfix/
中)。 添加一个名为“submission”的额外“smtpd”实例,它将从受信任的客户那里获取邮件,以传送到整个世界,我们不允许其他任何人这样做。 为此,请打开 master.cf(如果您想了解发生了什么,请查看 man 5 master)并取消注释提交配置并添加启用 SASL 的选项:
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
这需要一些解释。 -o ...
选项会覆盖取自默认值或在配置中定义的设置,我们稍后会设置。 简而言之,这里发生的情况是,这使带有 TLS 的“提交”守护进程能够保护外部连接,并启用 dovecot 介导的 SASL 来检查连接客户端的用户名和密码。 (我们稍后会在 dovecot 中设置它)。
重要的细节是看不到的:smtpd_recipient_restrictions
缺少 reject_unauth_destination,它作为默认值存在并限制中继。
然后我们转到 main.cf。 我们将从这里开始 - 如果你想保存默认配置文件(虽然它也在 /usr/share/postfix/main.cf.dist
中),请运行 cp /etc/postfix/main.cf /etc/postfix/main.cf.orig
,然后打开它并清除它!
让我们首先设置网络信息:(有关域后缀的信息正在处理邮件,以及一些额外的信息)
myhostname = mail.domain.com myorigin = /etc/mailname mydestination = mail.domain.com, domain.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。 如果没有 /etc/mailname,可以显式设置。 默认来源用于构造本地用户的“发件人”地址。 mydestination 设置 postfix 接受电子邮件作为最终目的地的域,我们将“relayhost”设置为空以禁用中继邮件(中继意味着接受邮件然后转发到不是最终目的地的邮件服务器)邮件,我们不需要那个;这很有用,例如 在企业内部网中,中央邮件服务器应在邮件离开网络之前对其进行检查。)
- 附加说明:这与术语“开放中继”无关,后者是一个邮件服务器,它接受来自任何人的电子邮件,无需身份验证,并将其发送到不在其自己网络中的域的 MTA - 为此另一个 [使用 X234X] 设置,我们保留默认并禁用)
现在让我们设置本地别名映射。 我们不必设置此设置,因为我们只是保留默认设置,但最好将其明确,以防我们稍后想要添加另一种定义别名映射的方法。 (就像一个真正的 DBMS)
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,并设置缓存文件。 然后我们将 TLS 设置为可选,因为我们不允许根据 RFC2487 在公共 smtp 服务器上设置 TLS。 我们还禁止 SSLv2 和 SSLv3,因此只允许使用 TLSv1.0 和更高版本(如果您想知道原因,请阅读 SSL 教程 - 简而言之,SSLv2 和 SSLv3 已过时)。
local_recipient_maps:
local_recipient_maps = proxy:unix:passwd.byname $alias_maps
此设置告诉 Postfix 检查查找表并拒绝发送给在表中找不到的用户的电子邮件。 这很重要,因为如果 local_recipient_maps
未设置,另一种行为是先接受邮件,然后再退回。 这会导致“反向散射”:如果 postfix 无法立即确定所有有效用户(在 smtpd 服务中),例如当 local_recipients_maps
未设置时,它将接受邮件,然后在稍后(当它发现邮件在 smptd 移交后无法投递)。 这些未送达通知通常会打击那些地址在垃圾邮件和诈骗邮件中被欺骗的无辜者,并导致垃圾邮件问题。
健全的别名配置
您应该在别名配置中设置一些重要的邮件帐户。 例如,SMTP RFC 要求任何接受任何邮件的可公开访问的邮件服务器也必须接受发往“postmaster”帐户的邮件,有些人可能期望“hostmaster”、“abuse”、“webmaster” , 和其他邮箱。 您可以将这些邮件地址重定向到 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
如果你想将所有这些重定向到特定的本地用户,比如“你的名字”,只需添加
root: yourname
Postfix 将为您解析整个别名链并将所有这些邮件地址转发到“您的姓名”。 (这是由 local 守护进程使用 aliases 规范完成的。)
正如“别名”所说,更新 /etc/aliases 文件后,您必须运行
newaliases
将文件编译到 Postfix 用于快速查找的数据库中。
鸽棚
这个会少一些文字墙! 深呼吸,我们差不多完成了。
套餐
aptitude install dovecot-core dovecot-imapd
应该这样做。 如果您想要所有默认包,请运行
aptitude install dovecot-common
然后进入/etc/dovecot/dovecot.conf
,再次清空文件。 (这一次很重要——默认配置在 /etc/dovecot/conf.d
中包含一堆我们不想要的从属配置文件)。
现在输入以下配置:
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"
这将启用明文身份验证(“明文”身份验证将通过 TLS 进行隧道传输),告诉 dovecot 使用 mail
系统组来访问本地邮箱(加上邮箱的位置),使用 unix 身份验证系统来验证用户,并仅启用 imap。
如果需要,您可以让 dovecot 自动将垃圾箱和已发送文件夹添加到邮箱:
protocol imap { mail_plugins = " autocreate" } plugin { autocreate = Trash autocreate2 = Sent autosubscribe = Trash autosubscribe2 = Sent }
接下来,我们需要打开一个套接字,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
注意尖括号! 他们告诉 dovecot 从文件中读取。
结束
保存并关闭所有配置文件,然后执行
newaliases postfix start service dovecot restart
你应该很高兴。 使用邮件客户端测试您的配置,例如 Mozilla 雷鸟。 您应该能够从任何地方和任何地方发送和接收邮件!
继续
如果您想添加虚拟邮箱(邮箱不绑定到本地用户帐户,但可以使用本地数据库进行配置)继续 第 2 部分 。***
您现在可以从 droplet 上的终端测试两种方式发送电子邮件是否有效:
~# mail someotheremail@gmail.com Subject: test email from postfix this is a test . EOT
来自“root@yourdomain.com”的邮件应该很快就会到达“someotheremail@gmail.com”(显然,请填写您控制的电子邮件地址)。 如果您回复它并再次调用 mail,您应该会看到:(邮件可能需要一分钟才能到达)。
~# mail Heirloom mailx version 12.5 6/20/10. Type ? for help. "/var/mail/root": 1 message >N 1 Your Name Wed Nov 13 23:45 41/1966 Re: test email from postf
如果您按 Enter 键,它将显示该消息。 (然后输入 q 并按 Enter 离开邮件客户端)
同样的事情也适用于本地电子邮件客户端。 设置一个新的系统用户:
~# 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@yourdomain.com
用于 Thunderbird 等本地邮件客户端。 在 Thunderbird 中,只需添加一个新帐户 (File -> New -> Existing Mail Account
) 并在对话框中输入 joe@yourdomain.com
和密码。
如果您的邮件客户端没有自动检测必要的设置:IMAP 连接的用户名是 joe
,端口是 143,身份验证方法是通过 STARTTLS 的未加密密码。 对于 SMTP,它是相同的,但端口是 587。
如果有任何问题,请使用 tail -n 50 /var/log/syslog
检查系统日志中的错误消息,并使用 tail -n 50 /var/log/mail.log
检查邮件日志中的错误消息。
提交人:Lukas Erlacher