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,
すべて正常に動作しますが、もちろんスパムチェックはありません。
上記の現在の設定では、dovecotとdspamの両方が電子メールを適切な宛先に再ルーティングできません。特にdovecotの場合、ドメイン構成に基づいてのみ電子メールを受け入れることができます。
解決策は、dspam
セットアップをスキャンしてdovecotに送信した後、メールをpostfixに戻すことです。この設定では、ポストフィックスルーティングエンジンをスキャンした後、メールを再ルーティングします
言い換えると
[ Outside ] --smtp--> [ Postfix ] --lmtp--> [ dspam ] --smtp--> [ postfix ] --> dovecot (if localdomain) or another mail server (if external domain)
このチュートリアル のdspamセットアップのように構成できます。手順の概要
dspam_filter_access
電子メールをdspamに配信するには、content_filterパラメーターを使用できますno_address_mappings
)content_filterと2番目のsmtpdの別の制限DSPAMによる外部エイリアスのチェックをすべてバイパスできます。
Incoming Mail -> SMTP -> External address
Check_recipient_access行を削除し、代わりにdspamをデフォルトのvirtual_transportとして設定します。
virtual_transport = lmtp:unix:/dspam/dspam.sock
リソースを節約し、いくつかのクレイジーなローカルバウンスをスキップします。とにかく、電子メールは外部の宛先でスパムチェックされる可能性が高いです... ;-)