Dovecotとpostgresqlを使用して仮想ユーザー用にexim4を構成していますが、解決できない問題が発生しました。状況は次のとおりです。
「localdomain」ユーザーが別の「localdomain」ユーザーまたは外部ユーザーに電子メールを送信しようとしたときに、認証する必要があります。そうしないと、操作を拒否します。
実際には、どのタイプのSMTPオープンリレーも避けようとしています。
実際には、SMTPは正常に機能し、その要件を設定する必要があります。この動作を取得するためにeximを正しく構成する正しい方法が見つかりません(ACL、ルート、またはトランスポートルールですか?)
この構成をどのように定義できますか?
例1
220 my-server ESMTP Exim 4.84 Thu、31 Mar 2016 22:26:28 +0000 ehlo localhost 250-my-server Hello localhost [192.168.1.X] 250-SIZE 52428800 250-8BITMIME 250-PIPELINING 250-AUTH PLAIN LOGIN 250 HELP mail from: [email protected] 250 OK rcpt to:[email protected] 250 Accepted data 354メッセージを入力、「。」で終わる回線自体で これが発生してはなりません。ユーザー '[email protected]'は認証されていません。 ____。]ローカルドメインのユーザーであるため、「authlogin」または「authplain」の。 。 250 OK id = 1all3Q-0004l2-V4
例2
220 my-server ESMTP Exim 4.84 Thu、31 Mar 2016 22:58:56 +0000 ehlo localhost 250-my-server Hello localhost [192.168.1.X] 250-SIZE 52428800 250-8BITMIME 250-PIPELINING 250-AUTH PLAIN LOGIN 250 HELP mail from: [email protected] 250 OK rcpt to:[email protected] 250 Accepted data 354メッセージを入力して終了「。」で単独で これはすでに有効です。 。 250 OK id = 1allZR-00050E-Sq
ACL RCPT-TO構成ファイル
acl_check_rcpt: accept hosts =: control = dkim_disable_verify 。ifdef CHECK_RCPT_LOCAL_LOCALPARTS deny ドメイン= + local_domains local_parts = CHECK_RCPT_LOCAL_LOCALPARTS メッセージ=アドレス内の制限された文字 。endif 拒否 ドメイン。 =!+ local_domains local_parts = CHECK_RCPT_REMOTE_LOCALPARTS メッセージ=アドレス内の制限された文字 。endif accept 。ifndef CHECK_RCPT_POS .____。] local_parts = postmaster 。else local_parts = CHECK_RCPT_POSTMASTER 。endif domains = + local_domains:+ relay_to_domains [.__ ] .ifdef CHECK_RCPT_VERIFY_SENDER deny message = Failed! !acl = acl_local_deny_exceptions !verify = sender 。endif .____。] deny !acl = acl_local_deny_exceptions 送信者= $ {存在する場合{CONFDIR/local_sender_callout}\ {CONFDIR/local_sender_callout}\ {}} !verify = sender/callout accept hosts = + relay_from_hosts control = submit/sender_retain control = dkim_disable_verify accept 認証済み= * control = submit/sender_retain control = dkim_disable_verify require message =リレーが拒否されました! domain = + local_domains: + relay_to_domains require verify =受信者 deny !acl = acl_local_deny_exceptions 受信者= $ {存在する場合{CONFDIR/local_rcpt_callout}\ {CONFDIR/local_rcpt_callout}\ {}} !verify =受信者/コールアウト 拒否 メッセージ=送信者エンベロープアドレス$ sender_address iここでローカルにブラックリストに登録されています。これが間違っていると思われる場合は、postmaster に連絡してください!acl = acl_local_deny_exceptions senders = $ {存在する場合{CONFDIR/local_sender_blacklist}\ {CONFDIR/local_sender_blacklist}\ {}} deny メッセージ=送信者IPアドレス$ sender_Host_addressはここでローカルにブラックリストに登録されています。これが間違っていると思われる場合は、postmaster に連絡してください!acl = acl_local_deny_exceptions hosts = $ {存在する場合{CONFDIR/local_Host_blacklist}\ {CONFDIR/local_Host_blacklist}\ {}} accept domains = + relay_to_domains endpass verify =受信者 受け入れる
最後に、私は自分で問題を解決しました。次のステートメントをacl構成ファイルに追加する必要があります。
accept message = must auth domains = + local_domains:+ repository_to_domains senders =:regex-expresion
これは、条件statemenとPerlスクリプトでも解決できます。
助けてくれてありがとう。
Local_domainsに、認証を要求するホストが含まれていないことを確認してください。これにより、これらのサーバーのオープンリレー状況が防止されます。
ただし、サーバーがMX経由でインターネットに電子メールを送信することは一般的です。通常、この場合は認証を要求しません。
Relay_to_domainsが空であるか、リレーを許可するドメインのみが含まれていることを確認してください。 (あなたはこのリスト内のすべてのドメインのオープンリレーです。)
AUTH要求を受け入れる前に、STARTTLSが必要であることを確認してください。そうしないと、パスワードが簡単に盗聴されてしまいます。