web-dev-qa-db-ja.com

postfixと仮想ドメインのdovecotの間のデーモンとしてdspamを使用して外部エイリアスを処理する方法は?

Postfix 2.9.6、DSpam 3.10.1、Dovecot2.1.7の受信メールには次のような状況があります。

Incoming Mail -> SMTP -> LMTP -> DSpam (as daemon) -> LMTP -> Dovecot

仮想メールボックスを備えた仮想ドメインがあります。これまでのところ、すべて正常に動作しています。

外部ドメインを指す(仮想?)エイリアスで問題が発生するようになりました。次の仮想ドメインがあると仮定します。

virtualdomain1.com
virtualdomain2.com

私がメールを扱っているのです。サーバー自体はで実行されます

mydomain.com

外部ドメインを指すエイリアスを今すぐ追加すると、例:

[email protected] -> [email protected]

次に(ログを追跡できる限り)、DSpamはメールをチェックし、LMTPを介してDovecotに渡し、user @ externaldomain.comが不明であるためDovecotはメールを拒否します(もちろん何が正しいか)。

では、仮想ドメインのエイリアスを処理するための正しい設定はどのようになっていますか?可能であれば、受信メールで仮想エイリアスを確認したいと思います。

[email protected]への着信メッセージのログは次のとおりです。

