web-dev-qa-db-ja.com

Exim:ローカルドメインのユーザーにメール認証を強制する

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 =受信者
 
受け入れる
2
travatuh

最後に、私は自分で問題を解決しました。次のステートメントをacl構成ファイルに追加する必要があります。

 accept 
 message = must auth 
 domains = + local_domains:+ repository_to_domains 
 senders =:regex-expresion 

これは、条件statemenとPerlスクリプトでも解決できます。

助けてくれてありがとう。

2
travatuh

Local_domainsに、認証を要求するホストが含まれていないことを確認してください。これにより、これらのサーバーのオープンリレー状況が防止されます。

ただし、サーバーがMX経由でインターネットに電子メールを送信することは一般的です。通常、この場合は認証を要求しません。

Relay_to_domainsが空であるか、リレーを許可するドメインのみが含まれていることを確認してください。 (あなたはこのリスト内のすべてのドメインのオープンリレーです。)

AUTH要求を受け入れる前に、STARTTLSが必要であることを確認してください。そうしないと、パスワードが簡単に盗聴されてしまいます。

0
BillThor