Postfix NOQUEUE:拒绝:来自未知的 RCPT

Postfix NOQUEUE:拒绝:来自未知的 RCPT

我创建了一个基于 Web 的应用程序,但当它尝试发送电子邮件时失败了。Postfix 在其 mail.log 中记录了以下内容:

    postfix/smtpd[22261]: warning: hostname srv.eastinc.nl does not resolve to address 192.168.3.101
    postfix/smtpd[22261]: connect from unknown[192.168.3.101]
    postfix/smtpd[22261]: NOQUEUE: reject: RCPT from unknown[192.168.3.101]: 554 5.7.1 <[email protected]>: Relay access denied; from=<[email protected]> to=<[email protected]> proto=ESMTP helo=<domain.eastinc.nl>
    postfix/smtpd[22261]: disconnect from unknown[192.168.3.101]

我很确定 srv.eastinc.nl 解析为 192.168.3.101,因为 nslookup 就是这样说的。Postfix 配置:

alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
append_dot_mydomain = no
biff = no
config_directory = /etc/postfix
delay_warning_time = 2h
home_mailbox = Maildir/
inet_interfaces = all
mailbox_size_limit = 0
mydestination = eastinc.nl, mail.eastinc.nl, srv.eastinc.nl, localhost.eastinc.nl, localhost
myhostname = mail.eastinc.nl
mynetworks = localhost 192.168.3.101 127.0.0.1 srv.eastinc.nl
myorigin = /etc/mailname
readme_directory = no
recipient_delimiter = +
relayhost = smtp.ziggo.nl:25
smtp_always_send_ehlo = yes
smtp_sasl_auth_enable = no
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
smtpd_recipient_restrictions = permit_sasl_authenticated, reject_unauth_destination
smtpd_sender_restrictions = reject_unknown_sender_domain
smtpd_tls_cert_file = /etc/ssl/certs/mailcert.pem
smtpd_tls_key_file = /etc/ssl/private/mail.key
smtpd_tls_protocols = !SSLv2, !SSLv3
smtpd_tls_security_level = may
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtpd_use_tls = yes

如果我理解正确的话,192.168.3.101 和 srv.eastinc.nl 都应该能够通过 Postfix 中继邮件。有什么办法可以实现吗?

答案1

您的配置中有以下限制:

smtpd_recipient_restrictions = permit_sasl_authenticated, reject_unauth_destination
smtpd_sender_restrictions = reject_unknown_sender_domain

允许_sasl_已认证

当客户端通过 RFC 4954(AUTH)协议成功验证后允许请求。

拒绝未授权目的地

拒绝该请求,除非以下情况之一成立:

  • Postfix 是邮件转发器:解析后的 RCPT TO 域与 $relay_domains 或其子域匹配,并且不包含发件人指定的路由(user@elsewhere@domain),

  • Postfix 是最终目的地:解析的 RCPT TO 域与 $mydestination、$inet_interfaces、$proxy_interfaces、$virtual_alias_domains 或 $virtual_mailbox_domains 匹配,并且不包含发件人指定的路由(user@elsewhere@domain)。

拒绝未知发件人域名

当 Postfix 不是发件人地址的最终目的地,并且 MAIL FROM 域具有 1) DNS MX 和 DNS A 记录,或者 2) 格式错误的 MX 记录(例如,长度为零的 MX 主机名的记录)时,拒绝请求(Postfix 版本 2.3 及更高版本)。

答复由unknown_address_reject_code参数(默认值:450)、unknown_address_tempfail_action(默认值:defer_if_permit)或550(nullmx,Postfix 3.0及更高版本)指定。有关详细信息,请参阅相应的参数说明。

因此,我的猜测是:任何从 192.168.3.101 主机(它是服务器本身吗?)连接的人都会发送未经身份验证的邮件(日志中没有关于身份验证的任何信息)。因此,您需要以下限制才能这样做:

允许我的网络

当客户端 IP 地址与 $mynetworks 中列出的任何网络或网络地址匹配时允许该请求。

smtpd_recipient_restrictions在前面加上permit_mynetworks

smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination

官方文档:ACCESS README

UDP

有时候真的很糟糕,permit_mynetworks因为任何主机$mynetworks无需身份验证即可提交邮件。

因此,最好通过 smtp 从您的应用程序提交带有身份验证的邮件,而不要使用sendmail()/mail()函数

答案2

最近,我从 Windows Outlook 客户端发送电子邮件时遇到了同样的问题。

笔记:此错误尤其发生在通过 Outlook 桌面应用程序发送电子邮件时。

以下是从 Outlook 代理发送电子邮件时在 /var/log/mail.log 中发现的错误消息。

NOQUEUE: reject: RCPT from unknown[XXX.XXX.XXX.XXX]: 450 4.7.1 <DESKTOPOABC123>: Helo command rejected: Host not found; from=<[email protected]> to=<[email protected]> proto=ESMTP helo=<DESKTOPOABC123>

为了修复该问题,我执行了以下操作,以便能够通过 Outlook 代理发送电子邮件。

步骤1: 在 /etc/postfix/main.cf 文件中注释掉“smtpd_recipient_restrictions”参数中的以下条目。

在此处输入图片描述

第2步:重新启动postfix服务代理。

$ sudo systemctl 重新启动 postfix

相关内容