postfix/smtpd[23910]: connect from xxx.anyhost.com[1.2.3.4]
postfix/smtpd[23910]: NOQUEUE: filter: RCPT from xxx.anyhost.com[1.2.3.4]: <[email protected]>: Recipient address triggers FILTER lmtp:unix:/dspam/dspam.sock; from=<[email protected]> to=<[email protected]> proto=ESMTP helo=<anyhost.com>
postfix/smtpd[23910]: D91D0771AF70: client=xxx.anyhost.com[1.2.3.4]
postfix/cleanup[23917]: D91D0771AF70: message-id=<[email protected]>
postfix/smtpd[23910]: disconnect from xxx.anyhost.com[1.2.3.4]
postfix/qmgr[23278]: D91D0771AF70: from=<[email protected]>, size=1030, nrcpt=1 (queue active)
dovecot: lmtp(23920): Debug: none: root=, index=, control=, inbox=, alt=
dovecot: lmtp(23920): Connect from local
dovecot: lmtp(23920): Debug: Loading modules from directory: /usr/lib/dovecot/modules
dovecot: lmtp(23920): Debug: Module loaded: /usr/lib/dovecot/modules/lib90_sieve_plugin.so
dovecot: auth-worker(23921): mysql(127.0.0.1): Connected to database postfixadmin
dspam[9421]: Got error 550 in response to RCPT TO: 550 5.1.1 <[email protected]> User doesn't exist: [email protected]#015
dovecot: auth-worker(23921): sql([email protected]): unknown user
dovecot: lmtp(23920): Debug: auth input:
dovecot: lmtp(23920): Disconnect from local: Client quit (in RCPT TO)
postfix/lmtp[23918]: D91D0771AF70: to=<[email protected]>, orig_to=<[email protected]>, relay=mail.mydomain.com[/dspam/dspam.sock], delay=0.98, delays=0.47/0.01/0/0.5, dsn=5.3.0, status=bounced (Host mail.mydomain.com[/dspam/dspam.sock] said: 530 5.3.0 <[email protected]> Fatal: 550 5.1.1 <[email protected]> User doesn't exist: [email protected] (in reply to end of DATA command))
postfix/cleanup[23917]: 149CB771AF72: message-id=<[email protected]>
postfix/bounce[23923]: D91D0771AF70: sender non-delivery notification: 149CB771AF72
postfix/qmgr[23278]: 149CB771AF72: from=<>, size=3182, nrcpt=1 (queue active)
postfix/qmgr[23278]: D91D0771AF70: removed
postfix/smtp[23925]: 149CB771AF72: to=<[email protected]>, relay=mx.mydomain.com[1.2.3.5]:25, delay=3.9, delays=0.26/0.01/0.09/3.6, dsn=2.0.0, status=sent (250 OK id=1YY9Ne-0007eJ-Hp)
postfix/qmgr[23278]: 149CB771AF72: removed

接尾辞main.cf:smtpd_banner = $ myhostname ESMTP $ mail_name(Debian/GNU)biff = no

# appending .domain is the MUA's job.
append_dot_mydomain = no

readme_directory = no

# BECAUSE we use Dovecot for authentication we also use its certificates
smtpd_tls_cert_file=/etc/dovecot/dovecot.pem
smtpd_tls_key_file=/etc/dovecot/private/dovecot.pem
smtpd_use_tls=yes
smtpd_tls_auth_only = yes

#Handing off local delivery to Dovecot's LMTP, and telling it where to store mail
virtual_transport = lmtp:unix:private/dovecot-lmtp

#Virtual domains, users, and aliases
virtual_mailbox_domains = proxy:mysql:$config_directory/mysql_virtual_domains_maps.cf
virtual_mailbox_maps =
    proxy:mysql:$config_directory/mysql_virtual_mailbox_maps.cf,
    proxy:mysql:$config_directory/mysql_virtual_alias_domain_mailbox_maps.cf,
    proxy:mysql:$config_directory/mysql_virtual_alias_domain_catchall_maps.cf
virtual_alias_maps =
    proxy:mysql:$config_directory/mysql_virtual_alias_maps.cf,
    proxy:mysql:$config_directory/mysql_virtual_alias_domain_maps.cf
virtual_mailbox_limit = proxy:mysql:$config_directory/mysql_virtual_mailbox_limit_maps.cf

myhostname = mail.me.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = localhost, $myhostname
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 1000000000
recipient_delimiter = +
inet_interfaces = all
inet_protocols = all

#Enabling SMTP for authenticated users, and handing off authentication to Dovecot
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes

smtpd_recipient_restrictions =
        permit_sasl_authenticated,
        permit_mynetworks,
        reject_unauth_destination,
        check_recipient_access pcre:/etc/postfix/dspam_filter_access,
        permit

Dspam_filter_accessファイル:

/./  FILTER lmtp:unix:/dspam/dspam.sock

最後の注意:この行にコメントすると

#check_recipient_access pcre:/etc/postfix/dspam_filter_access,

すべて正常に動作しますが、もちろんスパムチェックはありません。

5
ralph

上記の現在の設定では、dovecotとdspamの両方が電子メールを適切な宛先に再ルーティングできません。特にdovecotの場合、ドメイン構成に基づいてのみ電子メールを受け入れることができます。

解決策は、dspamセットアップをスキャンしてdovecotに送信した後、メールをpostfixに戻すことです。この設定では、ポストフィックスルーティングエンジンをスキャンした後、メールを再ルーティングします

  • 受信者アドレスが外部ドメインを指している場合は、外部メールサーバーへ
  • 受信者のアドレスが仮想ドメインと一致する場合は、鳩小屋に

言い換えると

[ Outside ] --smtp--> [ Postfix ] --lmtp--> [ dspam ] --smtp--> [ postfix ] --> dovecot (if localdomain) or another mail server (if external domain)

このチュートリアル のdspamセットアップのように構成できます。手順の概要

  1. Master.cfに2番目の接尾辞smtpdリスナーを追加します(例:localhost:10026)。
  2. 代わりにdspam_filter_access電子メールをdspamに配信するには、content_filterパラメーターを使用できます
  3. DSPAMのDelivery {Host、Port、Proto}の構成を変更して、2番目のsmtpdを後置します
  4. アドレスマッピングを無効にします(no_address_mappings)content_filterと2番目のsmtpdの別の制限
2
masegaloeh

DSPAMによる外部エイリアスのチェックをすべてバイパスできます。

Incoming Mail -> SMTP -> External address

Check_recipient_access行を削除し、代わりにdspamをデフォルトのvirtual_transportとして設定します。

virtual_transport = lmtp:unix:/dspam/dspam.sock

リソースを節約し、いくつかのクレイジーなローカルバウンスをスキップします。とにかく、電子メールは外部の宛先でスパムチェックされる可能性が高いです... ;-)

0
postfixer