dovecot と Simple Content Filter (Postfix) を使用した always_bcc への重複メッセージの配信

dovecot と Simple Content Filter (Postfix) を使用した always_bcc への重複メッセージの配信

以下を使用して、トラフィックの非常に少ない Postfix メール サーバーをセットアップしようとしています。

  • シンプルなコンテンツフィルター(http://www.postfix.org/FILTER_README.html#simple_filter)。高度なものよりもはるかにシンプルで、トラフィックも少ないです。
  • 配信エージェントとしての dovecot。(maildir クォータと sieve フィルタのため)
  • always_bcc送信したすべてのメールのコピーを保存する。(ビジネスルール)

関連する設定は次のとおりです:

マスター.cf

smtp      inet  n       -       y       -       -       smtpd
        -o content_filter=filter:dummy
pickup    unix  n       -       y       60      1       pickup
cleanup   unix  n       -       y       -       0       cleanup
qmgr      unix  n       -       n       300     1       qmgr
tlsmgr    unix  -       -       y       1000?   1       tlsmgr
rewrite   unix  -       -       y       -       -       trivial-rewrite
bounce    unix  -       -       y       -       0       bounce
defer     unix  -       -       y       -       0       bounce
trace     unix  -       -       y       -       0       bounce
verify    unix  -       -       y       -       1       verify
flush     unix  n       -       y       1000?   0       flush
proxymap  unix  -       -       n       -       -       proxymap
proxywrite unix -       -       n       -       1       proxymap
smtp      unix  -       -       y       -       -       smtp
relay     unix  -       -       y       -       -       smtp
        -o syslog_name=postfix/$service_name
showq     unix  n       -       y       -       -       showq
error     unix  -       -       y       -       -       error
retry     unix  -       -       y       -       -       error
discard   unix  -       -       y       -       -       discard
local     unix  -       n       n       -       -       local
virtual   unix  -       n       n       -       -       virtual
lmtp      unix  -       -       y       -       -       lmtp
anvil     unix  -       -       y       -       1       anvil
scache    unix  -       -       y       -       1       scache
postlog   unix-dgram n  -       n       -       1       postlogd
uucp      unix  -       n       n       -       -       pipe
  flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)
filter    unix  -       n       n       -       10      pipe
  flags=Rq user=filter null_sender=
  argv=/var/spool/filter/scripts/filter.sh -f ${sender} -- ${recipient}
dovecot    unix  -       n       n       -       -       pipe
  flags=DRhu user=vmail:mail argv=/usr/lib/dovecot/dovecot-lda -f ${sender} -d ${recipient}

main.cf (関連部分のみ)

always_bcc = [email protected]
virtual_transport = dovecot
dovecot_destination_recipient_limit = 1

/var/spool/filter/scripts/filter.sh

#!/bin/sh

/usr/bin/cat | /var/spool/filter/scripts/mailfilter | /usr/sbin/sendmail -G -i "$@"

exit $?

  • 私のユーザー全員のメールアドレスは「(初期)[メールアドレス]" フォーマット
  • 役割として機能するセキュリティグループがあり、それぞれに「[メールアドレス]" フォーマット。
  • 基本的に、ロール メールは複数のユーザーへのエイリアスとして機能します。

したがって、ユーザーを直接使用せずに、権限を設定するために使用するのと同じロール/グループを再利用できます。

