![拒绝:来自未知的 RCPT[]:450 4.7.1 客户端主机被拒绝:找不到您的反向主机名](https://linux22.com/image/779891/%E6%8B%92%E7%BB%9D%EF%BC%9A%E6%9D%A5%E8%87%AA%E6%9C%AA%E7%9F%A5%E7%9A%84%20RCPT%5B%5D%EF%BC%9A450%204.7.1%20%E5%AE%A2%E6%88%B7%E7%AB%AF%E4%B8%BB%E6%9C%BA%E8%A2%AB%E6%8B%92%E7%BB%9D%EF%BC%9A%E6%89%BE%E4%B8%8D%E5%88%B0%E6%82%A8%E7%9A%84%E5%8F%8D%E5%90%91%E4%B8%BB%E6%9C%BA%E5%90%8D.png)
从我的本地网络发送电子邮件很顺利。也可以通过 Thunderbird 或使用本地安装的 Roundcube 进行远程发送。但现在我在亚洲,并尝试使用 Thunderbird 发送电子邮件。日志中出现以下错误:
postfix/submission/smtpd[4588]: NOQUEUE: reject: RCPT from unknown[110.170.163.146]: 450 4.7.1 Client host rejected: cannot find your reverse hostname, [110.170.163.146]; from=<<me>@<mydomain.com>> to=<<me>@<mydomain.co>> proto=ESMTP helo=<[10.10.3.55]>
dig +short -t A mail.<mydomain.com> 给出:xxx.xxx.xxx.xxx,我的服务器的 IP。
dig +short -x 110.170.163.146 给出:110-170-163-146.static.asianet.co.th。在这里你可以看到,我现在在泰国。
在 Thunderbird 中我有:
Server Name: mail.<mydomain.com>
Port: 587
Connection security: STARTTLS
Authentication method: Normal password
Username: <me>@<mydomain.com>
master.cf 中的所有 smtpd 行:
submission inet n - y - - smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_tls_wrappermode=no
-o smtpd_relay_restrictions=permit_sasl_authenticated,reject
-o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject
-o smtpd_sasl_auth_enable=yes
-o smtpd_sasl_type=dovecot
-o smtpd_sasl_path=inet:10.89.0.10:12345
main.cf 中的所有 smtpd 规则:
smtpd_tls_cert_file = /etc/letsencrypt/live/mail.<mydomain.com>/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/mail.<mydomain.com>/privkey.pem
smtpd_tls_security_level = may
smtpd_tls_loglevel = 1
smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtpd_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtpd_sasl_auth_enable = yes
smtpd_tls_auth_only = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = inet:dovecot:12345
reject_unauth_destination, check_policy_service unix:private/spfcheck check_sender_access /etc/postfix/sender_access check_recipient_access /etc/postfix/recipient_access
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, check_policy_service unix:private/spfcheck
smtpd_milters = inet:127.0.0.1:8891
non_smtpd_milters = $smtpd_milters
smtpd_sender_restrictions = permit_mynetworks, permit_sasl_authenticated,
smtpd_helo_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_invalid_helo_hostname, reject_non_fqdn_helo_hostname, reject_unknown_helo_hostname
smtpd_client_restrictions = permit_mynetworks, reject_unknown_reverse_client_hostname
据我所知,错误消息与“反向主机名”有关。我超出了正常主机名的范围。但 Thunderbird 应该可以登录并发送电子邮件。
有人知道如何解决这个问题吗?
答案1
实际情况是,您的submission
服务正在继承这些main.cf
选项。这些与 Postfix 默认值的偏差对于服务器到服务器的邮件交换来说可能并不不合理。但对于从任何地方(不是通过固定上行链路或 VPN)连接的客户端,不应期望可解析的反向名称。
也没有必要要求两个都反向名称和 sasl。身份验证期间提交的名称无论如何都是更有用的标识符(唯一、本地管理、已验证)。
建议的修复:覆盖 master.cf 中仅身份验证端口的相关选项,就像已经对要求身份验证的限制集所做的那样:
submission inet n - y - - smtpd
-o ...
-o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject
-o smtpd_client_restrictions=
-o ...
-o ...
进行更改后,重新加载配置(取决于分布,类似于systemctl reload postfix
)并检查启动期间生成的日志。