web-dev-qa-db-ja.com

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]

Nslookupがそう言うので、srv.eastinc.nlが192.168.3.101に解決されると確信しています。 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経由でメールをリレーできるはずです。これを機能させる方法に関するアイデアはありますか?

6
Steve

設定には次の制限があります。

_smtpd_recipient_restrictions = permit_sasl_authenticated, reject_unauth_destination
smtpd_sender_restrictions = reject_unknown_sender_domain
_

permit_sasl_authenticated

RFC 4954(AUTH)プロトコルを介してクライアントが正常に認証されたら、要求を許可します。

reject_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)を含みません。

reject_unknown_sender_domain

Postfixが送信者アドレスの最終的な宛先ではなく、MAIL FROMドメインに1)DNS MXもDNS Aレコードもない場合、または2)長さ0の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ホスト(サーバー自体ですか?)から接続して、認証なしでメールを送信する人(ログにはauthについては何もない)です。そのためには、次の制限が必要です。

permit_mynetworks

クライアントのIPアドレスが$ mynetworksにリストされているネットワークまたはネットワークアドレスと一致する場合にリクエストを許可します。

_smtpd_recipient_restrictions_の前に_permit_mynetworks_を追加します。

_smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
_

公式ドキュメント:ACCESS README

[〜#〜] udp [〜#〜]

any_permit_mynetworks_のホストは認証なしでメールを送信できるため、_$mynetworks_は本当に悪い場合があります。

したがって、アプリからauthを使用してsmtp経由でメールを送信し、sendmail()/mail()関数を使用しないことをお勧めします

12
Darigaaz