Postfix 允许通过身份验证向 Internet 上的任何域发送消息,但无需 SSL

Postfix 允许通过身份验证向 Internet 上的任何域发送消息,但无需 SSL

当我尝试通过 SMTP 和 Postfix 发送邮件时,收到错误“5.7.1 无法中继”。

经过大量的配置更改后,我可以通过以下方式将电子邮件发送到与服务器相同的域(该主机上的其他帐户):

smtpd_relay_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination

但当我发送到其他域时仍然出现此错误。我的服务器上安装了 Dovecot。

如何允许中继到任何域,但在端口 25 上的 SMTP 上进行简单的身份验证?无需 SSL/TLS 等。


如果我将用作测试收件人的域添加到我的目的地:

mydestination = o2.pl

我有:

Recipient address rejected: User unknown in local recipient table

未配置时的示例日志mydestination

Oct  6 00:50:40 XXXXXXX postfix/smtpd[5409]: NOQUEUE: reject: RCPT from MY_HOME_HOST: 554 5.7.1 <[email protected]>: Relay access denied; from=<TEST_ACCOUN@MY_DOMAIN.pl> to=<[email protected]> proto=ESMTP helo=<[127.0.0.1]>

删除后:

reject_unauth_destination

当我尝试发送电子邮件时,Thunderbird 就挂了。它挂在“已连接到 MY_OWN_DOMAIN...”上

我将 TLS 切换为“否”,但无济于事。当我通过 telnet 连接到本地主机的 25 端口时,我没有收到来自 SMTP 的欢迎消息

可能是因为:

 "smtpd_recipient_restrictions": specify at least one working instance of: check_relay_domains, reject_unauth_destination, reject, defer or defer_if_permit

但是当我添加“check_relay_domains”时,我收到来自 thunderbird 的错误,SMTP 服务器发送了损坏的欢迎消息。

最后我得到了新的错误:

Recipient address rejected: Relay access denied.

我的整个main.cf:

smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no

# appending .domain is the MUA's job.
append_dot_mydomain = no

# Uncomment the next line to generate "delayed mail" warnings
delay_warning_time = 4h


readme_directory = no

smtpd_helo_restrictions = permit_mynetworks, warn_if_reject reject_non_fqdn_hostname, reject_invalid_hostname, permit
smtpd_sender_restrictions = permit_mynetworks, warn_if_reject reject_non_fqdn_sender, reject_unknown_sender_domain, reject_unauth_pipelining, permit

#smtpd_client_restrictions = permit


smtpd_recipient_restrictions =
    permit_sasl_authenticated
    permit_mynetworks
    check_relay_domains

smtpd_data_restrictions = reject_unauth_pipelining

# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.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

# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.

myhostname = MY_OWN_DOMAIN.pl
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = MY_OWN_DOMAIN.pl
relay_domains = $mydomain
mydestinations = $mydomain, $myhostname, localhost, localhost.localdomain

relayhost =
inet_interfaces = all
mynetworks_style = host
home_mailbox = Maildir/
#mailbox_command = procmail -a "$EXTENSION"
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all

答案1

这看起来不像是 SSL 问题,而更像是身份验证问题;如果 Postfix 识别出您是授权发件人,那么它就不应该谈论中继。您的 SMTP 客户端是否已配置为向服务器进行身份验证?如果没有,请按此方式进行设置,然后重试。


还有一件事:您已经permit_sasl_authenticated在您的中了smtpd_recipient_restrictions,但是我没有在您的main.cf中看到任何SASL身份验证配置——这可能是问题所在;

如果 Postfix 希望通过 SASL 对您进行身份验证,但没有 SASL 提供商可以进行身份​​验证,它会将您视为任何其他未经身份验证的用户。完整的解决方案超出了本答案的范围,但我建议从 Postfix SASL 操作指南开始,这对我设置自己的 Postfix 服务器有很大帮助。

相关内容