今天早上,为了纠正安全证书中的名称不匹配问题,我按照以下建议的步骤进行操作:如何修复邮件服务器 SSL?,但是现在,当尝试从客户端(在本例中客户端是 Windows Mail)发送电子邮件时,我收到以下错误。
被拒绝的电子邮件地址是“[电子邮件保护]'. 主题 '这是一个测试。', 帐户:'mail.domain.com', 服务器:'mail.domain.com', 协议:SMTP, 服务器响应:'554 5.7.1:拒绝中继访问', 端口:25, 安全 (SSL):否, 服务器错误:554, 错误编号:0x800CCC79
编辑:我仍然可以检索此帐户中的电子邮件,并且可以向同一域中的其他帐户发送电子邮件。我只是无法向我们域外的收件人发送电子邮件。
我尝试完全禁用 TLS,但没有成功,仍然出现相同的错误。
当我检查文件时mail.log
,我看到以下内容。
Jul 18 08:24:41 company imapd: LOGIN, [email protected], ip=[::ffff:111.111.11.11], protocol=IMAP
Jul 18 08:24:42 company imapd: DISCONNECTED, [email protected], ip=[::ffff:111.111.11.11], headers=0, body=0, rcvd=83, sent=409, time=1
Jul 18 08:25:19 company postfix/smtpd[29282]: connect from company.university.edu[111.111.11.11]
Jul 18 08:25:19 company postfix/smtpd[29282]: NOQUEUE: reject: RCPT from company.university.edu[111.111.11.11]: 554 5.7.1 <[email protected]>: Relay access denied; from=<[email protected]> to=<[email protected]> proto=ESMTP helo=<UserPC>
Jul 18 08:25:19 company postfix/smtpd[29282]: disconnect from company.university.edu[111.111.11.11]
Jul 18 08:25:22 company imapd: DISCONNECTED, [email protected], ip=[::ffff:111.111.11.11], headers=13, body=142579, rcvd=3289, sent=215892, time=79
文件main.cf
如下所示:
#
# Postfix MTA Manager Main Configuration File;
#
# Please do NOT edit this file manually;
#
#
# Postfix directory settings; These are critical for normal Postfix MTA functionallity;
#
command_directory = /usr/sbin
daemon_directory = /usr/lib/postfix
program_directory = /usr/lib/postfix
#
# Some common configuration parameters;
#
inet_interfaces = all
mynetworks = 127.0.0.0/8
mynetworks_style = host
myhostname = mail.domain.com
mydomain = domain.com
myorigin = $mydomain
smtpd_banner = $myhostname ESMTP 2.4.7.1 (Debian/GNU)
setgid_group = postdrop
#
# Receiving messages parameters;
#
mydestination = localhost, company
append_dot_mydomain = no
append_at_myorigin = yes
transport_maps = mysql:/etc/postfix/transport.cf
#
# Delivering local messages parameters;
#
mail_spool_directory = /var/spool/mail
mailbox_size_limit = 0
mailbox_command = procmail -a "$EXTENSION"
biff = no
alias_database = hash:/etc/aliases
local_recipient_maps =
#
# Delivering virtual messages parameters;
#
virtual_mailbox_maps=mysql:/etc/postfix/mysql_virt.cf
virtual_uid_maps=mysql:/etc/postfix/uids.cf
virtual_gid_maps=mysql:/etc/postfix/gids.cf
virtual_mailbox_base=/usr/local/virtual
virtual_maps=mysql:/etc/postfix/virtual.cf
virtual_mailbox_domains=mysql:/etc/postfix/virtual_domains.cf
#
# SASL paramters;
#
smtp_use_tls = yes
smtpd_use_tls = yes
smtpd_tls_auth_only = yes
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
smtp_tls_CAfile = /etc/postfix/ssl/smptd.pem
smtp_tls_cert_file = /etc/postfix/ssl/smptd.crt
smtp_tls_key_file = /etc/postfix/ssl/smptd.key
smtpd_tls_CAfile = /etc/postfix/ssl/smptd.pem
smtpd_tls_cert_file = /etc/postfix/ssl/smptd.crt
smtpd_tls_key_file = /etc/postfix/ssl/smptd.key
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain =
broken_sasl_auth_clients = yes
smtpd_sender_restrictions =
permit_sasl_authenticated
permit_mynetworks
smtpd_recipient_restrictions =
permit_sasl_authenticated
check_recipient_access hash:/etc/postfix/filtered_domains
permit_mynetworks
reject_unauth_destination
顺便说一句,我的雇主希望能够从我们的本地网络内部和外部发送来自客户(Thunderbird 和 Outlook)的电子邮件。
答案1
TLS 仅在 smtp 会话中启用加密,并不直接影响 Postfix 是否被允许中继消息。
由于规则不匹配,导致拒绝转发邮件smtpd_recipient_restrictions
。必须满足以下条件之一才能允许邮件通过:
smtpd_recipient_restrictions =
permit_sasl_authenticated
check_recipient_access hash:/etc/postfix/filtered_domains
permit_mynetworks
reject_unauth_destination
解释这些规则:
permit_sasl_authenticated
通过 SASL 允许经过验证的发件人。这对于验证通常被阻止的网络外用户是必要的。
check_recipient_access
这将导致 postfix 根据收件人地址查找/etc/postfix/filtered_domains
规则。(根据文件名判断,它可能只是阻止特定域...检查其中是否列出了 gmail.com?)
permit_mynetworks
这将允许符合 中指定的 IP 范围的 IP 地址的主机$mynetworks
。在您发布的 main.cf 中,$mynetworks
设置为127.0.0.1
,因此它将仅中继服务器本身生成的电子邮件。
根据该配置,您的邮件客户端需要使用 SMTP 身份验证才能允许中继消息。我不确定 SASL 使用的是哪个数据库。这是在 中指定的/usr/lib/sasl2/smtpd.conf
。据推测它也使用与您的虚拟邮箱相同的数据库,因此您应该能够在邮件客户端中启用 SMTP 身份验证并完成所有设置。
答案2
smtpd_use_tls = no
您已禁用 TLS,因此现在需要通过将本地网络添加到 来授权本地网络mynetworks
。例如,
mynetworks = 192.168.1.0/24 127.0.0.0/8
这将修复仅从本地网络发送电子邮件的问题。要从本地网络之外发送电子邮件,您需要使 TLS 身份验证正常运行。
答案3
我认为您在 mydestination 中错过了 domain.com,因为默认情况下relay_domains=$mydestination
,因此您可以在配置中添加以下行:
mydestinations = $mydomain, $myhostname, localhost, localhost.localdomain
或者:
relay_domains = $mydomain
service postfix restart
每次编辑 postfix conf 文件时,请不要忘记重新启动 postfix 服务器( )。
答案4
我在 Outlook 中遇到了同样的问题(使用 dovecote 和 postfix 后端),我花了两天时间寻找解决方案并调整配置文件。我所需要做的就是在 Outlook 的邮件设置中的“发送”选项卡中选中“服务器需要身份验证”,我的邮件现在已发送到 gmail。请参阅此处有关如何查找设置的详细说明http://support.bluetie.com/node/440。