Domain-Name-System

後綴 NOQUEUE:拒絕:來自未知的 RCPT

  • December 4, 2021

我建構了一個基於 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 <someaddress@gmail.com>: Relay access denied; from=<Domain@eastinc.nl> to=<someaddress@gmail.com> proto=ESMTP helo=<domain.eastinc.nl>
   postfix/smtpd[22261]: disconnect from unknown[192.168.3.101]

我很確定 srv.eastinc.nl 解析為 192.168.3.101,因為 nslookup 是這樣說的。後綴配置:

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 中繼郵件。關於如何讓它發揮作用的任何想法?

您的配置中有以下限制:

smtpd_recipient_restrictions = permit_sasl_authenticated, reject_unauth_destination
smtpd_sender_restrictions = reject_unknown_sender_domain

permit_sasl_authenticated

當客戶端通過 RFC 4954 (AUTH) 協議成功驗證時,允許該請求。

拒絕_unauth_destination

除非滿足以下條件之一,否則拒絕請求:

  • 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 主機連接的人(它是伺服器本身嗎?)在沒有身份驗證的情況下發送郵件(日誌中沒有關於身份驗證的內容)。因此,您需要以下限制才能這樣做:

permit_mynetworks

當客戶端 IP 地址與 $mynetworks 中列出的任何網路或網路地址匹配時,允許請求。

前面smtpd_recipient_restrictions加上permit_mynetworks.

smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination

官方文件:訪問自述文件

UDP

有時它真的很糟糕,permit_mynetworks因為任何主機$mynetworks都可以在沒有身份驗證的情況下送出郵件。

因此,最好通過 smtp 送出郵件,並使用您的應用程序中的身份驗證,不要使用sendmail()/mail()函式

引用自:https://serverfault.com/questions/775415