本指南是Postfix,Dovecot和MySQL安装指南的配套文件。由于设置邮件服务器非常棘手,因此我们创建了这套指南来帮助您解决可能遇到的任何问题。到本指南的末尾时,您将了解如何调试Postfix,Dovecot和MySQL邮件服务器的问题。
第一部分,故障排除检查表,采用自上而下的故障排除方法来帮助您查找邮件服务器的特定错误。第二部分,逐步配置,使用自下而上的方法来向您展示基本邮件服务器是如何运行的,然后逐步添加更多功能。
正确诊断问题是解决问题的第一步。乍一看,许多邮件服务器错误看起来很普遍。通常问题的第一个迹象是您尝试创建测试邮件帐户但却无法连接。本节是查找邮件服务器诸多错误的速成课程。我们建议按顺序阅读以下部分,因为故障排除技术是按从普遍到特殊排列的。
有时您的邮件服务器无法正常运行,因为所需的服务未运行。对于已运行很长时间的邮件服务器,资源过度使用是导致服务停止的最可能原因。检查您的资源使用以排除该问题并没有什么坏处。但是,当您刚刚设置新的邮件服务器时,更有可能的是服务启动问题是由配置错误引起的。一些配置错误 - 特别是语法错误 - 非常严重,足以阻止服务启动。
要检查Postfix和Dovecot是否正在运行并查找启动错误,请按照下列步骤操作:
service postfix status
您应该看到以下输出:
* postfix is running
service dovecot status
您应该看到类似于以下内容的输出:
dovecot start/running, process 2241
stop/waiting
或not running
,则表示该服务未运行。下一步是尝试重新启动服务。service postfix restart
您应该看到以下消息:
* Stopping Postfix Mail Transport Agent postfix [ OK ] * Starting Postfix Mail Transport Agent postfix [ OK ]
service dovecot restart
您应该看到以下消息:
dovecot stop/waiting dovecot start/running, process 31171
/var/log/mail.log
(及其所有其他消息)。输入以下命令以查看日志中的最新行:tail /var/log/mail.log
在正常重启时,您应该看到以下内容:
/var/log/mail.log May 22 15:41:59 godel postfix/master[19624]: terminating on signal 15 May 22 15:41:59 godel postfix/master[20232]: daemon started -- version 2.9.6, configuration /etc/postfix
/var/log/mail.log
。在正常重启时,您应该看到以下内容:/var/log/mail.log May 22 17:46:54 master: Warning: Killed with signal 15 (by pid=1 uid=0 code=kill) May 22 17:48:09 master: Info: Dovecot v2.0.19 starting up (core dumps disabled)
注意 如果您移动了Dovecot日志,则会/var/log/dovecot.log改为使用正常的Dovecot启动消息。如果找不到Dovecot日志,请使用以下命令找到它们: doveadm log find
tail /var/log/upstart/dovecot.log
这是一个示例,其中/etc/dovecot/conf.d/10-master.conf
已识别文件中的语法错误:
/var/log/upstart/dovecot.log doveconf: Fatal: Error in configuration file /etc/dovecot/conf.d/10-master.conf line 36: Unexpected '}'
如果正在运行Postfix,Dovecot和MySQL,则下一个故障排除步骤是检查邮件日志。默认情况下,将记录所有传入和传出连接以及任何关联的错误/var/log/mail.log
。查看日志文件最有用的方法之一是使用该tail
命令,该命令与-f
标志结合使用时,会显示日志的最新部分,因为它已更新。
tail -f /var/log/mail.log
如果在日志中看到错误或警告,请复制它。在线搜索确切的错误(没有特定于您的服务器的详细信息),您可能会找到解决方案或其他疑难解答帮助。
默认邮件日志可能不包含您需要的所有信息。在这种情况下,下一步是为Postfix和Dovecot启用详细日志记录,并将Postfix和Dovecot日志分成两个单独的文件,更容易排序。Postfix日志将记录中继到外部服务器或从外部服务器中继的消息,Dovecot日志将记录授权尝试。
按照以下说明启用Dovecot的详细日志记录并将日志位置更改为/var/log/dovecot.log
:
nano /etc/dovecot/conf.d/10-logging.conf
/etc/dovecot/conf.d/10-logging.conf log_path = /var/log/dovecot.log
auth_verbose
和mail_debug
行,然后将它们设置为yes
:/etc/dovecot/conf.d/10-logging.conf auth_verbose = yes mail_debug = yes
service dovecot restart
Dovecot日志现在将显示有关授权尝试和收件箱连接的更多信息。您可以在以下位置查看新日志/var/log/dovecot.log
。请记住在完成故障排除后禁用详细日志记录,以便服务器不会填满日志。
请按照以下说明为Postfix启用详细日志记录:
/etc/postfix/master.cf的
的文件输入入以下命令:nano /etc/postfix/master.cf
-v
到该smtp
行以启用详细日志记录:/etc/postfix/master.cf # ========================================================================== # service type private unpriv chroot wakeup maxproc command + args # (yes) (yes) (yes) (never) (100) # ========================================================================== smtp inet n - - - - smtpd -v
service postfix restart
Postfix日志现在将显示有关进出外部服务器的消息的更多信息。您仍然可以查看日志/var/log/mail.log
。请记住在完成故障排除后禁用详细日志记录,以便服务器不会被填满日志。
有时会发生电子邮件问题,因为邮件服务器和邮件客户端在相同的端口上没有相互通信。对于从客户端到服务器的邮件,反之亦然,两者都必须使用相同的端口,并且这些端口也必须沿着两者之间的互联网路由打开。如果您按照随附的Postfix,Dovecot和MySQL安装指南,您应该使用以下端口:
首先,检查邮件客户端设置,确保选择了正确的端口和安全设置。
接下来,使用Telnet工具检查Linode上以及客户端和Linode之间路由上的端口是否都已打开。应该在您的Linode和家用计算机上运行相同的测试。首先,我们将介绍如何从两个位置运行测试,然后我们将讨论其含义。
要测试您的Linode,请按照下列步骤操作:
12.34.56.78
为您的Linode的IP地址:telnet 12.34.56.78 25
quit
。阅读下面对Telnet结果的讨论,并使用本节末尾显示的输出来分析您的结果。
要在Mac上运行Telnet测试,请按照下列步骤操作:
12.34.56.78
为您的Linode的IP地址:telnet 12.34.56.78 25
quit
。阅读下面对Telnet结果的讨论,并使用本节末尾显示的输出来分析您的结果。
要在Windows计算机上运行Telnet测试,请按照下列步骤操作。您需要首先安装Telnet,因为默认情况下它不附带Windows:
telnet 12.34.56.78 25
quit
。阅读下面关于Telnet结果的讨论,并根据下面显示的输出分析您的结果。
如果测试成功,您应该看到类似于以下内容的输出:
Trying 12.34.56.78... Connected to li468-222.members.linode.com. Escape character is '^]'. 220 host.example.com ESMTP Postfix (Ubuntu)
要取消连接,请按CTRL-],然后输入quit
。如果测试失败,您将看到一条Connection refused
消息,Telnet将自行退出。
如果您在Linode上运行测试并且它失败了,您应该检查您是否在邮件服务器设置中正确配置了端口(请参阅设置指南的Dovecot部分中的步骤33-34 ),您已启用端口465和587(请参阅设置指南的Postfix部分中的步骤26-30 ),并且您没有阻止它们的任何防火墙规则。
如果您在Linode上运行测试并且成功,但是来自家用计算机的测试失败,则表明您的家庭计算机和Linode之间的网络上的某些端口被阻止。它可能在您的路由器,您的ISP(Internet服务提供商),其他人的ISP等。诊断网络问题的最佳方法是生成MTR报告。
如果您的Linode和家用计算机上的Telnet测试都成功,并且您的邮件客户端设置正确,您可以排除端口的任何问题。
接下来,我们将专注于您的登录凭据。如果配置不正确,可能会导致问题:
第一步也是最简单的步骤是在邮件客户端中重新输入用户名和密码。确保使用完整的用户名,包括该@example.com
部分。用户名和密码区分大小写。如果您确定已在邮件客户端中正确输入了信息,则可能无法在服务器端正确配置授权。
接下来要检查的是您的用户名和密码是否正确输入到正确的MySQL表中。您可以从主安装文章运行MySQL测试,以确保您的表已正确设置。您还可以从mailserver.virtual_users表中删除并重新添加相应的行,以确保正确输入密码。如果MySQL表中的信息正确,则可能是Dovecot未配置为在正确的位置查找授权凭据。
Dovecot包含一个管理工具,它非常有助于解决登录凭据问题。该doveadm user
命令允许您查看每个电子邮件用户的用户名,用户ID,组ID和邮箱位置的用户数据库结果。读取此工具的输出会告诉您Dovecot正在寻找授权用户的数据库。如果Dovecot没有寻找预期的数据库,您需要更改Dovecot中与授权相关的设置,以便它使用MySQL来查找用户,而不是其他用户数据库。
doveadm
命令以查找您的电子邮件用户(包括@example.com
部件):doveadm user [email protected]
如果一切正常,你应该看到这样的输出:
userdb: [email protected] uid : 5000 gid : 5000 home : /var/mail/vhosts/example.com/email1
相反,如果你得到:
userdb lookup: user [email protected] doesn't exist
这可能表明1)您没有在MySQL表中正确输入电子邮件地址 - 但我们只是检查了它,所以它也可能是2)Dovecot没有在正确的位置查找您的用户数据库。
doveadm user myuser
达夫科特应该不会找到你的系统用户输出。如果是,它将如下所示:
userdb: myuser system_groups_user: myuser uid : 1000 gid : 1000 home : /home/myuser
对于某些故障排除方案,您可能会发现自上而下的方法无法帮助您找到问题的根本原因。有时,您需要的是自下而上的方法。
这里提出的自下而上的方法打破了将邮件服务器构建成较小块的复杂任务。这有两个好处。首先,每个部分仅关注一些邮件服务器功能,并包含较少的细节,这使其更容易理解。在项目结束时,您应该深入了解邮件服务器的工作原理。其次,每个块都为邮件服务器添加了一定数量的可测试功能。这样可以通过限制其可能位置的范围来更轻松地查找错误。例如,如果您的邮件服务器在完成“基本Dovecot”后仍在工作,但在“虚拟域和用户”之后未通过测试,则您知道该错误与您在该部分中所做的事情有关。
本指南的第二部分介绍了按功能组织的逐步邮件服务器构建,从核心功能到更多外围功能,并在每个步骤进行测试。您应该同时打开主设置指南,因为我们将引用它。在阅读主要设置指南时,您会注意到我们在这里以不同的顺序安装项目。主要指南旨在简化方法,避免多次编辑同一文件。本指南侧重于对每个组件的更深入理解,因此您有时需要跳转到主要指南的不同部分以供参考。成功完成一个阶段后,我建议您进行系统级备份,以便轻松回到之前!
警告 请记住,此处介绍的早期版本是可用的,但出于安全性和功能原因,不应将其视为生产准备,主要是因为密码以纯文本格式发送,和/或未启用传出SMTP。
在本节中,我们将提供相应的Postfix和Dovecot文档的链接。这些都是很棒的起点。
阅读入门指南。在安装邮件服务器之前,请按照该部分中列出的步骤操作。
您可能还希望以root用户身份登录服务器,因此您不必为每个命令键入“sudo”。您可以输入以下命令以root身份登录:
su
在本节中,您将安装Postfix并将其配置为在您的域中为您的系统用户提供邮件,这是最基本的配置。您还将发送测试消息并使用Mailutils查看它。
apt-get install postfix
/etc/postfix/main.cf
进行编辑,并将您的域添加到该mydestination
行。如果在安装Postfix之前正确设置了主机名和主机文件,则此列表应该已包含您的完全限定域名以及对localhost的多个引用,您可以将其保留原样。/etc/postfix/main.cf mydestination = example.com, localhost
service postfix restart
apt-get install mailutils
quit
。如果您成功向系统用户发送了测试消息,则表明您已成功安装Postfix并将其配置为最基本的邮件传递。默认情况下,它仅为系统用户传递邮件,邮件存储在名为的文件中/var/mail/myuser
。
在本节中,您将安装Dovecot并进行设置,以便您可以通过IMAP或POP3连接检查系统用户的电子邮件,这是最基本的配置。本节基于Dovecot的基本配置指南,这是一个很好的参考。
apt-get install dovecot-core dovecot-imapd dovecot-pop3d
/etc/dovecot/conf.d/10-mail.conf
进行编辑,并将其设置为mail_location
如下所示的行。此设置应指示Dovecot在Postfix存储邮件的同一位置查找邮件,/var/mail/myuser
默认情况下应该这样(Dovecot使用该变量%u
,所以路径中使用了正确的用户名)。邮箱格式指定为mbox
。/etc/dovecot/conf.d/10-mail.conf mail_location = mbox:~/mail:INBOX=/var/mail/%u
/etc/dovecot/conf.d/10-mail.conf
,设置mail_privileged_group
为mail
:/etc/dovecot/conf.d/10-mail.conf mail_privileged_group = mail
/etc/dovecot/conf.d/10-auth.conf
,通过设置disable_plaintext_auth
为允许纯文本身份验证no
:/etc/dovecot/conf.d/10-auth.conf disable_plaintext_auth = no
/etc/pam.d/dovecot
,告诉Dovecot使用标准的UNIX身份验证。这意味着您的SSH用户名和密码也适用于邮件。编辑文件,使其仅包含以下内容:/etc/pam.d/dovecot auth required pam_unix.so nullok account required pam_unix.so
@example.com
此阶段不包含用户名)。您的连接类型将是标准的(非安全),您的密码将是明确的。您可能需要手动设置邮件客户端,而不是通过向导。注意 Telnet和邮件客户端测试不适用
root
。使用其他系统用户。
如果您通过IMAP或POP3连接成功检查了邮件,则表明您已成功安装Dovecot并将其配置为最基本的收件箱访问。
既然Postfix和Dovecot正在运行,您应该设置虚拟域和用户。拥有邮件的虚拟用户是邮件服务器安全性和便利性的重要一步,因为它无需为需要邮箱的每个人创建系统用户。它还可以更轻松地将新域和用户添加到邮件服务器。
您需要在Postfix和Dovecot中进行与虚拟域和用户相关的一些配置更改。Postfix和Dovecot都需要同时为虚拟域和用户配置,因为您正在更改邮箱位置,需要在它们之间进行协调。以下是您将在本节中配置的内容的一般清单:
mydestination
行。/var/mail/myuser
,但现在他们将在/var/mail/vhosts/example.com/user/
。这有额外的好处,让你在不同的域名拥有相同的用户名:例如,你现在可以有[email protected]和[email protected]是两个不同的邮箱。vmail
)访问所有邮箱,而不是让每个系统用户拥有自己的邮箱。在您完成本节时,您可能希望在虚拟用户上引用Postfix的Virtual Readme和Dovecot的wiki页面。
virtual_mailbox_base
参数的所有电子邮件地址及其交付位置(已配置/etc/postfix/main.cf
,我们将立即获得)。我们正在调用该文件/etc/postfix/virtual_users_list
,它看起来像这样:/etc/postfix/ virtual_users_list [email protected] example.com/email1/ [email protected] example.com/email2/
/etc/dovecot/users [email protected]:{Plain}firstpassword [email protected]:{Plain}secondpassword
此列表允许Dovecot在授予虚拟用户访问其收件箱之前检查虚拟用户的用户名和密码。
/etc/postfix/main.cf
。删除每个域除了local.host
从mydestination
参数。创建一个名为的新参数virtual_mailbox_domains
并添加您的域:/etc/postfix/main.cf virtual_mailbox_domains = example.com, hostname, hostname.example.com, localhostexamplecom
注意
mydestination
和virtual_mailbox_domains
列表之间不能重叠。
/etc/postfix/main.cf
,添加该行virtual_mailbox_base
并将其设置为/var/mail/vhosts
以便将邮件传递到新邮箱。每个用户的路径的最后部分位于virtual_users_list
步骤1 的文件中。/etc/postfix/main.cf virtual_mailbox_base = /var/mail/vhosts
/etc/postfix/main.cf
,添加该行virtual_mailbox_maps
并将其设置为您在步骤1中创建的虚拟用户文件。它是一个“哈希”类型文件。如果你完全按照这个例子,它将是:/etc/postfix/main.cf virtual_mailbox_maps = hash:/etc/postfix/virtual_users_list
但是,您可以virtual_mailbox_maps
根据需要为此文件命名,并相应地设置参数。
/etc/postfix/main.cf
中的最后一项更改是设置新vmail
系统用户。该用户将拥有虚拟邮箱。添加以下新行:/etc/postfix/main.cf virtual_minimum_uid = 100 virtual_uid_maps = static:5000 virtual_gid_maps = static:5000
/etc/postfix/main.cf
。您删除所有域,除了localhost
从mydestination
参数,并增加了对虚拟域和用户,这应该是这样的(添加了一些新的线路#Virtual domains
,如果需要的注释):/etc/postfix/main.cf #Virtual domains virtual_mailbox_domains = example.com, host virtual_mailbox_base = /var/mail/vhosts virtual_mailbox_maps = hash:/etc/postfix/virtual_users_list virtual_minimum_uid = 100 virtual_uid_maps = static:5000 virtual_gid_maps = static:5000
postmap /etc/postfix/virtual_users_list
vmail
用户和组:groupadd -g 5000 vmail useradd -g vmail -u 5000 vmail -d /var/mail
/var/mail/vhosts/example.com/email1
为每个电子邮件地址创建目录。你必须从制作vhosts
目录开始,然后继续努力。您可以使用mkdir
与-p
如果需要的标志。/var/mail
目录及其下面的所有内容更改为vmail
用户和组:chown -R vmail:vmail /var/mail
太棒了!现在,邮件传递实际存在正确的文件夹,拥有这些文件夹的用户与我们告诉Postfix在向服务器写入新邮件时使用的文件夹相匹配。
/var/log/mail.log
; 你应该看到这样的东西:/var/log/mail.log Mar 8 18:01:27 host postfix/virtual[4418]: E2C7528420: to=, relay=virtual, delay=0.01, delays=0.01/0/0/0, dsn=2.0.0, status=sent (delivered to maildir)
所说的部分relay=virtual
意味着您已经正确设置了虚拟域和用户。
mail_location
in /etc/dovecot/conf.d/10-mail.conf
:/etc/dovecot/conf.d/10-mail.conf passdb { driver = passwd-file args = username_format=%u /etc/dovecot/users } userdb { driver = static args = uid=vmail gid=vmail home=/var/mail/vhosts/%d/%n }
注意
passdb
部分详细介绍了电子邮件用户如何进 该driver
行告诉Dovecot你正在使用一个平面文件,args
行告诉它它在哪里以及期望的格式。(这是/etc/dovecot/users
您在步骤2中创建的文件。)userdb
行告诉Dovecot在哪里可以找到服务器上的邮件以及它应该用来访问邮件文件的系统用户。由于每个邮箱的位置格式相同,因此userdb
可以是静态的。您告诉它使用该vmail
用户来访问邮箱。最后,该home=
参数告诉Dovecot寻找邮件var/mail/vhosts/example.com/user
。此设置必须与Postfix设置中的virtual_mailbox_base
+/etc/postfix/virtual_users_list
相对路径匹配。您必须告诉Dovecot在您告诉Postfix发送邮件的同一个地方寻找邮件。
auth-passwdfile.conf.ext
而不是auth-system.conf.ext
,所以它使用你在步骤2中创建的那个可爱的新密码文件。在/etc/dovecot/conf.d/10-auth.conf
,添加#
注释掉系统用户文件,并删除#
以启用passwdfile配置文件:/etc/dovecot/conf.d/10-auth.conf #!include auth-system.conf.ext !include auth-passwdfile.conf.ext
注意 请记住,这三条路径必须匹配:Postfix设置中的 virtual_mailbox_base+/etc/postfix/virtual_users_list 相对路径mail_location,Dovecot中的路径和Dovecot中的路径home=。
如果您最近的测试有效,那么您现在已经成功地将虚拟域和用户设置为Postfix和Dovecot。
现在您已经有虚拟域和用户工作,现在是时候更新本地传递代理了。默认情况下,Postfix使用自己的内置LDA。我们将转而使用Dovecot的LMTP(本地邮件传输协议)服务。为此,我们必须在Dovecot中设置一个Postfix可以使用的套接字。
有关官方文档,请参阅Dovecot关于LMTP的wiki文章。
dovecot-lmtpd
输入以下命令进行安装:apt-get install dovecot-lmtpd
/etc/dovecot/dovecot.conf
,添加或修改该protocols
行,如下所示。如果您需要添加该行,可以在下面添加!include_try /usr/share/dovecot/protocols.d/*.protocol
。/etc/dovecot/dovecot.conf protocols = imap pop3 lmtp
service lmtp
部分,/etc/dovecot/conf.d/10-master.conf
如下所示,这将启用套接字:/etc/dovecot/conf.d/10-master.conf service lmtp { unix_listener /var/spool/postfix/private/dovecot-lmtp { mode = 0600 user = postfix group = postfix } # Create inet listener only if you can't use the above UNIX socket #inet_listener lmtp { # Avoid making LMTP visible for the entire internet #address = #port = #} }
注意 确保计算括号。此部分中的额外或缺少括号将产生语法错误,阻止Dovecot启动。
ls /var/spool/postfix/private/dovecot-lmtp
/etc/postfix/main.cf
,设置此行:/etc/postfix/main.cf virtual_transport = lmtp:unix:private/dovecot-lmtp
默认情况下,除非您直接登录服务器,否则Postfix不允许您发送电子邮件。这是一个很好的默认设置,因为您不希望成为垃圾邮件中心。但是,您希望稍微放松生产服务器的设置,以便让经过身份验证的电子邮件用户发送邮件。作为前驱,您需要为Postfix设置身份验证。由于当用户想要检查他们的电子邮件时,Dovecot已经在处理身份验证方面表现出色,您也可以让它为Postfix处理身份验证。
这个过程与LMTP的过程非常相似,因为你首先在Dovecot中创建一个套接字然后告诉Postfix使用它。有关更多信息,请参阅Dovecot关于Postfix和SASL的wiki文章。
/etc/dovecot/conf.d/10-master.conf
看起来如下,这将启用套接字:/etc/dovecot/conf.d/10-master.conf service auth { # auth_socket_path points to this userdb socket by default. It's typically # used by dovecot-lda, doveadm, possibly imap process, etc. Its default # permissions make it readable only by root, but you may need to relax these # permissions. Users that have access to this socket are able to get a list # of all usernames and get results of everyone's userdb lookups. unix_listener /var/spool/postfix/private/auth { mode = 0666 user = postfix group = postfix } unix_listener auth-userdb { mode = 0600 user = vmail #group = } # Postfix smtp-auth #unix_listener /var/spool/postfix/private/auth { # mode = 0666 #} # Auth process is run as this user. #user = $default_internal_user }
注意 请再次注意你的括号。
service auth-worker
部分中,设置user
为vmail
。/etc/dovecot/conf.d/10-master.conf service auth-worker { # Auth worker process is run as root by default, so that it can access # /etc/shadow. If this isn't necessary, the user should be changed to # $default_internal_user. user = vmail }
ls /var/spool/postfix/private/auth
/etc/postfix/main.cf
。这告诉Postfix身份验证类型,套接字的位置以及应该启用SASL身份验证:/etc/postfix/main.cf smtpd_sasl_type = dovecot smtpd_sasl_path = private/auth smtpd_sasl_auth_enable = yes
如果您的测试成功,您刚刚将Dovecot的LMTP服务设置为您的本地传递代理。
现在已经设置了身份验证,让我们确保身份验证过程是安全的。为此,您需要使用SSL或STARTTLS加密所有身份验证尝试。有关更多信息,请参阅Dovecot关于SSL加密的wiki文章。
/etc/dovecot/conf.d/10-ssl.conf
进行编辑,然后设置ssl
为required
:/etc/dovecot/conf.d/10-ssl.conf ssl = required
/etc/dovecot/conf.d/10-ssl.conf
,检查SSL证书和密钥的路径。默认情况下,它们应设置为Dovecot的证书和密钥。如果这是你正在使用的,请保留这些设置。否则,请更新要使用的证书和密钥的路径。/etc/dovecot/conf.d/10-ssl.conf ssl_cert =
- 验证您的SSL证书和密钥是否位于上一步中指定的位置。
- 禁用纯文本身份验证。在
/etc/dovecot/conf.d/10-auth.conf
,设置以下行:/etc/dovecot/conf.d/10-auth.conf disable\_plaintext\_auth = yes
- 禁用IMAP和POP3的未加密端口,以便服务器不接受未加密的连接。在
/etc/dovecot/conf.d/10-master.conf
,设置:/etc/dovecot/conf.d/10-master.conf service imap-login { inet_listener imap { port = 0 } ... } service pop3-login { inet_listener pop3 { port = 0 } ... }
- 离开
imaps
和pop3s
端口(他们被注释掉了)。他们的默认设置很好; 您将能够使用993进行安全IMAP,使用995进行安全POP3。- 重启Dovecot。
- 尝试在端口110和143上连接到您的服务器(我们建议使用Telnet)。这应该失败,因为我们只是禁用了未加密的端口。
- 尝试通过启用SSL加密和端口993或995来检查您的邮件。这应该会成功。
如果您无法在110和143上连接,并且可以在启用了SSL的993和995上进行连接,则您已成功强制加密所有身份验证连接。请注意,此时您将无法通过Telnet登录 - 您只是在测试端口。
SMTP
现在您已经安全地设置了身份验证,您需要配置SMTP。现在,只有当邮件发送到服务器上的域或者系统用户发送时,Postfix才会中继电子邮件,这对于收到的邮件就足够了。但是,对于外发邮件,您需要简化中继限制,以便经过身份验证的用户可以在任何位置发送电子邮件。
- 打开
/etc/postfix/main.cf
进行编辑,然后添加smtpd_recipient_restrictions
如下所示的行:/etc/postfix/main.cf smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination注意 smtpd_recipient_restrictions行列出了Postfix用于决定可以中继哪些电子邮件的标准。permit_sasl_authenticated允许经过身份验证的用户发送邮件,应该首先列出。接下来我们有permit_mynetworks,它允许已登录服务器的用户发送邮件。最后,reject_unauth_destination阻止您的服务器为未配置它的域提供邮件。永远不要删除最后的设置!这意味着始终允许经过身份验证的用户和本地用户在任何地方发送邮件。允许非身份验证和非本地用户仅向此服务器负责的域发送邮件。这些限制会阻止您的服务器被用作可以将垃圾邮件从任何人发送到任何地方的开放中继。
- 您还需要强制加密传出身份验证。仍在
/etc/postfix/main.cf
,设置以下行:/etc/postfix/main.cf smtpd_tls_cert_file=/etc/ssl/certs/dovecot.pem smtpd_tls_key_file=/etc/ssl/private/dovecot.pem smtpd_use_tls=yes smtpd_tls_auth_only = yes注意 首先,您将告诉Postfix使用Dovecot的SSL证书和密钥,因为如果传入和传出服务器的证书不匹配,某些邮件客户端将会阻塞。然后你告诉Postfix使用(仅)TLS加密。这意味着用户可以在标准端口(25)上进行连接,但在允许用户发送任何身份验证信息之前,他们必须建立加密连接。
- 制作
/etc/postfix/master.cf
文件的副本:cp /etc/postfix/master.cf /etc/postfix/master.cf.orig
- 输入以下命令打开配置文件以进行编辑:
nano /etc/postfix/master.cf
- 找到并取消注释以
submission
和开头的两行smtps
。这将允许您在端口587和465上安全地发送邮件,以及端口25(使用我们的SSL设置也是安全的)。您/etc/postfix/master.cf
文件的第一部分应类似于以下内容/etc/postfix/master.cf # # Postfix master process configuration file. For details on the format # of the file, see the master(5) manual page (command: "man 5 master"). # # Do not forget to execute "postfix reload" after editing this file. # # ========================================================================== # service type private unpriv chroot wakeup maxproc command + args # (yes) (yes) (yes) (never) (100) # ========================================================================== smtp inet n - - - - smtpd #smtp inet n - - - 1 postscreen #smtpd pass - - - - - smtpd #dnsblog unix - - - - 0 dnsblog #tlsproxy unix - - - - 0 tlsproxy submission inet n - - - - smtpd # -o syslog_name=postfix/submission # -o smtpd_tls_security_level=encrypt # -o smtpd_sasl_auth_enable=yes # -o smtpd_client_restrictions=permit_sasl_authenticated,reject # -o milter_macro_daemon_name=ORIGINATING smtps inet n - - - - smtpd # -o syslog_name=postfix/smtps # -o smtpd_tls_wrappermode=yes # -o smtpd_sasl_auth_enable=yes # -o smtpd_client_restrictions=permit_sasl_authenticated,reject # -o milter_macro_daemon_name=ORIGINATING
- 保存您对
/etc/postfix/master.cf
文件所做的更改。- 重启Postfix。
- 设置邮件客户端以作为外发邮件服务器连接到您的Linode。您应该使用TLS加密,或者如果您有此选项,则通过端口25,465或587使用STARTTLS。您的用户名和密码与传入邮件的用户名和密码相同。尝试发送测试消息。
注意 您将无法再使用Telnet进行测试。如果要运行手动测试以进行故障排除,可以使用openssl。您的命令应如下所示(您也可以在端口465和587上进行测试): openssl s_client -connect example.com:25 -starttls smtp
您的邮件服务器现在非常可行且安全。如果您乐意将所有域和用户存储在平面文件中,可以在此处停止。但是,为了使长期维护更容易,我们建议您将域,用户和别名列表存储在MySQL数据库中。
MySQL for Virtual Domains,Users和Aliases
让邮件服务器加快速度的最后一步是使它与MySQL兼容。
- 安装MySQL和Postfix和Dovecot的必要组件:
apt-get install mysql-server postfix-mysql dovecot-mysql
- 创建三个MySQL表
virtual_domains
,virtual_users
以及virtual_aliases
与您的数据填充,按照整个MySQL的部分主安装导轨上。如果您不想使用MySQL命令行,可以安装phpMyAdmin并使用它。- 打开
/etc/postfix/main.cf
进行编辑。注释掉现有virtual_mailbox_domains
和virtual_mailbox_maps
行,并添加以下内容:/etc/postfix/main.cf #Virtual domains, users, and aliases virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf
- 按照步骤11-25 后缀部分主要设置向导来创建
/etc/postfix/mysql-virtual-mailbox-domains.cf
,/etc/postfix/mysql-virtual-mailbox-maps.cf
和/etc/postfix/mysql-virtual-alias-maps.cf
文件。您还将使用postmap
命令测试Postfix是否可以找到所有这些信息。- 现在为Dovecot。创建文件
/etc/dovecot/conf.d/auth-sql.conf.ext
。您将创建一个新passdb
部分,指示Dovecot使用MySQL进行身份验证。该userdb
部分将与我们之前的部分相同,因为邮箱不会移动。/etc/dovecot/conf.d/auth-sql.conf.ext passdb { driver = sql args = /etc/dovecot/dovecot-sql.conf.ext } u serdb { driver = static args = uid=vmail gid=vmail home=/var/mail/vhosts/%d/%n }
- 打开
/etc/dovecot/dovecot-sql.conf.ext
以进行编辑,取消注释下面显示的行,并使用适当的MySQL连接信息更新它们:/etc/dovecot/dovecot-sql.conf.ext driver = mysql connect = host=127.0.0.1 dbname=mailserver user=mailuser password=mailuserpass default_pass_scheme = SHA512-CRYPT password_query = SELECT email as user, password FROM virtual_users WHERE email='%u';
- 打开
/etc/dovecot/conf.d/10-auth.conf
进行编辑。注释掉该!include auth-passwdfile.conf.ext
行并取消注释该!include auth-sql.conf.ext
行。这会将您的身份验证从平面文件切换到数据库:/etc/dovecot/conf.d/10-auth.conf #!include auth-system.conf.ext !include auth-sql.conf.ext #!include auth-ldap.conf.ext #!include auth-passwdfile.conf.ext #!include auth-checkpassword.conf.ext #!include auth-vpopmail.conf.ext #!include auth-static.conf.ext
- 将
/etc/dovecot/
目录的所有者和组更改为vmail
和dovecot
递归:chown -R vmail:dovecot /etc/dovecot
- 以
/etc/dovecot/
递归方式更改目录的权限:chmod -R o-rwx /etc/dovecot
- 打开
/etc/dovecot/conf.d/10-master.conf
以进行编辑,并在该service auth
部分中设置user = dovecot
,在该行下方# Auth process is run as this user.
:/etc/dovecot/conf.d/10-master.conf service auth { ... # Auth process is run as this user. user = dovecot }
- 重启Dovecot。
- 确认您仍然可以发送和接收邮件。如果您遇到任何错误,请检查您的日志。
好了,现在您应该了解主要指南并拥有功能齐全的Postfix,Dovecot和MySQL邮件服务器!