例えば

  • 私のユーザーメールアドレスは[メールアドレス]
  • 私はITDepartment([メールアドレス]
  • 私は他のいくつかの役割にも参加していますが、私の主な役割は「IT部門」です。
  • 私はこのグループ/役割のメンバーであるため、他のメンバーやこのグループ/役割に送られるすべてのメールと同様に、特定の権限を持っています。[メールアドレス]私と他のメンバーに届きます。

ここまでは順調です...しかし、上司は私が送信するすべてのメールに[メールアドレス](役割)アドレスの代わりに[メールアドレス](ユーザー) つまり、送信されるすべてのメールは、ユーザーのメールではなく、プリンシパル ロールのメールを使用します。

/var/spool/filter/scripts/mailfilterこれは、まさにそれを実行する社内製のフィルターです (LDAP サーバーをチェックして、「送信元」アドレスを「(Initial).surname@」から「role@」に変更します)。

失敗することはありません (エラー状態の場合は、標準入力を標準出力にコピーするだけで変更は行われないため、アドレスは変更されませんが、メールは失われません)。

問題は、メールを送信すると、2つのコピーが配信されることです。[メールアドレス]ログに見られるように、予想どおりにコピーは 1 つではありません。


Dec 16 16:23:08 correo2 postfix/smtpd[32453]: connect from informatica1.mydomain.example[10.128.159.15]
Dec 16 16:23:08 correo2 postfix/smtpd[32453]: DD925380C87: client=informatica1.mydomain.example[10.128.159.15], sasl_method=LOGIN, [email protected]
Dec 16 16:23:08 correo2 postfix/cleanup[32456]: DD925380C87: message-id=<[email protected]>
Dec 16 16:23:09 correo2 postfix/qmgr[32275]: DD925380C87: from=<[email protected]>, size=2749, nrcpt=2 (queue active)
Dec 16 16:23:09 correo2 postfix/pickup[32274]: AAFEF380C8D: uid=110 from=<[email protected]>
Dec 16 16:23:09 correo2 postfix/pipe[32457]: DD925380C87: to=<[email protected]>, relay=filter, delay=0.81, delays=0.11/0/0/0.7, dsn=2.0.0, status=sent (delivered via filter service)
Dec 16 16:23:09 correo2 postfix/pipe[32457]: DD925380C87: to=<[email protected]>, orig_to=<[email protected]>, relay=filter, delay=0.81, delays=0.11/0/0/0.7, dsn=2.0.0, status=sent (delivered via filter service)
Dec 16 16:23:09 correo2 postfix/qmgr[32275]: DD925380C87: removed
Dec 16 16:23:09 correo2 postfix/cleanup[32456]: AAFEF380C8D: message-id=<[email protected]>
Dec 16 16:23:09 correo2 postfix/qmgr[32275]: AAFEF380C8D: from=<[email protected]>, size=2927, nrcpt=3 (queue active)
Dec 16 16:23:10 correo2 dovecot: lda([email protected])<32488><2DSfML3hnGPofgAA0V72BQ>: msgid=<[email protected]>: saved mail to INBOX
Dec 16 16:23:10 correo2 postfix/pipe[32473]: AAFEF380C8D: to=<[email protected]>, relay=dovecot, delay=1.1, delays=0.79/0/0/0.28, dsn=2.0.0, status=sent (delivered via dovecot service)
Dec 16 16:23:10 correo2 dovecot: lda([email protected])<32490><Au2fML3hnGPqfgAA0V72BQ>: msgid=<[email protected]>: saved mail to INBOX
Dec 16 16:23:10 correo2 postfix/pipe[32471]: AAFEF380C8D: to=<[email protected]>, relay=dovecot, delay=1.1, delays=0.79/0/0/0.34, dsn=2.0.0, status=sent (delivered via dovecot service)
Dec 16 16:23:10 correo2 dovecot: lda([email protected])<32489><BE2gML3hnGPpfgAA0V72BQ>: msgid=<[email protected]>: saved mail to INBOX
Dec 16 16:23:10 correo2 postfix/pipe[32470]: AAFEF380C8D: to=<[email protected]>, relay=dovecot, delay=1.1, delays=0.79/0/0/0.35, dsn=2.0.0, status=sent (delivered via dovecot service)
Dec 16 16:23:10 correo2 postfix/qmgr[32275]: AAFEF380C8D: removed
Dec 16 16:23:11 correo2 postfix/smtpd[32453]: disconnect from informatica1.mydomain.example[10.128.159.15] ehlo=1 auth=1 mail=1 rcpt=1 data=1 quit=1 commands=6

uid=110 は「フィルター」ユーザー uid です。「From」は電子メール内のヘッダーでのみ変更されるため、ログには表示されません。

この二重配信の詳細を除いて、すべて正常に動作しています。試していませんが、dovecot を方程式から削除すると、すべて正常に動作すると確信しています。ただし、sieve ルールと maildir クォータは失われます。そのため...

どうすれば修正できるか、何かアイデアはありますか?

答え1

Tl;dr: 元のメールが Postfix に到着すると、Postfix は always_bcc を追加してコピーを送信し、フィルターに従ってメールをドロップします。フィルターは新しいメッセージを Postfix に送信し、Postfix は always_bcc を追加してコピーを送信し、メールを配信します。

最後の3つの段落を読んでください。


Postfixに届く最初のメールはオリジナルのDD925380C87、そのコピーを直接送信しseccopiesます常に_bccルール。2番目AAFEF380C8D 翻訳:は、フィルタによって変換され(From ヘッダーを自分のグループに変更)、 にseccopiesも送信されますが、最初の電子メールの BCC が にすでに設定されていたためseccopies、Postfix は に BCC に送信する必要があると判断し、seccopies再度 を取得します。

つまり、3つのコピーを取得することになりますseccopiesが、2[3] は同じメールであると識別されます(AAFEF380C8D 翻訳:):

  1. 最初の からy.hernandezまでy.hernandez>> always_bccseccopies
  2. 2番目からinformatics>> y.hernandezalways_bccseccopies
  3. 3番目のfromからinformatics>> seccopies always_bcc seccopies(BCCとして2

原本の1部を次の宛先に送付しますseccopies:

**DD925380C87**: to=<[email protected]>, relay=filter, delay=0.81, delays=0.11/0/0/0.7, dsn=2.0.0, status=sent (delivered via filter service)

の行uid=1102が作成され、2 つの配信 (1 つは TO であるためy.hernandez、もう 1 つは BCC であるため) はseccopies次のようになります。

AAFEF380C8D: to=<[email protected]>, relay=dovecot, delay=1.1, delays=0.79/0/0/0.34, dsn=2.0.0, status=sent (delivered via dovecot service)
AAFEF380C8D: to=<[email protected]>, relay=dovecot, delay=1.1, delays=0.79/0/0/0.28, dsn=2.0.0, status=sent (delivered via dovecot service)

そして最後に、変更された電子メールが目的の受信者に配信されます。

AAFEF380C8D: to=<[email protected]>, relay=dovecot, delay=1.1, delays=0.79/0/0/0.35, dsn=2.0.0, status=sent (delivered via dovecot service)

重複排除により、2つのAAFEF380C8D 翻訳:メールが配信されないようにするseccopiesが、それがDD925380C87メールです。別のメールだからです。

あなたは従う必要があると思いますこれ指示、そのためコンテンツフィルタは、自動BCCの結果ではなく、元のメールアドレスを参照します。その後、メールが Postfix に再挿入され、always_bcc が適用されます。

/etc/postfix/main.cf:
content_filter = scan:localhost:10025
receive_override_options = no_address_mappings

から受信オーバーライドオプション: main.cf ファイルで「BEFORE コンテンツ フィルタ」の receive_override_options 設定が指定されている場合は、master.cf で「AFTER コンテンツ フィルタ」の receive_override_options 設定を指定します (その逆も同様)。

関連情報